Proposal #30: Tornado sources decentralization


Due to the sanctions situation at the moment, any centralized services of the project are under threat: sites may be blocked, which has already happened with and, and the servers on which the project infrastructure is located - Matrix, forum, git, and so on - can be disabled at any time without warning from the hoster. Of course, backups are saved in any case, but relying on one developer is also riskily.

The problem with possible inaccessibility of main sites and documentation was solved long ago by adding IPFS hashes as DAO-approved content on the Tornado Cash ENS domain. However, the same can be done with all Tornado git repositories, so that even if the centralized repositories are disabled, the developer can restore the most current versions - and technology is quite simple.

Changes description

For decentralization we need to create many ENS subdomains for tornadocash.eth, on which IPFS hashes of the source codes of various Tornado Cash repositories will be set.

First, let’s go through the main subdomains:

  1. sources.tornadocash.eth is the main, root domain for all sources. IPFS hash for this domain - bafybeiebbyvxk2cf7clzhnqwyvvawwvznco2p5xh7x4tfagqliewtjeqfq, link to a simple guide for users and developers about how to use a decentralized source storage.
  2. minified.sources.tornadocash.eth - root domain for minified sources of the main services for users convenience (you can download a trusted version of classic-ui, nova-ui or tornado-cli for local use). There is no IPFS hash for this domain.
  3. packages.sources.tornadocash.eth - root domain for the source code of self-written libraries used in Tornado Cash services. There is no IPFS hash for this domain.
  4. download.sources.tornadocash.eth - the domain with the IPFS hash of the script to download all repositories from a distributed storage using a few simple commands. More details in the README of the repository itself.
Full list of other ENS subdomains with IPFS hashes (click to open)
  • classic-ui.minified.sources.tornadocash.eth
    • IPFS: bafybeia4x75bn74prpmi6jqa6gbgmsfovunnke5s6oyrddxyopnz6kw5le
  • nova.minified.sources.tornadocash.eth
    • IPFS: bafybeihr5h2tfonjn2gybd4yhvchdwt4eyo25lf5twhhn6bnasdv2wwz7i
  • cli.minified.sources.tornadocash.eth
    • IPFS: bafybeicxxyqjgx5ggvujij4fnjdcwkep4nj5662yrxftb7y3pzwl77qntq
  • classic-ui.sources.tornadocash.eth
    • IPFS: bafybeifwosbjv4dxp4vyt3mwaiayj3tpat3m7uxlc5vnfnstwhzkkvr5ta
  • nova.sources.tornadocash.eth
    • IPFS: bafybeifvktxnfkn2i4arwz4q75wshuciaqm546fl64r6u6w2kxqwmt2zoy
  • docs.sources.tornadocash.eth
    • IPFS: bafybeifbidd4gx3pftds656wtnz5xkyuvqgm225gcgrzikbkykpqloezke
  • relayers-ui.sources.tornadocash.eth
    • IPFS: bafybeicgqr76vyi3e52ehdptelqbjycgkl7afg5ftn457eh27oqebotfka
  • torn-token.sources.tornadocash.eth
    • IPFS: bafybeih55yfwsbw6p5qbphceca64bp6umabdh43tpreowltspgcqs4h5si
  • classic-relayer.sources.tornadocash.eth
    • IPFS: bafybeic22dcz2x6mmdsim2vtp4ddjah7umc6xbg2cq4jjps3v37sxohjge
  • nova-relayer.sources.tornadocash.eth
    • IPFS: bafybeigjcbrcovykwfxghgw3l4c4zxq3gz5qat2yfydqbian7nkpsfagrq
  • cli.sources.tornadocash.eth
    • IPFS: bafybeigldv6kfpu4lv65xjenlqvvxmbhgwnmjqgpa5zspikmt77b3mcx4y
  • info-page.sources.tornadocash.eth
    • IPFS: bafybeibgtqjraefepfdu3awxsjwmcq4u2aoedp5uzwrdyjvkhxx5mwwu7y
  • websnark.packages.sources.tornadocash.eth
    • IPFS: bafybeibt7kdwuj2szqje73c4mhv63l3chnbkyuh7gsbsf6hqqgb4lkv3r4
  • circomlib.packages.sources.tornadocash.eth
    • IPFS: bafybeidgguu4pbgfoausenckca2yqskjgf6nlgsssfqm7ncxc4e57hdqle
  • snarkjs.packages.sources.tornadocash.eth
    • IPFS: bafybeihf22oyhuuwzbrdvinr75pz3xbsikiu34v5l4qmc2bpa7xasxog2q
  • oracles.packages.sources.tornadocash.eth
    • IPFS: bafybeiewrv73bqfytan4r3cgjyt22kuq54g3z5t56wmqjggzi4mpvhddme
  • gas-price-oracle.packages.sources.tornadocash.eth
    • IPFS: bafybeidt4d3fwygukucyv72p3gznborlq73c7nmqnfbtiombbwws2vhgcu
  • config.packages.sources.tornadocash.eth
    • IPFS: bafybeibnigpiqnfsr2fk7k7d37rz4plr6lahyoirzblcjctomwd373azli
  • anonymity-mining.packages.sources.tornadocash.eth
    • IPFS: bafybeicphu5i6cukdazgckepmajiit3umbp5paj5tlofeadyies7wh3hdq
  • trees.packages.sources.tornadocash.eth
    • IPFS: bafybeify5j3vgpgjwl2djowerwlnrpcida6mgnp5ojvyyxw7chp2g2ty3q
  • fixed-merkle-tree.packages.sources.tornadocash.eth
    • IPFS: bafybeidblwoqtbxi7vvcgnqv26jkodhvcjpbrcvifr2jhalklwb4hbfzeq
  • tx-manager.packages.sources.tornadocash.eth
    • IPFS: bafybeievfjmib6froxrca3tvak4ysfyqq5xczfyagfqww7w6ndhjstpkjm
  • merkle-root-updater.packages.sources.tornadocash.eth
    • IPFS: bafybeicmtvbto4pi5f6ozz4dgzvbnrwninl3n64uyzqcvegzrzkmif42hu


Verified contract code: 0x775Cf01c12D3E4296c7c9b52C8B835c071068F51

Tests and verification

In general, everything is similar to proposal 27 - all IPFS hashes and ENS domain nodes are generated by scripts and anyone can run in the repository proposal-30 from the link above and check it out.

You can also check the download script or see with your own hands what will happen if the proposal is accepted, on the ENS domain tornadotest.eth in the Goerli network. However, since the site by default shows domains on the Ethereum Mainnet network, you first need to connect MetaMask and change the network to Goerli Testnet.


+1 Support this very much it’s important to have sources decentralized

crypto mean decentralized, +1 I support