Proposal #27: Update IPFS content hashes and addresses on ENS


In recent months, active work has been going on to fix bugs, improve and add new features to Tornado services, such as the main site, Nova, the site for relayers and software for them, and so on. The documentation has also been updated in accordance with the current progress, however, a critical mass of changes has accumulated that will soon make it impossible to be compatible with older versions available via IPFS on the blockchain (you can see the current hash for the main site in the documentation or in the tornadocash.eth records on ENS, and access - via public IPFS gateaways or resolvers like or

Changes description

All changes that are proposed to be added in this proposal to Tornado services are in separate branches (proposal-27) in the respective repositories on

  1. Changes in Classic UI (on the main site):

    • Added Tornado RPC for each network with 100% uptime, no logging or censorship;
    • Changed the source of core dependencies to an independent self-hosted service;
    • Changed gas calculation method, due to which the commissions on some sidechains (Arbitrum, Optimism) will decrease, and output errors through relayers will no longer occur;
    • Many links and translations have been updated and changed from unavailable to actual state;
    • Fixed gas price prediction and processing, as well as loading events on “fast” networks such as Avalanche C, and now deposits and withdrawals will be available through the site on any sidechains without any problems;
    • General fixes to the loading and event processing system required to build the SNARK proof needed for withdrawals, and updated and loaded a new cache for networks where it was not present - this will greatly speed up the waiting time before withdrawal;
    • Solved the problem of endless loading when using an encrypted notes account on the blockchain - now on almost any network you can store notes encrypted with a special key in the blockchain without copying them to a local device (detailed article here);
    • Relayer version checking (validation) changed - since changes in the gas calculation system for the output transaction will change for both users and relayers at the same time, relayers with old software versions will not be allowed in the UI to avoid errors (more details - in the end of post);
    • Added a working WalletConnect Bridge - since on June 28 of this year, official support for WalletConnect V1 was stopped and its server was turned off;
    • The remaining small necessary updates are the replacement of the address of the Staking contract after the execution of proposal 22, cosmetic fixes on the website, and so on.
  2. Changes in Nova:

    • Added a rebuild of workers on every build to make updates work correctly;
    • Fixed an issue in the gas-price-oracle dependency that caused it to be impossible to create proof for output due to lack of access to the offchain gas station for Gnosis, for this the library itself was fixed and updated version was uploaded on Tornado git;
    • Launched its own monitoring Arbitrary Message Bridge for Gnosis, which is used to track cross-chain transactions for withdrawals and deposits in Nova:;
    • And, of course, all links, RPCs and explorers have been updated to be up-to-date and working.
  3. Changes in relayers UI and software for them:

    • Fixed check of ENS domain belonging to a relayer, taking into account the recently added default Name Wrapping for new ENS domains;
    • The software for relayers is divided into three versions: v4 - current actual patch before proposal 27, v5 - version with corrected gas calculation, compatible with classic UI and CLI after adoption of proposal 27 and v6 - improved and more convenient new version, also with new calculation gas, however currently in beta (not fully tested and may be unstable);
    • Installation bash script has been added, instructions for docker-compose and a complete instruction has been written on how to install the relayer with one command (then you only need to fill in the data files for the relayer and run it with one command too);
    • A much more convenient version 6 of the software has been created, which works simultaneously for Mainnet, Goerli, and sidechains, as well as notifying the relayer of important changes (lack of balance for transaction processing, lack of staked TORN for being in the UI, and so on).
  4. Changes in Tornado documentation - links and addresses updated and actualized what was changed in previous proposals, as well as reworking the repository for subsequent easy changes and deployment to IPFS.

  5. Tornado CLI has also undergone multiple changes, but this proposal only includes those related to the gas calculation mechanism, since the CLI does not have an IPFS version and an update in the blockchain is not required (by the way, this may be fixed in the future).


Proposal contract code: etherscan link

New IPFS contenthashes (redirect to public IPFS gateaways):

  • Main site: bafybeiebetfka2uede3rwhjovoiyagixe7i44daigklvgyxxpjtzzzquwy
  • Nova: bafybeidjmsfqt6363gujziktuaalzda37avhpemvuzagbhqvcdodnqulw4
  • Relayers UI: bafybeib5mg7naza5prj5l4bwwzci7hkflltobtw2irldacktnijokhksz4
  • Documentation: bafybeiaixjmhtekecm2vfehdzbluqjpxucpftkmafjp22hw7wphgut4clm

Tests and verification

Since the proposal code itself uses data already generated in a special form, so that ENS correctly displays IPFS CIDs after changing content hashes. In accordance with the EIP-1062 and EIP-1577 specifications, two scripts are used to check the correctness of the data: the first generates from v0 IPFS CIDs encoded in base58, the data to set as contenthash for ENS domains, the second proves the equivalence of v0 CID and v1 CID IPFS, which are shown on ENS and mentioned above in this post.
I suggest everyone to run scripts for verification and compare the results.

In addition, anyone can interact with Goerli test contract - install a new IPFS hash from Nova, the main site, UI for relayers or documentation on the tornadotest.eth domain (at first change network in MetaMask to Goerli) and check that they match the data specified in the contract and this post.

Moreover, since the updated site discards all relayers with the current version, if someone wants to check deposits or withdrawals of funds, you can use the test relayers that I specially launched (they will be disabled as soon as the first real relayer of the new version appears):

Important info for relayers

If the current proposal will be accepted and executed, the current version of the software for relayers (4.1.4 for Ethereum Mainnet, 5.0.0.beta for sidechains) will be marked as deprecated and relayers with the current version wont be listed in the UI (will not select the site).
A couple of hours before the proposal is completed, the relayers will need to update to the new version (in no case do you need to do this now, it is incompatible with the current version of the site) - the software is installed via this link with one command on a clean linux server, preferably Ubuntu 22. Old software must be disabled before running new, and note that the format of the .env files has changed slightly, and you cannot simply copy the old ones.
Moreover, I’ll warn all relayers before proposal execution in relayers chat.

For community memebers

You have a day to test new sites, check code, discuss the proposal in this topic, and exactly in 24 hours the proposal will be published in the blockchain and voting will be open.