From c990d0859c17414cd8cee80b1be248a50790de4a Mon Sep 17 00:00:00 2001 From: Theo Date: Wed, 26 Jul 2023 07:36:06 -0700 Subject: [PATCH] Change repo structure & add script to for IPFS deployment and build commands --- .env.example | 2 + .gitbook/assets/Claim.png | Bin 85623 -> 0 bytes .gitignore | 4 + .nvmrc | 1 + README.md | 76 ++++------------- {.gitbook => book/.gitbook}/assets/1 (1).png | Bin {.gitbook => book/.gitbook}/assets/1 (2).png | Bin {.gitbook => book/.gitbook}/assets/1 (3).png | Bin .../assets/1-bje88nlnkbe29-zcs5agkw-2x.png | Bin .../assets/1-bjggju1rn4_qoxgcljfneq.png | Bin .../assets/1-gmc0jw8zr5xfvrk5zyqmya.png | Bin .../assets/1-megm4amqrrkx0qxva9iska-2x.png | Bin .../assets/1-ogfrad8p3gez14zh4jndiq-2x.png | Bin .../assets/1-qwu2v6lalrldd28prupvlq.png | Bin {.gitbook => book/.gitbook}/assets/1.png | Bin ...1d612b6c57964bab59c8e5b766f5247211083d.png | Bin {.gitbook => book/.gitbook}/assets/1add.png | Bin {.gitbook => book/.gitbook}/assets/2 (2).png | Bin {.gitbook => book/.gitbook}/assets/2.png | Bin {.gitbook => book/.gitbook}/assets/200.gif | Bin {.gitbook => book/.gitbook}/assets/2add.png | Bin {.gitbook => book/.gitbook}/assets/3 (1).png | Bin {.gitbook => book/.gitbook}/assets/3 (2).png | Bin {.gitbook => book/.gitbook}/assets/4 (1).png | Bin ...c05d176d7f75a336af7a865565c9b23786b98c.png | Bin .../assets/4R1HHWy8j2kTwjugeFCfj2NzatB.png | Bin .../.gitbook}/assets/4remove.png | Bin .../.gitbook}/assets/5remove.png | Bin .../.gitbook/assets/Claim.png | Bin {.gitbook => book/.gitbook}/assets/Stake.png | Bin .../.gitbook}/assets/Unstake.png | Bin .../assets/aaaaaaaa (1) (1) (1) (1).gif | Bin .../.gitbook}/assets/aaaaaaaa (1) (1) (1).gif | Bin .../.gitbook}/assets/aaaaaaaa (1) (1).gif | Bin .../.gitbook}/assets/aaaaaaaa (1).gif | Bin .../.gitbook}/assets/aaaaaaaa (2).gif | Bin .../.gitbook}/assets/aaaaaaaa.gif | Bin {.gitbook => book/.gitbook}/assets/aaaab.gif | Bin .../.gitbook}/assets/abdaaaa.png | Bin {.gitbook => book/.gitbook}/assets/abdce.gif | Bin .../.gitbook}/assets/aboutconfig.png | Bin .../.gitbook}/assets/aboutconfig2.png | Bin .../.gitbook}/assets/addmetamask.png | Bin .../.gitbook}/assets/ahrjxbq.png | Bin .../.gitbook}/assets/aid86cj.png | Bin .../assets/allowprivateclickokay.png | Bin {.gitbook => book/.gitbook}/assets/apdk.png | Bin {.gitbook => book/.gitbook}/assets/azpoj.gif | Bin {.gitbook => book/.gitbook}/assets/bpdk.png | Bin .../.gitbook}/assets/bpsqxxr.png | Bin ...1813edad280544b627b24002dc8d5adcf2 (1).png | Bin ...5e5a1813edad280544b627b24002dc8d5adcf2.png | Bin .../capture-de-cran-2021-08-17-a-15.57.00.png | Bin .../capture-de-cran-2021-08-24-a-16.41.23.png | Bin .../capture-de-cran-2021-09-02-a-14.57.11.png | Bin .../capture-de-cran-2021-09-02-a-15.07.01.png | Bin .../capture-de-cran-2021-09-02-a-15.12.23.png | Bin .../capture-de-cran-2021-09-02-a-15.12.53.png | Bin .../.gitbook}/assets/cast-the-vote.png | Bin .../assets/check-relayer-ens-subdomains.png | Bin .../.gitbook}/assets/claim (1).png | Bin .../.gitbook}/assets/confirm-the-vote.png | Bin .../.gitbook}/assets/connect-wallet.png | Bin ...d37d169a94f09156e76fa522b7974cb7c9ac3f.png | Bin .../.gitbook}/assets/d8dmxjj.png | Bin .../.gitbook}/assets/dE13HsA.png | Bin {.gitbook => book/.gitbook}/assets/dknasj.png | Bin .../.gitbook}/assets/downloadinstall.png | Bin .../.gitbook}/assets/e9jyqhu.png | Bin .../assets/eHuzorT5lslrOoxKKvRPxLtAHy7.png | Bin ...ement-de-le-cran-2021-08-24-a-17.18.35.gif | Bin ...nt-de-le-cran-2021-08-25-a-16.15.15-1-.gif | Bin ...ement-de-le-cran-2021-08-25-a-16.15.15.gif | Bin .../.gitbook}/assets/ezgif-2-ab5e0860a5d4.gif | Bin {.gitbook => book/.gitbook}/assets/gov.jpg | Bin {.gitbook => book/.gitbook}/assets/head.png | Bin .../.gitbook}/assets/i6qtr0f.png | Bin .../.gitbook}/assets/image (1).png | Bin .../.gitbook}/assets/image (2).png | Bin .../.gitbook}/assets/image (3).png | Bin .../.gitbook}/assets/image (4).png | Bin .../.gitbook}/assets/image (5).png | Bin {.gitbook => book/.gitbook}/assets/image.png | Bin .../.gitbook}/assets/indexeddb.png | Bin .../.gitbook}/assets/k6juetp.png | Bin .../.gitbook}/assets/kokikou.gif | Bin {.gitbook => book/.gitbook}/assets/logos.png | Bin .../.gitbook}/assets/lskzkgk.png | Bin .../.gitbook}/assets/m3fh0gl.png | Bin .../.gitbook}/assets/metamaskhome.png | Bin .../.gitbook}/assets/metamaskicon(1).gif | Bin ...-anonymous-transactions-on-ethereum-2-.png | Bin ...nymous-transactions-on-ethereum-3- (1).png | Bin ...-anonymous-transactions-on-ethereum-3-.png | Bin ...ial-anonymous-transactions-on-ethereum.png | Bin .../assets/o04px38SoXt0G5IVTxr5rEeI588.png | Bin {.gitbook => book/.gitbook}/assets/ozxj.png | Bin .../.gitbook}/assets/page-daccueil.png | Bin .../assets/register-relayer-summary.png | Bin .../.gitbook}/assets/relayer-stake-permit.png | Bin .../.gitbook}/assets/set-relayer-link.png | Bin .../assets/set-up-relayer-workers.png | Bin .../.gitbook}/assets/time-window.png | Bin .../.gitbook}/assets/vhustru.png | Bin {.gitbook => book/.gitbook}/assets/wasm.png | Bin .../.gitbook}/assets/wo55lao.png | Bin .../.gitbook}/assets/xcNzhNG.png | Bin .../assets/yIT7YcJf1Kc9T7rCcdZW3bZd0mx.png | Bin .../.gitbook}/assets/zOwfk4k.gif | Bin .../.gitbook}/assets/zdizdijz.gif | Bin .../.gitbook}/assets/zrY5GEi.png | Bin book/README.md | 72 ++++++++++++++++ SUMMARY.md => book/SUMMARY.md | 0 book.json => book/book.json | 0 {circuits => book/circuits}/README.md | 0 .../circuits}/anonymity-mining/README.md | 0 .../anonymity-mining/mining-rewards.md | 0 .../anonymity-mining/tornado-trees.md | 0 .../circuits}/core-deposit-circuit.md | 0 .../general}/community/contributing.md | 0 .../general}/community/governance.md | 0 {general => book/general}/deployments.md | 0 {general => book/general}/guides/local-ui.md | 0 {general => book/general}/guides/opsec.md | 0 .../general}/guides/post-censorship/es.md | 0 .../general}/guides/post-censorship/index.md | 0 .../general}/guides/post-censorship/ru.md | 0 .../general}/guides/post-censorship/zh.md | 0 {general => book/general}/guides/relayer.md | 0 {general => book/general}/guides/tor.md | 0 {general => book/general}/how-does-it-work.md | 0 .../general}/resources/analytics.md | 0 .../general}/resources/compliance-tool.md | 0 {general => book/general}/resources/tutela.md | 0 .../general}/token/anonymity-mining.md | 0 {general => book/general}/token/index.md | 0 {general => book/general}/token/staking.md | 0 .../assets/RPReplay_Final1652713377.gif | Bin .../assets/RPReplay_Final1652713666.gif | Bin .../assets/RPReplay_Final1652713746.gif | Bin .../assets/RPReplay_Final1652713870.gif | Bin ...een Recording 2022-05-16 at 3.49.20 PM.mov | Bin ...een Recording 2022-05-16 at 4.05.59 PM.gif | Bin ...een Recording 2022-05-16 at 4.07.52 PM.gif | Bin ...reen Shot 2022-05-16 at 3.54.57 PM (1).png | Bin .../Screen Shot 2022-05-16 at 3.54.57 PM.png | Bin .../Screen Shot 2022-05-16 at 5.47.11 PM.png | Bin .../Screen Shot 2022-05-18 at 1.08.50 AM.png | Bin .../Screen Shot 2022-05-18 at 1.18.08 AM.png | Bin ...reen Shot 2022-05-18 at 1.34.57 AM (1).png | Bin ...reen Shot 2022-05-18 at 1.34.57 AM (2).png | Bin .../Screen Shot 2022-05-18 at 1.34.57 AM.png | Bin .../.gitbook/assets/argen.gif | Bin .../.gitbook/assets/argent (1) (1).gif | Bin .../.gitbook/assets/argent (1).gif | Bin .../.gitbook/assets/argent (2).gif | Bin .../.gitbook/assets/argent.gif | Bin .../assets/ezgif-3-e888cf338a (1).gif | Bin .../.gitbook/assets/ezgif-3-e888cf338a.gif | Bin .../.gitbook/assets/imtoken (1) (1) (1).gif | Bin .../.gitbook/assets/imtoken (1) (1).gif | Bin .../.gitbook/assets/imtoken.gif | Bin .../.gitbook/assets/metamask.gif | Bin .../.gitbook/assets/trust (1) (1).gif | Bin .../.gitbook/assets/trust.gif | Bin .../.gitbook/assets/which.gif | Bin .../tornado-cash-classic}/connect-wallet.md | 0 .../tornado-cash-classic}/deposit-withdraw.md | 0 .../tornado-cash-nova}/connect-wallet.md | 0 .../tornado-cash-nova}/deposit-withdraw.md | 0 .../tornado-cash-nova}/shielded-transfers.md | 0 package-lock.json | 77 ++++++++++++++++++ package.json | 30 +++++++ scripts/ipfsUpload.js | 74 +++++++++++++++++ 174 files changed, 274 insertions(+), 62 deletions(-) create mode 100644 .env.example delete mode 100644 .gitbook/assets/Claim.png create mode 100644 .gitignore create mode 100644 .nvmrc rename {.gitbook => book/.gitbook}/assets/1 (1).png (100%) rename {.gitbook => book/.gitbook}/assets/1 (2).png (100%) rename {.gitbook => book/.gitbook}/assets/1 (3).png (100%) rename {.gitbook => book/.gitbook}/assets/1-bje88nlnkbe29-zcs5agkw-2x.png (100%) rename {.gitbook => book/.gitbook}/assets/1-bjggju1rn4_qoxgcljfneq.png (100%) rename {.gitbook => book/.gitbook}/assets/1-gmc0jw8zr5xfvrk5zyqmya.png (100%) rename {.gitbook => book/.gitbook}/assets/1-megm4amqrrkx0qxva9iska-2x.png (100%) rename {.gitbook => book/.gitbook}/assets/1-ogfrad8p3gez14zh4jndiq-2x.png (100%) rename {.gitbook => book/.gitbook}/assets/1-qwu2v6lalrldd28prupvlq.png (100%) rename {.gitbook => book/.gitbook}/assets/1.png (100%) rename {.gitbook => book/.gitbook}/assets/181d612b6c57964bab59c8e5b766f5247211083d.png (100%) rename {.gitbook => book/.gitbook}/assets/1add.png (100%) rename {.gitbook => book/.gitbook}/assets/2 (2).png (100%) rename {.gitbook => book/.gitbook}/assets/2.png (100%) rename {.gitbook => book/.gitbook}/assets/200.gif (100%) rename {.gitbook => book/.gitbook}/assets/2add.png (100%) rename {.gitbook => book/.gitbook}/assets/3 (1).png (100%) rename {.gitbook => book/.gitbook}/assets/3 (2).png (100%) rename {.gitbook => book/.gitbook}/assets/4 (1).png (100%) rename {.gitbook => book/.gitbook}/assets/43c05d176d7f75a336af7a865565c9b23786b98c.png (100%) rename {.gitbook => book/.gitbook}/assets/4R1HHWy8j2kTwjugeFCfj2NzatB.png (100%) rename {.gitbook => book/.gitbook}/assets/4remove.png (100%) rename {.gitbook => book/.gitbook}/assets/5remove.png (100%) rename .gitbook/assets/claim.png => book/.gitbook/assets/Claim.png (100%) rename {.gitbook => book/.gitbook}/assets/Stake.png (100%) rename {.gitbook => book/.gitbook}/assets/Unstake.png (100%) rename {.gitbook => book/.gitbook}/assets/aaaaaaaa (1) (1) (1) (1).gif (100%) rename {.gitbook => book/.gitbook}/assets/aaaaaaaa (1) (1) (1).gif (100%) rename {.gitbook => book/.gitbook}/assets/aaaaaaaa (1) (1).gif (100%) rename {.gitbook => book/.gitbook}/assets/aaaaaaaa (1).gif (100%) rename {.gitbook => book/.gitbook}/assets/aaaaaaaa (2).gif (100%) rename {.gitbook => book/.gitbook}/assets/aaaaaaaa.gif (100%) rename {.gitbook => book/.gitbook}/assets/aaaab.gif (100%) rename {.gitbook => book/.gitbook}/assets/abdaaaa.png (100%) rename {.gitbook => book/.gitbook}/assets/abdce.gif (100%) rename {.gitbook => book/.gitbook}/assets/aboutconfig.png (100%) rename {.gitbook => book/.gitbook}/assets/aboutconfig2.png (100%) rename {.gitbook => book/.gitbook}/assets/addmetamask.png (100%) rename {.gitbook => book/.gitbook}/assets/ahrjxbq.png (100%) rename {.gitbook => book/.gitbook}/assets/aid86cj.png (100%) rename {.gitbook => book/.gitbook}/assets/allowprivateclickokay.png (100%) rename {.gitbook => book/.gitbook}/assets/apdk.png (100%) rename {.gitbook => book/.gitbook}/assets/azpoj.gif (100%) rename {.gitbook => book/.gitbook}/assets/bpdk.png (100%) rename {.gitbook => book/.gitbook}/assets/bpsqxxr.png (100%) rename {.gitbook => book/.gitbook}/assets/c05e5a1813edad280544b627b24002dc8d5adcf2 (1).png (100%) rename {.gitbook => book/.gitbook}/assets/c05e5a1813edad280544b627b24002dc8d5adcf2.png (100%) rename {.gitbook => book/.gitbook}/assets/capture-de-cran-2021-08-17-a-15.57.00.png (100%) rename {.gitbook => book/.gitbook}/assets/capture-de-cran-2021-08-24-a-16.41.23.png (100%) rename {.gitbook => book/.gitbook}/assets/capture-de-cran-2021-09-02-a-14.57.11.png (100%) rename {.gitbook => book/.gitbook}/assets/capture-de-cran-2021-09-02-a-15.07.01.png (100%) rename {.gitbook => book/.gitbook}/assets/capture-de-cran-2021-09-02-a-15.12.23.png (100%) rename {.gitbook => book/.gitbook}/assets/capture-de-cran-2021-09-02-a-15.12.53.png (100%) rename {.gitbook => book/.gitbook}/assets/cast-the-vote.png (100%) rename {.gitbook => book/.gitbook}/assets/check-relayer-ens-subdomains.png (100%) rename {.gitbook => book/.gitbook}/assets/claim (1).png (100%) rename {.gitbook => book/.gitbook}/assets/confirm-the-vote.png (100%) rename {.gitbook => book/.gitbook}/assets/connect-wallet.png (100%) rename {.gitbook => book/.gitbook}/assets/d2d37d169a94f09156e76fa522b7974cb7c9ac3f.png (100%) rename {.gitbook => book/.gitbook}/assets/d8dmxjj.png (100%) rename {.gitbook => book/.gitbook}/assets/dE13HsA.png (100%) rename {.gitbook => book/.gitbook}/assets/dknasj.png (100%) rename {.gitbook => book/.gitbook}/assets/downloadinstall.png (100%) rename {.gitbook => book/.gitbook}/assets/e9jyqhu.png (100%) rename {.gitbook => book/.gitbook}/assets/eHuzorT5lslrOoxKKvRPxLtAHy7.png (100%) rename {.gitbook => book/.gitbook}/assets/enregistrement-de-le-cran-2021-08-24-a-17.18.35.gif (100%) rename {.gitbook => book/.gitbook}/assets/enregistrement-de-le-cran-2021-08-25-a-16.15.15-1-.gif (100%) rename {.gitbook => book/.gitbook}/assets/enregistrement-de-le-cran-2021-08-25-a-16.15.15.gif (100%) rename {.gitbook => book/.gitbook}/assets/ezgif-2-ab5e0860a5d4.gif (100%) rename {.gitbook => book/.gitbook}/assets/gov.jpg (100%) rename {.gitbook => book/.gitbook}/assets/head.png (100%) rename {.gitbook => book/.gitbook}/assets/i6qtr0f.png (100%) rename {.gitbook => book/.gitbook}/assets/image (1).png (100%) rename {.gitbook => book/.gitbook}/assets/image (2).png (100%) rename {.gitbook => book/.gitbook}/assets/image (3).png (100%) rename {.gitbook => book/.gitbook}/assets/image (4).png (100%) rename {.gitbook => book/.gitbook}/assets/image (5).png (100%) rename {.gitbook => book/.gitbook}/assets/image.png (100%) rename {.gitbook => book/.gitbook}/assets/indexeddb.png (100%) rename {.gitbook => book/.gitbook}/assets/k6juetp.png (100%) rename {.gitbook => book/.gitbook}/assets/kokikou.gif (100%) rename {.gitbook => book/.gitbook}/assets/logos.png (100%) rename {.gitbook => book/.gitbook}/assets/lskzkgk.png (100%) rename {.gitbook => book/.gitbook}/assets/m3fh0gl.png (100%) rename {.gitbook => book/.gitbook}/assets/metamaskhome.png (100%) rename {.gitbook => book/.gitbook}/assets/metamaskicon(1).gif (100%) rename {.gitbook => book/.gitbook}/assets/non-custodial-anonymous-transactions-on-ethereum-2-.png (100%) rename {.gitbook => book/.gitbook}/assets/non-custodial-anonymous-transactions-on-ethereum-3- (1).png (100%) rename {.gitbook => book/.gitbook}/assets/non-custodial-anonymous-transactions-on-ethereum-3-.png (100%) rename {.gitbook => book/.gitbook}/assets/non-custodial-anonymous-transactions-on-ethereum.png (100%) rename {.gitbook => book/.gitbook}/assets/o04px38SoXt0G5IVTxr5rEeI588.png (100%) rename {.gitbook => book/.gitbook}/assets/ozxj.png (100%) rename {.gitbook => book/.gitbook}/assets/page-daccueil.png (100%) rename {.gitbook => book/.gitbook}/assets/register-relayer-summary.png (100%) rename {.gitbook => book/.gitbook}/assets/relayer-stake-permit.png (100%) rename {.gitbook => book/.gitbook}/assets/set-relayer-link.png (100%) rename {.gitbook => book/.gitbook}/assets/set-up-relayer-workers.png (100%) rename {.gitbook => book/.gitbook}/assets/time-window.png (100%) rename {.gitbook => book/.gitbook}/assets/vhustru.png (100%) rename {.gitbook => book/.gitbook}/assets/wasm.png (100%) rename {.gitbook => book/.gitbook}/assets/wo55lao.png (100%) rename {.gitbook => book/.gitbook}/assets/xcNzhNG.png (100%) rename {.gitbook => book/.gitbook}/assets/yIT7YcJf1Kc9T7rCcdZW3bZd0mx.png (100%) rename {.gitbook => book/.gitbook}/assets/zOwfk4k.gif (100%) rename {.gitbook => book/.gitbook}/assets/zdizdijz.gif (100%) rename {.gitbook => book/.gitbook}/assets/zrY5GEi.png (100%) create mode 100644 book/README.md rename SUMMARY.md => book/SUMMARY.md (100%) rename book.json => book/book.json (100%) rename {circuits => book/circuits}/README.md (100%) rename {circuits => book/circuits}/anonymity-mining/README.md (100%) rename {circuits => book/circuits}/anonymity-mining/mining-rewards.md (100%) rename {circuits => book/circuits}/anonymity-mining/tornado-trees.md (100%) rename {circuits => book/circuits}/core-deposit-circuit.md (100%) rename {general => book/general}/community/contributing.md (100%) rename {general => book/general}/community/governance.md (100%) rename {general => book/general}/deployments.md (100%) rename {general => book/general}/guides/local-ui.md (100%) rename {general => book/general}/guides/opsec.md (100%) rename {general => book/general}/guides/post-censorship/es.md (100%) rename {general => book/general}/guides/post-censorship/index.md (100%) rename {general => book/general}/guides/post-censorship/ru.md (100%) rename {general => book/general}/guides/post-censorship/zh.md (100%) rename {general => book/general}/guides/relayer.md (100%) rename {general => book/general}/guides/tor.md (100%) rename {general => book/general}/how-does-it-work.md (100%) rename {general => book/general}/resources/analytics.md (100%) rename {general => book/general}/resources/compliance-tool.md (100%) rename {general => book/general}/resources/tutela.md (100%) rename {general => book/general}/token/anonymity-mining.md (100%) rename {general => book/general}/token/index.md (100%) rename {general => book/general}/token/staking.md (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/RPReplay_Final1652713377.gif (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/RPReplay_Final1652713666.gif (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/RPReplay_Final1652713746.gif (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/RPReplay_Final1652713870.gif (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/Screen Recording 2022-05-16 at 3.49.20 PM.mov (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/Screen Recording 2022-05-16 at 4.05.59 PM.gif (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/Screen Recording 2022-05-16 at 4.07.52 PM.gif (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/Screen Shot 2022-05-16 at 3.54.57 PM (1).png (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/Screen Shot 2022-05-16 at 3.54.57 PM.png (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/Screen Shot 2022-05-16 at 5.47.11 PM.png (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/Screen Shot 2022-05-18 at 1.08.50 AM.png (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/Screen Shot 2022-05-18 at 1.18.08 AM.png (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/Screen Shot 2022-05-18 at 1.34.57 AM (1).png (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/Screen Shot 2022-05-18 at 1.34.57 AM (2).png (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/Screen Shot 2022-05-18 at 1.34.57 AM.png (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/argen.gif (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/argent (1) (1).gif (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/argent (1).gif (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/argent (2).gif (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/argent.gif (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/ezgif-3-e888cf338a (1).gif (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/ezgif-3-e888cf338a.gif (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/imtoken (1) (1) (1).gif (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/imtoken (1) (1).gif (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/imtoken.gif (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/metamask.gif (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/trust (1) (1).gif (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/trust.gif (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/.gitbook/assets/which.gif (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/connect-wallet.md (100%) rename {tornado-cash-classic => book/tornado-cash-classic}/deposit-withdraw.md (100%) rename {tornado-cash-nova => book/tornado-cash-nova}/connect-wallet.md (100%) rename {tornado-cash-nova => book/tornado-cash-nova}/deposit-withdraw.md (100%) rename {tornado-cash-nova => book/tornado-cash-nova}/shielded-transfers.md (100%) create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 scripts/ipfsUpload.js diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..b89041f --- /dev/null +++ b/.env.example @@ -0,0 +1,2 @@ +PINATA_API_KEY= +PINATA_SECRET_API_KEY= \ No newline at end of file diff --git a/.gitbook/assets/Claim.png b/.gitbook/assets/Claim.png deleted file mode 100644 index d5b1d5217626644ac6bae465df4485c16273a8b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85623 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�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�in%)Qh9dIz*h!QVTv*#+9c!*}O z%Y<|R-c&%#XO8$^)7fHs>cizW{Ej9QVC`?!^GM*RON+-wE~SN${xvlvr2=``8yL znBn{~I?nFd+Y6gi44zEDjK2sNQUj}ezgp)qd~C6ivls9?d8k_{UleC8dox*wfk8;W zfnpvVwRyi!=W(`4cci$0X|UfV4G4cd??)r9HIYHtPsdlZZauO6Tn|t>KgFrglI!x` zB?r~V)}^N9880a?D%W40q0NuZKAlmoPgkw~&Zq*O>5I{ubvs5Kw-*9)50TdXUchEq zM4VVmlV&aPPHNq!#zo(yIc4~67*q~%F=g*wKFZwa-a z%tZ1~5`62)KONfExioq0JP>HFP^qAxMKsP#qQ d?IRI1!Q@W#*TMsO8WP~|v5NM?V&#|b{vXzX-wyx) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9c35804 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.env +node_modules +_book +build \ No newline at end of file diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..11c9723 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v10.24.1 \ No newline at end of file diff --git a/README.md b/README.md index a7c1ab8..cb35706 100644 --- a/README.md +++ b/README.md @@ -1,72 +1,24 @@ -# Introduction to Tornado Cash +# Tornado Cash Documentation -![](/.gitbook/assets/image.png) +> UI for non-custodial Ethereum Privacy solution -{% hint style="danger" %} -*Tornado Cash was sanctioned by the US Treasury on 08/08/2022, making it illegal for US citizens to interact with the core and governance contracts.* -{% endhint %} -Tornado Cash is a **non-custodial** **privacy protocol** allowing **permissionless** shielded transactions on Ethereum and derivative networks. **Tornado Cash is not a mixer, as assets are never commingled due to the presence of zero knowledge cryptography**. The core of the protocol is ungovernable and immutable, given Ethereum's distributed state and the provenance of the contracts, they can neither be changed nor tampered with. -Therefore, nobody - including the original developers - can modify or inhibit the protocol. All governance and associated smart contracts are deployed by the community. As a non-custodial protocol, users keep custody of their cryptocurrencies while using Tornado Cash. This means that at each deposit, they are provided with a secret "note" that grants the access to the deposited funds, allowing self-soverginity over one's assets. +### Read static content -## How is anonymity achieved? +Entrypoint here: [docs](book/README.md) -Tornado Cash achives anonymity by breaking the on-chain link between source and destination addresses through "anonymity pools". These are immutable smart contracts that accepts fixed denominations of a currency, acting as what is known as a mix network. Although anonymity is only obtained with use of a "relayer", which acts as a withdrawal proxy to mask the link between destination and source addresses. +### Building locally -Learn more about [_How does Tornado Cash work?_](general/how-does-it-work.md) and [Tips to remain anonymous](general/guides/opsec.md). +* Install [Node.js](https://nodejs.org) version 10.24 + * If you are using [nvm](https://github.com/nvm-sh/nvm) (recommended) running `nvm use` will automatically choose the right node version for you. +* Install dependencies: `npm i` +* Install gitbook dependencies: `npm run prepare` +* Build gitbook to static content: `npm run build` -## Where is Tornado Cash deployed? +## Deploy on IPFS -Since its inception in 2019, Tornado Cash has been mainly operating **on the Ethereum network**, with anonymity pools for ETH, DAI, cDAI, USDC, USDT and WBTC. +* Copy `.env.example` file to `.env` -Since June 2021, the smart contracts **have also been deployed on other side-chains & blockchains**. These deployments enabled network agnostic functionality, allowing for faster and cheaper transactions. - -* **Ethereum** - * **ETH** (Ethereum) - * **DAI** (Dai) - * **cDAI** (Compound Dai) - * **USDC** (USD Coin) - * **USDT** (Tether) - * **WBTC** (Wrapped Bitcoin) -* **Binance Smart Chain** - * **BNB** (Binance Coin) -* **Polygon** - * **MATIC** (Polygon) -* **Gnosis Chain (formerly xDAI)** - * **xDAI** (xDai) -* **Avalanche** - * **AVAX** (Avalanche) -* **Optimism** - * **ETH** (Ethereum) -* **Arbitrum One** - * **ETH** (Ethereum) - -Until December 2021, governance enabled "anonymity mining" - a mechanism to incentivise proactive usage of selected anonymity sets to compliment pool entropy, allowing depositors to earn the native governance token (**TORN**). - -_See sections_ [_Anonymity mining_](circuits/anonymity-mining) _and the_ [_TORN token_](general/token/index.md) for more information. - -**The protocol's native governance token, TORN, allows open and decentralized collaboration to shape the direction of the protocol through voting.**. The community has a strong influence over the evolution of Tornado Cash, it's development and management of the protocol's treasury. - -Anonymity pools operate **under the principle of fixed-amount deposits and withdrawals**. Meaning that each supported asset has multiple pools which make up an "anonymity set", each pool restricts transactions to be a fixed amount _(e.g. ETH has four different pools, one for each of these amounts: 0.1, 1, 10 and 100 ETH)_. - -### Tornado Cash Nova - -With the release of a [**new __experimental__ version of Tornado Cash; Nova**](https://tornado-cash.medium.com/tornado-cash-introduces-arbitrary-amounts-shielded-transfers-8df92d93c37c), provides an **upgraded expierence for anonymity pools**. Users are no longer constrained by fixed-amount transactions, possible through the UXTO model alllowing **arbitrary (customized) amounts and shielded internal transfers**. - -Tornado Cash Nova is deployed on Gnosis Chain (formerly xDAI) with the original hopes to improve speed and cost by bridging from Ethereum mainnet using the AMB Omnibridge. - -__Please note Tornado Cash Nova has a low relayer count, is in an experimental state and regularly faces issues with Omnibridge because of bridge limits and validator censorship__. - -## How does Tornado Cash function? - -Tornado Cash is represented by it's community, collaboration is facilitated through the governance contract or Decentralized Autonomous Organisation (DAO). **No singular entity or person controls Tornado Cash.** - -All protocol related code is open-source and is published to two independent git instances: - -* [Community git](https://git.tornado.ws): store of the latest community maintained repositories -* [Sanctioned Github](https://github.com/tornadocash): public archive after the OFAC sanctions - -The existence of zero knowledge in the protocol was based **on open-source research authored by ZCash**. To implement a zero knowledge scheme, [a trusted setup is required](https://tornado-cash.medium.com/tornado-cash-trusted-setup-ceremony-b846e1e00be1), which is essentially a store of random data from various sources defining robustness in generation of proving and verifying keys. Which successfully occured for the protocol on [May 2020 with 1114 contributions](https://tornado-cash.medium.com/the-biggest-trusted-setup-ceremony-in-the-world-3c6ab9c8fffa). This significant number of contributors makes it implausible to compromise the protocol by faking zero-knowledge proofs. - -Tornado Cash user interfaces are hosted on **IPFS** (InterPlanetary File System) deployed by the community, minimizing the risk of censorship. These interfaces will be accessible as long as IPFS nodes pin the content, the latest IPFS content hashes are available at [tornadocash.eth](https://app.ens.domains/name/tornadocash.eth/details) and [nova.tornadocash.eth](https://app.ens.domains/name/nova.tornadocash.eth/details). Please see [how to pin IPFS content](https://docs.ipfs.tech/how-to/pin-files/) if you wish to contribute. +- Make sure you set `PINATA_API_KEY` and `PINATA_SECRET_API_KEY` environment variables in `.env` +- To deploy a production build run `npm run deploy:ipfs` \ No newline at end of file diff --git a/.gitbook/assets/1 (1).png b/book/.gitbook/assets/1 (1).png similarity index 100% rename from .gitbook/assets/1 (1).png rename to book/.gitbook/assets/1 (1).png diff --git a/.gitbook/assets/1 (2).png b/book/.gitbook/assets/1 (2).png similarity index 100% rename from .gitbook/assets/1 (2).png rename to book/.gitbook/assets/1 (2).png diff --git a/.gitbook/assets/1 (3).png b/book/.gitbook/assets/1 (3).png similarity index 100% rename from .gitbook/assets/1 (3).png rename to book/.gitbook/assets/1 (3).png diff --git a/.gitbook/assets/1-bje88nlnkbe29-zcs5agkw-2x.png b/book/.gitbook/assets/1-bje88nlnkbe29-zcs5agkw-2x.png similarity index 100% rename from .gitbook/assets/1-bje88nlnkbe29-zcs5agkw-2x.png rename to book/.gitbook/assets/1-bje88nlnkbe29-zcs5agkw-2x.png diff --git a/.gitbook/assets/1-bjggju1rn4_qoxgcljfneq.png b/book/.gitbook/assets/1-bjggju1rn4_qoxgcljfneq.png similarity index 100% rename from .gitbook/assets/1-bjggju1rn4_qoxgcljfneq.png rename to book/.gitbook/assets/1-bjggju1rn4_qoxgcljfneq.png diff --git a/.gitbook/assets/1-gmc0jw8zr5xfvrk5zyqmya.png b/book/.gitbook/assets/1-gmc0jw8zr5xfvrk5zyqmya.png similarity index 100% rename from .gitbook/assets/1-gmc0jw8zr5xfvrk5zyqmya.png rename to book/.gitbook/assets/1-gmc0jw8zr5xfvrk5zyqmya.png diff --git a/.gitbook/assets/1-megm4amqrrkx0qxva9iska-2x.png b/book/.gitbook/assets/1-megm4amqrrkx0qxva9iska-2x.png similarity index 100% rename from .gitbook/assets/1-megm4amqrrkx0qxva9iska-2x.png rename to book/.gitbook/assets/1-megm4amqrrkx0qxva9iska-2x.png diff --git a/.gitbook/assets/1-ogfrad8p3gez14zh4jndiq-2x.png b/book/.gitbook/assets/1-ogfrad8p3gez14zh4jndiq-2x.png similarity index 100% rename from .gitbook/assets/1-ogfrad8p3gez14zh4jndiq-2x.png rename to book/.gitbook/assets/1-ogfrad8p3gez14zh4jndiq-2x.png diff --git a/.gitbook/assets/1-qwu2v6lalrldd28prupvlq.png b/book/.gitbook/assets/1-qwu2v6lalrldd28prupvlq.png similarity index 100% rename from .gitbook/assets/1-qwu2v6lalrldd28prupvlq.png rename to book/.gitbook/assets/1-qwu2v6lalrldd28prupvlq.png diff --git a/.gitbook/assets/1.png b/book/.gitbook/assets/1.png similarity index 100% rename from .gitbook/assets/1.png rename to book/.gitbook/assets/1.png diff --git a/.gitbook/assets/181d612b6c57964bab59c8e5b766f5247211083d.png b/book/.gitbook/assets/181d612b6c57964bab59c8e5b766f5247211083d.png similarity index 100% rename from .gitbook/assets/181d612b6c57964bab59c8e5b766f5247211083d.png rename to book/.gitbook/assets/181d612b6c57964bab59c8e5b766f5247211083d.png diff --git a/.gitbook/assets/1add.png b/book/.gitbook/assets/1add.png similarity index 100% rename from .gitbook/assets/1add.png rename to book/.gitbook/assets/1add.png diff --git a/.gitbook/assets/2 (2).png b/book/.gitbook/assets/2 (2).png similarity index 100% rename from .gitbook/assets/2 (2).png rename to book/.gitbook/assets/2 (2).png diff --git a/.gitbook/assets/2.png b/book/.gitbook/assets/2.png similarity index 100% rename from .gitbook/assets/2.png rename to book/.gitbook/assets/2.png diff --git a/.gitbook/assets/200.gif b/book/.gitbook/assets/200.gif similarity index 100% rename from .gitbook/assets/200.gif rename to book/.gitbook/assets/200.gif diff --git a/.gitbook/assets/2add.png b/book/.gitbook/assets/2add.png similarity index 100% rename from .gitbook/assets/2add.png rename to book/.gitbook/assets/2add.png diff --git a/.gitbook/assets/3 (1).png b/book/.gitbook/assets/3 (1).png similarity index 100% rename from .gitbook/assets/3 (1).png rename to book/.gitbook/assets/3 (1).png diff --git a/.gitbook/assets/3 (2).png b/book/.gitbook/assets/3 (2).png similarity index 100% rename from .gitbook/assets/3 (2).png rename to book/.gitbook/assets/3 (2).png diff --git a/.gitbook/assets/4 (1).png b/book/.gitbook/assets/4 (1).png similarity index 100% rename from .gitbook/assets/4 (1).png rename to book/.gitbook/assets/4 (1).png diff --git a/.gitbook/assets/43c05d176d7f75a336af7a865565c9b23786b98c.png b/book/.gitbook/assets/43c05d176d7f75a336af7a865565c9b23786b98c.png similarity index 100% rename from .gitbook/assets/43c05d176d7f75a336af7a865565c9b23786b98c.png rename to book/.gitbook/assets/43c05d176d7f75a336af7a865565c9b23786b98c.png diff --git a/.gitbook/assets/4R1HHWy8j2kTwjugeFCfj2NzatB.png b/book/.gitbook/assets/4R1HHWy8j2kTwjugeFCfj2NzatB.png similarity index 100% rename from .gitbook/assets/4R1HHWy8j2kTwjugeFCfj2NzatB.png rename to book/.gitbook/assets/4R1HHWy8j2kTwjugeFCfj2NzatB.png diff --git a/.gitbook/assets/4remove.png b/book/.gitbook/assets/4remove.png similarity index 100% rename from .gitbook/assets/4remove.png rename to book/.gitbook/assets/4remove.png diff --git a/.gitbook/assets/5remove.png b/book/.gitbook/assets/5remove.png similarity index 100% rename from .gitbook/assets/5remove.png rename to book/.gitbook/assets/5remove.png diff --git a/.gitbook/assets/claim.png b/book/.gitbook/assets/Claim.png similarity index 100% rename from .gitbook/assets/claim.png rename to book/.gitbook/assets/Claim.png diff --git a/.gitbook/assets/Stake.png b/book/.gitbook/assets/Stake.png similarity index 100% rename from .gitbook/assets/Stake.png rename to book/.gitbook/assets/Stake.png diff --git a/.gitbook/assets/Unstake.png b/book/.gitbook/assets/Unstake.png similarity index 100% rename from .gitbook/assets/Unstake.png rename to book/.gitbook/assets/Unstake.png diff --git a/.gitbook/assets/aaaaaaaa (1) (1) (1) (1).gif b/book/.gitbook/assets/aaaaaaaa (1) (1) (1) (1).gif similarity index 100% rename from .gitbook/assets/aaaaaaaa (1) (1) (1) (1).gif rename to book/.gitbook/assets/aaaaaaaa (1) (1) (1) (1).gif diff --git a/.gitbook/assets/aaaaaaaa (1) (1) (1).gif b/book/.gitbook/assets/aaaaaaaa (1) (1) (1).gif similarity index 100% rename from .gitbook/assets/aaaaaaaa (1) (1) (1).gif rename to book/.gitbook/assets/aaaaaaaa (1) (1) (1).gif diff --git a/.gitbook/assets/aaaaaaaa (1) (1).gif b/book/.gitbook/assets/aaaaaaaa (1) (1).gif similarity index 100% rename from .gitbook/assets/aaaaaaaa (1) (1).gif rename to book/.gitbook/assets/aaaaaaaa (1) (1).gif diff --git a/.gitbook/assets/aaaaaaaa (1).gif b/book/.gitbook/assets/aaaaaaaa (1).gif similarity index 100% rename from .gitbook/assets/aaaaaaaa (1).gif rename to book/.gitbook/assets/aaaaaaaa (1).gif diff --git a/.gitbook/assets/aaaaaaaa (2).gif b/book/.gitbook/assets/aaaaaaaa (2).gif similarity index 100% rename from .gitbook/assets/aaaaaaaa (2).gif rename to book/.gitbook/assets/aaaaaaaa (2).gif diff --git a/.gitbook/assets/aaaaaaaa.gif b/book/.gitbook/assets/aaaaaaaa.gif similarity index 100% rename from .gitbook/assets/aaaaaaaa.gif rename to book/.gitbook/assets/aaaaaaaa.gif diff --git a/.gitbook/assets/aaaab.gif b/book/.gitbook/assets/aaaab.gif similarity index 100% rename from .gitbook/assets/aaaab.gif rename to book/.gitbook/assets/aaaab.gif diff --git a/.gitbook/assets/abdaaaa.png b/book/.gitbook/assets/abdaaaa.png similarity index 100% rename from .gitbook/assets/abdaaaa.png rename to book/.gitbook/assets/abdaaaa.png diff --git a/.gitbook/assets/abdce.gif b/book/.gitbook/assets/abdce.gif similarity index 100% rename from .gitbook/assets/abdce.gif rename to book/.gitbook/assets/abdce.gif diff --git a/.gitbook/assets/aboutconfig.png b/book/.gitbook/assets/aboutconfig.png similarity index 100% rename from .gitbook/assets/aboutconfig.png rename to book/.gitbook/assets/aboutconfig.png diff --git a/.gitbook/assets/aboutconfig2.png b/book/.gitbook/assets/aboutconfig2.png similarity index 100% rename from .gitbook/assets/aboutconfig2.png rename to book/.gitbook/assets/aboutconfig2.png diff --git a/.gitbook/assets/addmetamask.png b/book/.gitbook/assets/addmetamask.png similarity index 100% rename from .gitbook/assets/addmetamask.png rename to book/.gitbook/assets/addmetamask.png diff --git a/.gitbook/assets/ahrjxbq.png b/book/.gitbook/assets/ahrjxbq.png similarity index 100% rename from .gitbook/assets/ahrjxbq.png rename to book/.gitbook/assets/ahrjxbq.png diff --git a/.gitbook/assets/aid86cj.png b/book/.gitbook/assets/aid86cj.png similarity index 100% rename from .gitbook/assets/aid86cj.png rename to book/.gitbook/assets/aid86cj.png diff --git a/.gitbook/assets/allowprivateclickokay.png b/book/.gitbook/assets/allowprivateclickokay.png similarity index 100% rename from .gitbook/assets/allowprivateclickokay.png rename to book/.gitbook/assets/allowprivateclickokay.png diff --git a/.gitbook/assets/apdk.png b/book/.gitbook/assets/apdk.png similarity index 100% rename from .gitbook/assets/apdk.png rename to book/.gitbook/assets/apdk.png diff --git a/.gitbook/assets/azpoj.gif b/book/.gitbook/assets/azpoj.gif similarity index 100% rename from .gitbook/assets/azpoj.gif rename to book/.gitbook/assets/azpoj.gif diff --git a/.gitbook/assets/bpdk.png b/book/.gitbook/assets/bpdk.png similarity index 100% rename from .gitbook/assets/bpdk.png rename to book/.gitbook/assets/bpdk.png diff --git a/.gitbook/assets/bpsqxxr.png b/book/.gitbook/assets/bpsqxxr.png similarity index 100% rename from .gitbook/assets/bpsqxxr.png rename to book/.gitbook/assets/bpsqxxr.png diff --git a/.gitbook/assets/c05e5a1813edad280544b627b24002dc8d5adcf2 (1).png b/book/.gitbook/assets/c05e5a1813edad280544b627b24002dc8d5adcf2 (1).png similarity index 100% rename from .gitbook/assets/c05e5a1813edad280544b627b24002dc8d5adcf2 (1).png rename to book/.gitbook/assets/c05e5a1813edad280544b627b24002dc8d5adcf2 (1).png diff --git a/.gitbook/assets/c05e5a1813edad280544b627b24002dc8d5adcf2.png b/book/.gitbook/assets/c05e5a1813edad280544b627b24002dc8d5adcf2.png similarity index 100% rename from .gitbook/assets/c05e5a1813edad280544b627b24002dc8d5adcf2.png rename to book/.gitbook/assets/c05e5a1813edad280544b627b24002dc8d5adcf2.png diff --git a/.gitbook/assets/capture-de-cran-2021-08-17-a-15.57.00.png b/book/.gitbook/assets/capture-de-cran-2021-08-17-a-15.57.00.png similarity index 100% rename from .gitbook/assets/capture-de-cran-2021-08-17-a-15.57.00.png rename to book/.gitbook/assets/capture-de-cran-2021-08-17-a-15.57.00.png diff --git a/.gitbook/assets/capture-de-cran-2021-08-24-a-16.41.23.png b/book/.gitbook/assets/capture-de-cran-2021-08-24-a-16.41.23.png similarity index 100% rename from .gitbook/assets/capture-de-cran-2021-08-24-a-16.41.23.png rename to book/.gitbook/assets/capture-de-cran-2021-08-24-a-16.41.23.png diff --git a/.gitbook/assets/capture-de-cran-2021-09-02-a-14.57.11.png b/book/.gitbook/assets/capture-de-cran-2021-09-02-a-14.57.11.png similarity index 100% rename from .gitbook/assets/capture-de-cran-2021-09-02-a-14.57.11.png rename to book/.gitbook/assets/capture-de-cran-2021-09-02-a-14.57.11.png diff --git a/.gitbook/assets/capture-de-cran-2021-09-02-a-15.07.01.png b/book/.gitbook/assets/capture-de-cran-2021-09-02-a-15.07.01.png similarity index 100% rename from .gitbook/assets/capture-de-cran-2021-09-02-a-15.07.01.png rename to book/.gitbook/assets/capture-de-cran-2021-09-02-a-15.07.01.png diff --git a/.gitbook/assets/capture-de-cran-2021-09-02-a-15.12.23.png b/book/.gitbook/assets/capture-de-cran-2021-09-02-a-15.12.23.png similarity index 100% rename from .gitbook/assets/capture-de-cran-2021-09-02-a-15.12.23.png rename to book/.gitbook/assets/capture-de-cran-2021-09-02-a-15.12.23.png diff --git a/.gitbook/assets/capture-de-cran-2021-09-02-a-15.12.53.png b/book/.gitbook/assets/capture-de-cran-2021-09-02-a-15.12.53.png similarity index 100% rename from .gitbook/assets/capture-de-cran-2021-09-02-a-15.12.53.png rename to book/.gitbook/assets/capture-de-cran-2021-09-02-a-15.12.53.png diff --git a/.gitbook/assets/cast-the-vote.png b/book/.gitbook/assets/cast-the-vote.png similarity index 100% rename from .gitbook/assets/cast-the-vote.png rename to book/.gitbook/assets/cast-the-vote.png diff --git a/.gitbook/assets/check-relayer-ens-subdomains.png b/book/.gitbook/assets/check-relayer-ens-subdomains.png similarity index 100% rename from .gitbook/assets/check-relayer-ens-subdomains.png rename to book/.gitbook/assets/check-relayer-ens-subdomains.png diff --git a/.gitbook/assets/claim (1).png b/book/.gitbook/assets/claim (1).png similarity index 100% rename from .gitbook/assets/claim (1).png rename to book/.gitbook/assets/claim (1).png diff --git a/.gitbook/assets/confirm-the-vote.png b/book/.gitbook/assets/confirm-the-vote.png similarity index 100% rename from .gitbook/assets/confirm-the-vote.png rename to book/.gitbook/assets/confirm-the-vote.png diff --git a/.gitbook/assets/connect-wallet.png b/book/.gitbook/assets/connect-wallet.png similarity index 100% rename from .gitbook/assets/connect-wallet.png rename to book/.gitbook/assets/connect-wallet.png diff --git a/.gitbook/assets/d2d37d169a94f09156e76fa522b7974cb7c9ac3f.png b/book/.gitbook/assets/d2d37d169a94f09156e76fa522b7974cb7c9ac3f.png similarity index 100% rename from .gitbook/assets/d2d37d169a94f09156e76fa522b7974cb7c9ac3f.png rename to book/.gitbook/assets/d2d37d169a94f09156e76fa522b7974cb7c9ac3f.png diff --git a/.gitbook/assets/d8dmxjj.png b/book/.gitbook/assets/d8dmxjj.png similarity index 100% rename from .gitbook/assets/d8dmxjj.png rename to book/.gitbook/assets/d8dmxjj.png diff --git a/.gitbook/assets/dE13HsA.png b/book/.gitbook/assets/dE13HsA.png similarity index 100% rename from .gitbook/assets/dE13HsA.png rename to book/.gitbook/assets/dE13HsA.png diff --git a/.gitbook/assets/dknasj.png b/book/.gitbook/assets/dknasj.png similarity index 100% rename from .gitbook/assets/dknasj.png rename to book/.gitbook/assets/dknasj.png diff --git a/.gitbook/assets/downloadinstall.png b/book/.gitbook/assets/downloadinstall.png similarity index 100% rename from .gitbook/assets/downloadinstall.png rename to book/.gitbook/assets/downloadinstall.png diff --git a/.gitbook/assets/e9jyqhu.png b/book/.gitbook/assets/e9jyqhu.png similarity index 100% rename from .gitbook/assets/e9jyqhu.png rename to book/.gitbook/assets/e9jyqhu.png diff --git a/.gitbook/assets/eHuzorT5lslrOoxKKvRPxLtAHy7.png b/book/.gitbook/assets/eHuzorT5lslrOoxKKvRPxLtAHy7.png similarity index 100% rename from .gitbook/assets/eHuzorT5lslrOoxKKvRPxLtAHy7.png rename to book/.gitbook/assets/eHuzorT5lslrOoxKKvRPxLtAHy7.png diff --git a/.gitbook/assets/enregistrement-de-le-cran-2021-08-24-a-17.18.35.gif b/book/.gitbook/assets/enregistrement-de-le-cran-2021-08-24-a-17.18.35.gif similarity index 100% rename from .gitbook/assets/enregistrement-de-le-cran-2021-08-24-a-17.18.35.gif rename to book/.gitbook/assets/enregistrement-de-le-cran-2021-08-24-a-17.18.35.gif diff --git a/.gitbook/assets/enregistrement-de-le-cran-2021-08-25-a-16.15.15-1-.gif b/book/.gitbook/assets/enregistrement-de-le-cran-2021-08-25-a-16.15.15-1-.gif similarity index 100% rename from .gitbook/assets/enregistrement-de-le-cran-2021-08-25-a-16.15.15-1-.gif rename to book/.gitbook/assets/enregistrement-de-le-cran-2021-08-25-a-16.15.15-1-.gif diff --git a/.gitbook/assets/enregistrement-de-le-cran-2021-08-25-a-16.15.15.gif b/book/.gitbook/assets/enregistrement-de-le-cran-2021-08-25-a-16.15.15.gif similarity index 100% rename from .gitbook/assets/enregistrement-de-le-cran-2021-08-25-a-16.15.15.gif rename to book/.gitbook/assets/enregistrement-de-le-cran-2021-08-25-a-16.15.15.gif diff --git a/.gitbook/assets/ezgif-2-ab5e0860a5d4.gif b/book/.gitbook/assets/ezgif-2-ab5e0860a5d4.gif similarity index 100% rename from .gitbook/assets/ezgif-2-ab5e0860a5d4.gif rename to book/.gitbook/assets/ezgif-2-ab5e0860a5d4.gif diff --git a/.gitbook/assets/gov.jpg b/book/.gitbook/assets/gov.jpg similarity index 100% rename from .gitbook/assets/gov.jpg rename to book/.gitbook/assets/gov.jpg diff --git a/.gitbook/assets/head.png b/book/.gitbook/assets/head.png similarity index 100% rename from .gitbook/assets/head.png rename to book/.gitbook/assets/head.png diff --git a/.gitbook/assets/i6qtr0f.png b/book/.gitbook/assets/i6qtr0f.png similarity index 100% rename from .gitbook/assets/i6qtr0f.png rename to book/.gitbook/assets/i6qtr0f.png diff --git a/.gitbook/assets/image (1).png b/book/.gitbook/assets/image (1).png similarity index 100% rename from .gitbook/assets/image (1).png rename to book/.gitbook/assets/image (1).png diff --git a/.gitbook/assets/image (2).png b/book/.gitbook/assets/image (2).png similarity index 100% rename from .gitbook/assets/image (2).png rename to book/.gitbook/assets/image (2).png diff --git a/.gitbook/assets/image (3).png b/book/.gitbook/assets/image (3).png similarity index 100% rename from .gitbook/assets/image (3).png rename to book/.gitbook/assets/image (3).png diff --git a/.gitbook/assets/image (4).png b/book/.gitbook/assets/image (4).png similarity index 100% rename from .gitbook/assets/image (4).png rename to book/.gitbook/assets/image (4).png diff --git a/.gitbook/assets/image (5).png b/book/.gitbook/assets/image (5).png similarity index 100% rename from .gitbook/assets/image (5).png rename to book/.gitbook/assets/image (5).png diff --git a/.gitbook/assets/image.png b/book/.gitbook/assets/image.png similarity index 100% rename from .gitbook/assets/image.png rename to book/.gitbook/assets/image.png diff --git a/.gitbook/assets/indexeddb.png b/book/.gitbook/assets/indexeddb.png similarity index 100% rename from .gitbook/assets/indexeddb.png rename to book/.gitbook/assets/indexeddb.png diff --git a/.gitbook/assets/k6juetp.png b/book/.gitbook/assets/k6juetp.png similarity index 100% rename from .gitbook/assets/k6juetp.png rename to book/.gitbook/assets/k6juetp.png diff --git a/.gitbook/assets/kokikou.gif b/book/.gitbook/assets/kokikou.gif similarity index 100% rename from .gitbook/assets/kokikou.gif rename to book/.gitbook/assets/kokikou.gif diff --git a/.gitbook/assets/logos.png b/book/.gitbook/assets/logos.png similarity index 100% rename from .gitbook/assets/logos.png rename to book/.gitbook/assets/logos.png diff --git a/.gitbook/assets/lskzkgk.png b/book/.gitbook/assets/lskzkgk.png similarity index 100% rename from .gitbook/assets/lskzkgk.png rename to book/.gitbook/assets/lskzkgk.png diff --git a/.gitbook/assets/m3fh0gl.png b/book/.gitbook/assets/m3fh0gl.png similarity index 100% rename from .gitbook/assets/m3fh0gl.png rename to book/.gitbook/assets/m3fh0gl.png diff --git a/.gitbook/assets/metamaskhome.png b/book/.gitbook/assets/metamaskhome.png similarity index 100% rename from .gitbook/assets/metamaskhome.png rename to book/.gitbook/assets/metamaskhome.png diff --git a/.gitbook/assets/metamaskicon(1).gif b/book/.gitbook/assets/metamaskicon(1).gif similarity index 100% rename from .gitbook/assets/metamaskicon(1).gif rename to book/.gitbook/assets/metamaskicon(1).gif diff --git a/.gitbook/assets/non-custodial-anonymous-transactions-on-ethereum-2-.png b/book/.gitbook/assets/non-custodial-anonymous-transactions-on-ethereum-2-.png similarity index 100% rename from .gitbook/assets/non-custodial-anonymous-transactions-on-ethereum-2-.png rename to book/.gitbook/assets/non-custodial-anonymous-transactions-on-ethereum-2-.png diff --git a/.gitbook/assets/non-custodial-anonymous-transactions-on-ethereum-3- (1).png b/book/.gitbook/assets/non-custodial-anonymous-transactions-on-ethereum-3- (1).png similarity index 100% rename from .gitbook/assets/non-custodial-anonymous-transactions-on-ethereum-3- (1).png rename to book/.gitbook/assets/non-custodial-anonymous-transactions-on-ethereum-3- (1).png diff --git a/.gitbook/assets/non-custodial-anonymous-transactions-on-ethereum-3-.png b/book/.gitbook/assets/non-custodial-anonymous-transactions-on-ethereum-3-.png similarity index 100% rename from .gitbook/assets/non-custodial-anonymous-transactions-on-ethereum-3-.png rename to book/.gitbook/assets/non-custodial-anonymous-transactions-on-ethereum-3-.png diff --git a/.gitbook/assets/non-custodial-anonymous-transactions-on-ethereum.png b/book/.gitbook/assets/non-custodial-anonymous-transactions-on-ethereum.png similarity index 100% rename from .gitbook/assets/non-custodial-anonymous-transactions-on-ethereum.png rename to book/.gitbook/assets/non-custodial-anonymous-transactions-on-ethereum.png diff --git a/.gitbook/assets/o04px38SoXt0G5IVTxr5rEeI588.png b/book/.gitbook/assets/o04px38SoXt0G5IVTxr5rEeI588.png similarity index 100% rename from .gitbook/assets/o04px38SoXt0G5IVTxr5rEeI588.png rename to book/.gitbook/assets/o04px38SoXt0G5IVTxr5rEeI588.png diff --git a/.gitbook/assets/ozxj.png b/book/.gitbook/assets/ozxj.png similarity index 100% rename from .gitbook/assets/ozxj.png rename to book/.gitbook/assets/ozxj.png diff --git a/.gitbook/assets/page-daccueil.png b/book/.gitbook/assets/page-daccueil.png similarity index 100% rename from .gitbook/assets/page-daccueil.png rename to book/.gitbook/assets/page-daccueil.png diff --git a/.gitbook/assets/register-relayer-summary.png b/book/.gitbook/assets/register-relayer-summary.png similarity index 100% rename from .gitbook/assets/register-relayer-summary.png rename to book/.gitbook/assets/register-relayer-summary.png diff --git a/.gitbook/assets/relayer-stake-permit.png b/book/.gitbook/assets/relayer-stake-permit.png similarity index 100% rename from .gitbook/assets/relayer-stake-permit.png rename to book/.gitbook/assets/relayer-stake-permit.png diff --git a/.gitbook/assets/set-relayer-link.png b/book/.gitbook/assets/set-relayer-link.png similarity index 100% rename from .gitbook/assets/set-relayer-link.png rename to book/.gitbook/assets/set-relayer-link.png diff --git a/.gitbook/assets/set-up-relayer-workers.png b/book/.gitbook/assets/set-up-relayer-workers.png similarity index 100% rename from .gitbook/assets/set-up-relayer-workers.png rename to book/.gitbook/assets/set-up-relayer-workers.png diff --git a/.gitbook/assets/time-window.png b/book/.gitbook/assets/time-window.png similarity index 100% rename from .gitbook/assets/time-window.png rename to book/.gitbook/assets/time-window.png diff --git a/.gitbook/assets/vhustru.png b/book/.gitbook/assets/vhustru.png similarity index 100% rename from .gitbook/assets/vhustru.png rename to book/.gitbook/assets/vhustru.png diff --git a/.gitbook/assets/wasm.png b/book/.gitbook/assets/wasm.png similarity index 100% rename from .gitbook/assets/wasm.png rename to book/.gitbook/assets/wasm.png diff --git a/.gitbook/assets/wo55lao.png b/book/.gitbook/assets/wo55lao.png similarity index 100% rename from .gitbook/assets/wo55lao.png rename to book/.gitbook/assets/wo55lao.png diff --git a/.gitbook/assets/xcNzhNG.png b/book/.gitbook/assets/xcNzhNG.png similarity index 100% rename from .gitbook/assets/xcNzhNG.png rename to book/.gitbook/assets/xcNzhNG.png diff --git a/.gitbook/assets/yIT7YcJf1Kc9T7rCcdZW3bZd0mx.png b/book/.gitbook/assets/yIT7YcJf1Kc9T7rCcdZW3bZd0mx.png similarity index 100% rename from .gitbook/assets/yIT7YcJf1Kc9T7rCcdZW3bZd0mx.png rename to book/.gitbook/assets/yIT7YcJf1Kc9T7rCcdZW3bZd0mx.png diff --git a/.gitbook/assets/zOwfk4k.gif b/book/.gitbook/assets/zOwfk4k.gif similarity index 100% rename from .gitbook/assets/zOwfk4k.gif rename to book/.gitbook/assets/zOwfk4k.gif diff --git a/.gitbook/assets/zdizdijz.gif b/book/.gitbook/assets/zdizdijz.gif similarity index 100% rename from .gitbook/assets/zdizdijz.gif rename to book/.gitbook/assets/zdizdijz.gif diff --git a/.gitbook/assets/zrY5GEi.png b/book/.gitbook/assets/zrY5GEi.png similarity index 100% rename from .gitbook/assets/zrY5GEi.png rename to book/.gitbook/assets/zrY5GEi.png diff --git a/book/README.md b/book/README.md new file mode 100644 index 0000000..a7c1ab8 --- /dev/null +++ b/book/README.md @@ -0,0 +1,72 @@ +# Introduction to Tornado Cash + +![](/.gitbook/assets/image.png) + +{% hint style="danger" %} +*Tornado Cash was sanctioned by the US Treasury on 08/08/2022, making it illegal for US citizens to interact with the core and governance contracts.* +{% endhint %} + +Tornado Cash is a **non-custodial** **privacy protocol** allowing **permissionless** shielded transactions on Ethereum and derivative networks. **Tornado Cash is not a mixer, as assets are never commingled due to the presence of zero knowledge cryptography**. The core of the protocol is ungovernable and immutable, given Ethereum's distributed state and the provenance of the contracts, they can neither be changed nor tampered with. + +Therefore, nobody - including the original developers - can modify or inhibit the protocol. All governance and associated smart contracts are deployed by the community. As a non-custodial protocol, users keep custody of their cryptocurrencies while using Tornado Cash. This means that at each deposit, they are provided with a secret "note" that grants the access to the deposited funds, allowing self-soverginity over one's assets. + +## How is anonymity achieved? + +Tornado Cash achives anonymity by breaking the on-chain link between source and destination addresses through "anonymity pools". These are immutable smart contracts that accepts fixed denominations of a currency, acting as what is known as a mix network. Although anonymity is only obtained with use of a "relayer", which acts as a withdrawal proxy to mask the link between destination and source addresses. + +Learn more about [_How does Tornado Cash work?_](general/how-does-it-work.md) and [Tips to remain anonymous](general/guides/opsec.md). + +## Where is Tornado Cash deployed? + +Since its inception in 2019, Tornado Cash has been mainly operating **on the Ethereum network**, with anonymity pools for ETH, DAI, cDAI, USDC, USDT and WBTC. + +Since June 2021, the smart contracts **have also been deployed on other side-chains & blockchains**. These deployments enabled network agnostic functionality, allowing for faster and cheaper transactions. + +* **Ethereum** + * **ETH** (Ethereum) + * **DAI** (Dai) + * **cDAI** (Compound Dai) + * **USDC** (USD Coin) + * **USDT** (Tether) + * **WBTC** (Wrapped Bitcoin) +* **Binance Smart Chain** + * **BNB** (Binance Coin) +* **Polygon** + * **MATIC** (Polygon) +* **Gnosis Chain (formerly xDAI)** + * **xDAI** (xDai) +* **Avalanche** + * **AVAX** (Avalanche) +* **Optimism** + * **ETH** (Ethereum) +* **Arbitrum One** + * **ETH** (Ethereum) + +Until December 2021, governance enabled "anonymity mining" - a mechanism to incentivise proactive usage of selected anonymity sets to compliment pool entropy, allowing depositors to earn the native governance token (**TORN**). + +_See sections_ [_Anonymity mining_](circuits/anonymity-mining) _and the_ [_TORN token_](general/token/index.md) for more information. + +**The protocol's native governance token, TORN, allows open and decentralized collaboration to shape the direction of the protocol through voting.**. The community has a strong influence over the evolution of Tornado Cash, it's development and management of the protocol's treasury. + +Anonymity pools operate **under the principle of fixed-amount deposits and withdrawals**. Meaning that each supported asset has multiple pools which make up an "anonymity set", each pool restricts transactions to be a fixed amount _(e.g. ETH has four different pools, one for each of these amounts: 0.1, 1, 10 and 100 ETH)_. + +### Tornado Cash Nova + +With the release of a [**new __experimental__ version of Tornado Cash; Nova**](https://tornado-cash.medium.com/tornado-cash-introduces-arbitrary-amounts-shielded-transfers-8df92d93c37c), provides an **upgraded expierence for anonymity pools**. Users are no longer constrained by fixed-amount transactions, possible through the UXTO model alllowing **arbitrary (customized) amounts and shielded internal transfers**. + +Tornado Cash Nova is deployed on Gnosis Chain (formerly xDAI) with the original hopes to improve speed and cost by bridging from Ethereum mainnet using the AMB Omnibridge. + +__Please note Tornado Cash Nova has a low relayer count, is in an experimental state and regularly faces issues with Omnibridge because of bridge limits and validator censorship__. + +## How does Tornado Cash function? + +Tornado Cash is represented by it's community, collaboration is facilitated through the governance contract or Decentralized Autonomous Organisation (DAO). **No singular entity or person controls Tornado Cash.** + +All protocol related code is open-source and is published to two independent git instances: + +* [Community git](https://git.tornado.ws): store of the latest community maintained repositories +* [Sanctioned Github](https://github.com/tornadocash): public archive after the OFAC sanctions + +The existence of zero knowledge in the protocol was based **on open-source research authored by ZCash**. To implement a zero knowledge scheme, [a trusted setup is required](https://tornado-cash.medium.com/tornado-cash-trusted-setup-ceremony-b846e1e00be1), which is essentially a store of random data from various sources defining robustness in generation of proving and verifying keys. Which successfully occured for the protocol on [May 2020 with 1114 contributions](https://tornado-cash.medium.com/the-biggest-trusted-setup-ceremony-in-the-world-3c6ab9c8fffa). This significant number of contributors makes it implausible to compromise the protocol by faking zero-knowledge proofs. + +Tornado Cash user interfaces are hosted on **IPFS** (InterPlanetary File System) deployed by the community, minimizing the risk of censorship. These interfaces will be accessible as long as IPFS nodes pin the content, the latest IPFS content hashes are available at [tornadocash.eth](https://app.ens.domains/name/tornadocash.eth/details) and [nova.tornadocash.eth](https://app.ens.domains/name/nova.tornadocash.eth/details). Please see [how to pin IPFS content](https://docs.ipfs.tech/how-to/pin-files/) if you wish to contribute. diff --git a/SUMMARY.md b/book/SUMMARY.md similarity index 100% rename from SUMMARY.md rename to book/SUMMARY.md diff --git a/book.json b/book/book.json similarity index 100% rename from book.json rename to book/book.json diff --git a/circuits/README.md b/book/circuits/README.md similarity index 100% rename from circuits/README.md rename to book/circuits/README.md diff --git a/circuits/anonymity-mining/README.md b/book/circuits/anonymity-mining/README.md similarity index 100% rename from circuits/anonymity-mining/README.md rename to book/circuits/anonymity-mining/README.md diff --git a/circuits/anonymity-mining/mining-rewards.md b/book/circuits/anonymity-mining/mining-rewards.md similarity index 100% rename from circuits/anonymity-mining/mining-rewards.md rename to book/circuits/anonymity-mining/mining-rewards.md diff --git a/circuits/anonymity-mining/tornado-trees.md b/book/circuits/anonymity-mining/tornado-trees.md similarity index 100% rename from circuits/anonymity-mining/tornado-trees.md rename to book/circuits/anonymity-mining/tornado-trees.md diff --git a/circuits/core-deposit-circuit.md b/book/circuits/core-deposit-circuit.md similarity index 100% rename from circuits/core-deposit-circuit.md rename to book/circuits/core-deposit-circuit.md diff --git a/general/community/contributing.md b/book/general/community/contributing.md similarity index 100% rename from general/community/contributing.md rename to book/general/community/contributing.md diff --git a/general/community/governance.md b/book/general/community/governance.md similarity index 100% rename from general/community/governance.md rename to book/general/community/governance.md diff --git a/general/deployments.md b/book/general/deployments.md similarity index 100% rename from general/deployments.md rename to book/general/deployments.md diff --git a/general/guides/local-ui.md b/book/general/guides/local-ui.md similarity index 100% rename from general/guides/local-ui.md rename to book/general/guides/local-ui.md diff --git a/general/guides/opsec.md b/book/general/guides/opsec.md similarity index 100% rename from general/guides/opsec.md rename to book/general/guides/opsec.md diff --git a/general/guides/post-censorship/es.md b/book/general/guides/post-censorship/es.md similarity index 100% rename from general/guides/post-censorship/es.md rename to book/general/guides/post-censorship/es.md diff --git a/general/guides/post-censorship/index.md b/book/general/guides/post-censorship/index.md similarity index 100% rename from general/guides/post-censorship/index.md rename to book/general/guides/post-censorship/index.md diff --git a/general/guides/post-censorship/ru.md b/book/general/guides/post-censorship/ru.md similarity index 100% rename from general/guides/post-censorship/ru.md rename to book/general/guides/post-censorship/ru.md diff --git a/general/guides/post-censorship/zh.md b/book/general/guides/post-censorship/zh.md similarity index 100% rename from general/guides/post-censorship/zh.md rename to book/general/guides/post-censorship/zh.md diff --git a/general/guides/relayer.md b/book/general/guides/relayer.md similarity index 100% rename from general/guides/relayer.md rename to book/general/guides/relayer.md diff --git a/general/guides/tor.md b/book/general/guides/tor.md similarity index 100% rename from general/guides/tor.md rename to book/general/guides/tor.md diff --git a/general/how-does-it-work.md b/book/general/how-does-it-work.md similarity index 100% rename from general/how-does-it-work.md rename to book/general/how-does-it-work.md diff --git a/general/resources/analytics.md b/book/general/resources/analytics.md similarity index 100% rename from general/resources/analytics.md rename to book/general/resources/analytics.md diff --git a/general/resources/compliance-tool.md b/book/general/resources/compliance-tool.md similarity index 100% rename from general/resources/compliance-tool.md rename to book/general/resources/compliance-tool.md diff --git a/general/resources/tutela.md b/book/general/resources/tutela.md similarity index 100% rename from general/resources/tutela.md rename to book/general/resources/tutela.md diff --git a/general/token/anonymity-mining.md b/book/general/token/anonymity-mining.md similarity index 100% rename from general/token/anonymity-mining.md rename to book/general/token/anonymity-mining.md diff --git a/general/token/index.md b/book/general/token/index.md similarity index 100% rename from general/token/index.md rename to book/general/token/index.md diff --git a/general/token/staking.md b/book/general/token/staking.md similarity index 100% rename from general/token/staking.md rename to book/general/token/staking.md diff --git a/tornado-cash-classic/.gitbook/assets/RPReplay_Final1652713377.gif b/book/tornado-cash-classic/.gitbook/assets/RPReplay_Final1652713377.gif similarity index 100% rename from tornado-cash-classic/.gitbook/assets/RPReplay_Final1652713377.gif rename to book/tornado-cash-classic/.gitbook/assets/RPReplay_Final1652713377.gif diff --git a/tornado-cash-classic/.gitbook/assets/RPReplay_Final1652713666.gif b/book/tornado-cash-classic/.gitbook/assets/RPReplay_Final1652713666.gif similarity index 100% rename from tornado-cash-classic/.gitbook/assets/RPReplay_Final1652713666.gif rename to book/tornado-cash-classic/.gitbook/assets/RPReplay_Final1652713666.gif diff --git a/tornado-cash-classic/.gitbook/assets/RPReplay_Final1652713746.gif b/book/tornado-cash-classic/.gitbook/assets/RPReplay_Final1652713746.gif similarity index 100% rename from tornado-cash-classic/.gitbook/assets/RPReplay_Final1652713746.gif rename to book/tornado-cash-classic/.gitbook/assets/RPReplay_Final1652713746.gif diff --git a/tornado-cash-classic/.gitbook/assets/RPReplay_Final1652713870.gif b/book/tornado-cash-classic/.gitbook/assets/RPReplay_Final1652713870.gif similarity index 100% rename from tornado-cash-classic/.gitbook/assets/RPReplay_Final1652713870.gif rename to book/tornado-cash-classic/.gitbook/assets/RPReplay_Final1652713870.gif diff --git a/tornado-cash-classic/.gitbook/assets/Screen Recording 2022-05-16 at 3.49.20 PM.mov b/book/tornado-cash-classic/.gitbook/assets/Screen Recording 2022-05-16 at 3.49.20 PM.mov similarity index 100% rename from tornado-cash-classic/.gitbook/assets/Screen Recording 2022-05-16 at 3.49.20 PM.mov rename to book/tornado-cash-classic/.gitbook/assets/Screen Recording 2022-05-16 at 3.49.20 PM.mov diff --git a/tornado-cash-classic/.gitbook/assets/Screen Recording 2022-05-16 at 4.05.59 PM.gif b/book/tornado-cash-classic/.gitbook/assets/Screen Recording 2022-05-16 at 4.05.59 PM.gif similarity index 100% rename from tornado-cash-classic/.gitbook/assets/Screen Recording 2022-05-16 at 4.05.59 PM.gif rename to book/tornado-cash-classic/.gitbook/assets/Screen Recording 2022-05-16 at 4.05.59 PM.gif diff --git a/tornado-cash-classic/.gitbook/assets/Screen Recording 2022-05-16 at 4.07.52 PM.gif b/book/tornado-cash-classic/.gitbook/assets/Screen Recording 2022-05-16 at 4.07.52 PM.gif similarity index 100% rename from tornado-cash-classic/.gitbook/assets/Screen Recording 2022-05-16 at 4.07.52 PM.gif rename to book/tornado-cash-classic/.gitbook/assets/Screen Recording 2022-05-16 at 4.07.52 PM.gif diff --git a/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-16 at 3.54.57 PM (1).png b/book/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-16 at 3.54.57 PM (1).png similarity index 100% rename from tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-16 at 3.54.57 PM (1).png rename to book/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-16 at 3.54.57 PM (1).png diff --git a/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-16 at 3.54.57 PM.png b/book/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-16 at 3.54.57 PM.png similarity index 100% rename from tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-16 at 3.54.57 PM.png rename to book/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-16 at 3.54.57 PM.png diff --git a/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-16 at 5.47.11 PM.png b/book/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-16 at 5.47.11 PM.png similarity index 100% rename from tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-16 at 5.47.11 PM.png rename to book/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-16 at 5.47.11 PM.png diff --git a/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-18 at 1.08.50 AM.png b/book/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-18 at 1.08.50 AM.png similarity index 100% rename from tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-18 at 1.08.50 AM.png rename to book/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-18 at 1.08.50 AM.png diff --git a/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-18 at 1.18.08 AM.png b/book/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-18 at 1.18.08 AM.png similarity index 100% rename from tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-18 at 1.18.08 AM.png rename to book/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-18 at 1.18.08 AM.png diff --git a/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-18 at 1.34.57 AM (1).png b/book/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-18 at 1.34.57 AM (1).png similarity index 100% rename from tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-18 at 1.34.57 AM (1).png rename to book/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-18 at 1.34.57 AM (1).png diff --git a/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-18 at 1.34.57 AM (2).png b/book/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-18 at 1.34.57 AM (2).png similarity index 100% rename from tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-18 at 1.34.57 AM (2).png rename to book/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-18 at 1.34.57 AM (2).png diff --git a/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-18 at 1.34.57 AM.png b/book/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-18 at 1.34.57 AM.png similarity index 100% rename from tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-18 at 1.34.57 AM.png rename to book/tornado-cash-classic/.gitbook/assets/Screen Shot 2022-05-18 at 1.34.57 AM.png diff --git a/tornado-cash-classic/.gitbook/assets/argen.gif b/book/tornado-cash-classic/.gitbook/assets/argen.gif similarity index 100% rename from tornado-cash-classic/.gitbook/assets/argen.gif rename to book/tornado-cash-classic/.gitbook/assets/argen.gif diff --git a/tornado-cash-classic/.gitbook/assets/argent (1) (1).gif b/book/tornado-cash-classic/.gitbook/assets/argent (1) (1).gif similarity index 100% rename from tornado-cash-classic/.gitbook/assets/argent (1) (1).gif rename to book/tornado-cash-classic/.gitbook/assets/argent (1) (1).gif diff --git a/tornado-cash-classic/.gitbook/assets/argent (1).gif b/book/tornado-cash-classic/.gitbook/assets/argent (1).gif similarity index 100% rename from tornado-cash-classic/.gitbook/assets/argent (1).gif rename to book/tornado-cash-classic/.gitbook/assets/argent (1).gif diff --git a/tornado-cash-classic/.gitbook/assets/argent (2).gif b/book/tornado-cash-classic/.gitbook/assets/argent (2).gif similarity index 100% rename from tornado-cash-classic/.gitbook/assets/argent (2).gif rename to book/tornado-cash-classic/.gitbook/assets/argent (2).gif diff --git a/tornado-cash-classic/.gitbook/assets/argent.gif b/book/tornado-cash-classic/.gitbook/assets/argent.gif similarity index 100% rename from tornado-cash-classic/.gitbook/assets/argent.gif rename to book/tornado-cash-classic/.gitbook/assets/argent.gif diff --git a/tornado-cash-classic/.gitbook/assets/ezgif-3-e888cf338a (1).gif b/book/tornado-cash-classic/.gitbook/assets/ezgif-3-e888cf338a (1).gif similarity index 100% rename from tornado-cash-classic/.gitbook/assets/ezgif-3-e888cf338a (1).gif rename to book/tornado-cash-classic/.gitbook/assets/ezgif-3-e888cf338a (1).gif diff --git a/tornado-cash-classic/.gitbook/assets/ezgif-3-e888cf338a.gif b/book/tornado-cash-classic/.gitbook/assets/ezgif-3-e888cf338a.gif similarity index 100% rename from tornado-cash-classic/.gitbook/assets/ezgif-3-e888cf338a.gif rename to book/tornado-cash-classic/.gitbook/assets/ezgif-3-e888cf338a.gif diff --git a/tornado-cash-classic/.gitbook/assets/imtoken (1) (1) (1).gif b/book/tornado-cash-classic/.gitbook/assets/imtoken (1) (1) (1).gif similarity index 100% rename from tornado-cash-classic/.gitbook/assets/imtoken (1) (1) (1).gif rename to book/tornado-cash-classic/.gitbook/assets/imtoken (1) (1) (1).gif diff --git a/tornado-cash-classic/.gitbook/assets/imtoken (1) (1).gif b/book/tornado-cash-classic/.gitbook/assets/imtoken (1) (1).gif similarity index 100% rename from tornado-cash-classic/.gitbook/assets/imtoken (1) (1).gif rename to book/tornado-cash-classic/.gitbook/assets/imtoken (1) (1).gif diff --git a/tornado-cash-classic/.gitbook/assets/imtoken.gif b/book/tornado-cash-classic/.gitbook/assets/imtoken.gif similarity index 100% rename from tornado-cash-classic/.gitbook/assets/imtoken.gif rename to book/tornado-cash-classic/.gitbook/assets/imtoken.gif diff --git a/tornado-cash-classic/.gitbook/assets/metamask.gif b/book/tornado-cash-classic/.gitbook/assets/metamask.gif similarity index 100% rename from tornado-cash-classic/.gitbook/assets/metamask.gif rename to book/tornado-cash-classic/.gitbook/assets/metamask.gif diff --git a/tornado-cash-classic/.gitbook/assets/trust (1) (1).gif b/book/tornado-cash-classic/.gitbook/assets/trust (1) (1).gif similarity index 100% rename from tornado-cash-classic/.gitbook/assets/trust (1) (1).gif rename to book/tornado-cash-classic/.gitbook/assets/trust (1) (1).gif diff --git a/tornado-cash-classic/.gitbook/assets/trust.gif b/book/tornado-cash-classic/.gitbook/assets/trust.gif similarity index 100% rename from tornado-cash-classic/.gitbook/assets/trust.gif rename to book/tornado-cash-classic/.gitbook/assets/trust.gif diff --git a/tornado-cash-classic/.gitbook/assets/which.gif b/book/tornado-cash-classic/.gitbook/assets/which.gif similarity index 100% rename from tornado-cash-classic/.gitbook/assets/which.gif rename to book/tornado-cash-classic/.gitbook/assets/which.gif diff --git a/tornado-cash-classic/connect-wallet.md b/book/tornado-cash-classic/connect-wallet.md similarity index 100% rename from tornado-cash-classic/connect-wallet.md rename to book/tornado-cash-classic/connect-wallet.md diff --git a/tornado-cash-classic/deposit-withdraw.md b/book/tornado-cash-classic/deposit-withdraw.md similarity index 100% rename from tornado-cash-classic/deposit-withdraw.md rename to book/tornado-cash-classic/deposit-withdraw.md diff --git a/tornado-cash-nova/connect-wallet.md b/book/tornado-cash-nova/connect-wallet.md similarity index 100% rename from tornado-cash-nova/connect-wallet.md rename to book/tornado-cash-nova/connect-wallet.md diff --git a/tornado-cash-nova/deposit-withdraw.md b/book/tornado-cash-nova/deposit-withdraw.md similarity index 100% rename from tornado-cash-nova/deposit-withdraw.md rename to book/tornado-cash-nova/deposit-withdraw.md diff --git a/tornado-cash-nova/shielded-transfers.md b/book/tornado-cash-nova/shielded-transfers.md similarity index 100% rename from tornado-cash-nova/shielded-transfers.md rename to book/tornado-cash-nova/shielded-transfers.md diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..7325abd --- /dev/null +++ b/package-lock.json @@ -0,0 +1,77 @@ +{ + "name": "tornado-docs", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "base-path-converter": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base-path-converter/-/base-path-converter-1.0.2.tgz", + "integrity": "sha512-51R8JiuXadknn6ouVUteOhDpmI3G5u5GqjruL7bPJpfxUHVgosaO5uPAvRP4FeR4VyyH4sSvsN78Ci6ouoRYqQ==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==" + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "recursive-fs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/recursive-fs/-/recursive-fs-2.1.0.tgz", + "integrity": "sha512-oed3YruYsD52Mi16s/07eYblQOLi5dTtxpIJNdfCEJ7S5v8dDgVcycar0pRWf4IBuPMIkoctC8RTqGJzIKMNAQ==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..10a63ad --- /dev/null +++ b/package.json @@ -0,0 +1,30 @@ +{ + "name": "tornado-docs", + "version": "1.0.0", + "description": "Documentation for Tornado Cash protocol and services", + "main": "empty.js", + "scripts": { + "prepare": "cd book && npm i -g gitbook-cli && gitbook install", + "build": "cd book && gitbook build && cp -R ./_book ../build", + "upload:ipfs": "node scripts/ipfsUpload.js", + "deploy:ipfs": "npm run build && npm run upload:ipfs" + }, + "repository": { + "type": "git", + "url": "https://git.tornado.ws/tornadocash/docs" + }, + "keywords": [ + "tornado", + "documentation-tornado", + "docs" + ], + "author": "tornadocash", + "license": "MIT", + "dependencies": { + "axios": "^0.21.4", + "base-path-converter": "^1.0.2", + "dotenv": "^16.3.1", + "form-data": "^4.0.0", + "recursive-fs": "^2.1.0" + } +} diff --git a/scripts/ipfsUpload.js b/scripts/ipfsUpload.js new file mode 100644 index 0000000..44ef9b9 --- /dev/null +++ b/scripts/ipfsUpload.js @@ -0,0 +1,74 @@ +require("dotenv").config(); +const fs = require("fs"); +const path = require("path"); +const axios = require("axios"); +const FormData = require("form-data"); +const recursive = require("recursive-fs"); +const basePathConverter = require("base-path-converter"); + +// it's dangerous to set MAX_PINS to 1 +const MAX_PINS = 5; + +const baseUrl = `https://api.pinata.cloud`; +const src = process.argv[2] || "./build"; +const headers = { + pinata_api_key: process.env.PINATA_API_KEY, + pinata_secret_api_key: process.env.PINATA_SECRET_API_KEY, +}; + +async function removeOldPins() { + const maxPins = MAX_PINS - 1; + + const res = await axios.get(`${baseUrl}/data/pinList?pageOffset=${maxPins}&status=pinned`, { + headers, + }); + + const { count, rows } = res.data; + + if (count && count > maxPins) { + for (const { ipfs_pin_hash: ipfsPinHash } of rows) { + await axios.delete(`${baseUrl}/pinning/unpin/${ipfsPinHash}`, { + headers, + }); + console.log(`Successfully removed pin: ${ipfsPinHash}`); + } + } +} + +async function pinBuild() { + console.log("Make sure you have latest build. Run `npm run build` if necessary."); + const { files } = await recursive.readdirr(src); + const data = new FormData(); + files.forEach((file) => { + // for each file stream, we need to include the correct relative file path + data.append(`file`, fs.createReadStream(file), { + filepath: basePathConverter(src, file), + }); + }); + + const res = await axios.post(`${baseUrl}/pinning/pinFileToIPFS`, data, { + maxContentLength: "Infinity", + maxBodyLength: "Infinity", // this is needed to prevent axios from erroring out with large directories + headers: { + "Content-Type": `multipart/form-data; boundary=${data.getBoundary()}`, + ...headers, + }, + }); + + const ipfsHash = res.data.IpfsHash; + + console.log(`Your site is ready! IPFS hash: ${ipfsHash}`); + console.log(`output for github-actions:`); + console.log(`::set-output name=ipfs_hash::${ipfsHash}`); + console.log(`https://gateway.pinata.cloud/ipfs/${ipfsHash}`); +} + +async function main() { + await removeOldPins(); + await pinBuild(); +} + +main().catch((e) => { + console.log(e); + process.exit(1); +});