# Proposal to update Tornado IPFS hashes in ENS and rescue tokens ### Changes / effect description - Create new `tornadocash.eth` subdomains written in [`contants.ts`](scripts/constants.ts) and set Governance as owner for all - Assign corresponding IPFS contenthash to each domain - Rescue 1518 USDT accidentaly sent to TORN token address about 3 years ago to project expenses ### Requirements - Rust ([Need only for Windows](https://doc.rust-lang.org/cargo/getting-started/installation.html)) - Foundryup ([Windows](https://github.com/altugbakan/foundryup-windows), [Linux](https://book.getfoundry.sh/getting-started/installation)) - Node 16 or higher ([Windows](https://github.com/coreybutler/nvm-windows), [Linux](https://github.com/nvm-sh/nvm)) ### Installation ```text git clone --recurse-submodules https://git.tornado.ws/Theo/proposal-31-finalize-decentralized-sources-and-rescue-usdt cd proposal-31-finalize-decentralized-sources-and-rescue-usdt npm install ``` ### Testing ```text npm run test:windows ``` or ```text npm run test:linux ``` ### Contracts Proposal deployed contract: [0x87477dd2d9cb84112021e77db85bc7eb2dfb1160](https://etherscan.io/address/0x87477dd2d9cb84112021e77db85bc7eb2dfb1160#code) Goerli test ENS address: [`tornadotest.eth`](https://app.ens.domains/tornadotest.eth) (to see content, you need to connect wallet and switch to Goerli Testnet on app.ens.domains) ### Verification Since the proposal code can be confusing because it relies on numerous specifications and EIPs, users can use scripts to verify the correctness of the data, see the output in the corresponding files, and insert the code directly into Solidity, comparing it with the existing code in the proposal (there should be no discrepancies be). 1. Verification of the transformation of eth domains into [ENS nodes](https://docs.ens.domains/ens-improvement-proposals/ensip-1-ens): Script source: [calculateENSNodes.ts](scripts/calculateENSNodes.ts) Command to run: `npm run calculateENS` Result data: [ensNodesDeclarations.txt](data/ensNodesDeclarations.txt) 2. Verification of the transformation of IPFS CIDs to ENS [content hashes](https://eips.ethereum.org/EIPS/eip-1577) Script source: [calculateIPFSContenthashes.ts](scripts/calculateIPFSContenthashes.ts) Command to run: `npm run calculateIpfs` Result data: [ensDomainsIPFSContenthashes.txt](data/ensDomainsIPFSContenthashes.txt) 3. Verification of the equality [IPFS CIDs](https://docs.ipfs.tech/concepts/content-addressing/) v0 with v1 (because ENS on its interface shows v1 CIDs, but Pinata and contenthash library uses v0) Script source: [calculateIpfsV1Cids.ts](scripts/calculateIpfsV1Cids.ts) Command to run: `npm run calculateIpfsV1Cids` Result data: [ipfsV1CIDs.txt](data/ipfsV1CIDs.txt)