// SPDX-License-Identifier: MIT pragma solidity ^0.8.19; import { IGovernance } from "@interfaces/IGovernance.sol"; import { IENSRegistry } from "@interfaces/IENSRegistry.sol"; import { IENSResolver } from "@interfaces/IENSResolver.sol"; contract GoerliTestProposal { address constant governanceAddress = 0xa749409476A540B463d165AFcD92CcE28AB3d2a7; address constant ensResolverAddress = 0xd7a4F6473f32aC2Af804B3686AE8F1932bC35750; address constant ensRegistryAddress = 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e; IENSRegistry internal constant ensRegistry = IENSRegistry(ensRegistryAddress); IENSResolver internal constant ensResolver = IENSResolver(ensResolverAddress); bytes32 internal constant rootTornadoDomainNode = 0xa8f2228d0331c20e8d36b0bf33b102b5b8d8d416db25502b04e5b854d7a5c556; bytes32 internal constant sourcesDomainNode = 0x857d0c409cbb3112c1b9a6a2c1fb1ac516630d9c263cb04bf3d5a32407b936d5; bytes32 internal constant minifiedSourcesDomainNode = 0x0b7a6db16524d96c9c45252b05191330e5cd76af1a65e883f15a6b0df143ea72; bytes32 internal constant packagesDomainNode = 0xcc0d5182bef33b3ece771ca070bdff76ab80c3af59951aa41995e0ddd1a307f1; bytes32 internal constant downloadScriptSourceDomainNode = 0x3ca990173243a16600a2c480447f5506291f48aaccc152c6ceb05ab13b26dd1a; bytes32 internal constant classicUISourceDomainNode = 0x0b5e06d4c6e76faae426647aceda719067818b62a53350ad34f73792e8850254; bytes32 internal constant novaUISourceDomainNode = 0x38676e6f1e375cea26d79df47f589850623e84cf77426cdccd8e8e50c964dfdf; bytes32 internal constant docsSourceDomainNode = 0x2c6d4d7c3f94987894b9893d813e5f15447b2e63534f423cbdf97490ceccd57c; bytes32 internal constant relayersUISourceDomainNode = 0x1e0e78434fb4ccd771715e5ef7cb66253591943a3d863d3d75f2be3418904dea; bytes32 internal constant tornTokenSourceDomainNode = 0x3a17690a58fe5f6b5b33eef2d2998114a332b4feb3e8f06f818542f4d528e3eb; bytes32 internal constant classicRelayerSoftwareSourceDomainNode = 0x0e30230d2c81771372c21b8c82b957bf8a44cbb48a3a0396e3a7bc593577d72e; bytes32 internal constant novaRelayerSoftwareSourceDomainNode = 0x1c1bc2a95e6db3a336aca1f33ebaae0af0343c5a2b0ca9cb03f56fd8631557f0; bytes32 internal constant tornadoCliSourceDomainNode = 0x8fd0043a38548a5022a557c3e196e2aa9de038f2f6036ad565e842f43565af21; bytes32 internal constant infoPageSourceDomainNode = 0x51c628ee8a039a17cfc4509e671da25e2832ce9d496c0dce2525e67ab14c4b06; bytes32 internal constant classicUIMinifiedDomainNode = 0xbf189e20cf74064173ac3d9b572f36268de3a74416c0743b80f80a72e77c39c5; bytes32 internal constant novaMinifiedDomainNode = 0xaba43caec785b400d898195b430e1d67e9c242d0873b24c51e0988a7b7c4c3ec; bytes32 internal constant tornadoCliMinifiedDomainNode = 0xeb5a0c348b96ea0a86ffba4cc09329cafed4e7858a3b09b9e4951fc45b155051; bytes32 internal constant websnarkPackageDomainNode = 0xd5dc0d0f67049b9973792539efbc65c74f1ccfa34bcacc245d95fef528348f31; bytes32 internal constant circomlibPackageDomainNode = 0x5c0d325132700969f3a5d9cc29362934547c6b547d9f2de89667cf25976d4030; bytes32 internal constant snarkjsPackageDomainNode = 0x68d17fc00031d0a157958a4a4aac1f51431ebe1ad3b907649a746fad227934c1; bytes32 internal constant tornadoOraclesPackageDomainNode = 0xd1678f13f0fc6712edd4d8a8ccad982e75df07403c96e65ce1ef2e0df6ccd72c; bytes32 internal constant gasPriceOraclePackageDomainNode = 0xfbe0717768964b98ff37c4d89db1e305e42914fbebd8722bb5b113aa2e34a8b5; bytes32 internal constant tornadoConfigPackageDomainNode = 0xca98d0d3c988c445e30fa8a49981008d16a41f006cd5d1730a90790cf5a5f638; bytes32 internal constant anonymityMiningPackageDomainNode = 0x5627f29b5f86fea22182dd2a20d2a747be3ad0f204e7d8637e60ce2a8505a74f; bytes32 internal constant tornadoTreesPackageDomainNode = 0xb812eb01e6f49f624c16f227ce6680e639476057ad26fe4ec559b08f461a8a3d; bytes32 internal constant fixedMerkleTreePackageDomainNode = 0xea4f316afeb12220db9b9737341ca13329fa73557841cdf344fb895eefeaaecc; bytes32 internal constant txManagerPackageDomainNode = 0x91e6d11b11e5c0a98be4130f69446eb9460afeaae935dbfa6ef7b2361120c75d; bytes32 internal constant merkleRootUpdaterPackageDomainNode = 0xa9f9472a40c96dc4c30470e180df2fd94b75f19161fb5610bff0b4ef2ddf06ab; bytes32 internal constant rootTornadoDomainLabelhash = 0x28d5131e4f60044a3e4d52eb398a7f8f08b6b7e01040696e895a1f81029fca83; bytes32 internal constant sourcesDomainLabelhash = 0x6ee89d35dcb4b9803f51dc5e513c1c1714149cf0821537078d8ad61616e49f2b; bytes32 internal constant minifiedSourcesDomainLabelhash = 0x26403be8dc5694ba56b8d49945b813cff19140637d1fa38a3187a07faf4ee073; bytes32 internal constant packagesDomainLabelhash = 0x89c4c51c9264344cbc2ab3aa255b085918a2841af8ffaa3133ceabee961afffd; bytes32 internal constant downloadScriptSourceDomainLabelhash = 0xedb311f245ef85f918a5790470448cf17c7d06961f4dfa42cc41616de7f8c2e1; bytes32 internal constant classicUISourceDomainLabelhash = 0x4e27b2a330e4a0d8d8521393df67e9a24fb2ab5f10f9e640c244d504874322bc; bytes32 internal constant novaUISourceDomainLabelhash = 0xc90e7e9184dce6e0d7fff2e19e72ffa35430aca54bd634ada091bef2d2bb0635; bytes32 internal constant docsSourceDomainLabelhash = 0x6bf9054545420e9e9f4aa4f353a32c7d0d52c11dbcdda56c53be8375cafeebb1; bytes32 internal constant relayersUISourceDomainLabelhash = 0xea7c97223b0629f1c3bea11a57dd6179a12e9cc4bbdf8f69fb999c4051c682cf; bytes32 internal constant tornTokenSourceDomainLabelhash = 0x5d8fec99a5792d7772f788343c7991bf1049b821dcd1b0b900f86e6b7fe7fb25; bytes32 internal constant classicRelayerSoftwareSourceDomainLabelhash = 0x7bece1009df269e16c3552ea6ced49b1d66c22438cda5caf73f55ac74bcadea9; bytes32 internal constant novaRelayerSoftwareSourceDomainLabelhash = 0xe01bed58384f9ee9a9dccf26a4236eca42aa8b767efe27c5d191a51885118e5b; bytes32 internal constant tornadoCliSourceDomainLabelhash = 0x92c0fea2a18f1747f48f5503806e5f24d5ccb2c360ef56a462ce254707afa64a; bytes32 internal constant infoPageSourceDomainLabelhash = 0x41c8b7e0e9650ab5d1f55454c8ad68d9d4c6d42f1a8a14878b77e92e9794e610; bytes32 internal constant classicUIMinifiedDomainLabelhash = 0x4e27b2a330e4a0d8d8521393df67e9a24fb2ab5f10f9e640c244d504874322bc; bytes32 internal constant novaMinifiedDomainLabelhash = 0xc90e7e9184dce6e0d7fff2e19e72ffa35430aca54bd634ada091bef2d2bb0635; bytes32 internal constant tornadoCliMinifiedDomainLabelhash = 0x92c0fea2a18f1747f48f5503806e5f24d5ccb2c360ef56a462ce254707afa64a; bytes32 internal constant websnarkPackageDomainLabelhash = 0x50d1752a9b1f31ebf05378927a112194d33596cc02a04c06970477bd8a40c931; bytes32 internal constant circomlibPackageDomainLabelhash = 0x68dc231d08143bcf7cf261e63071bdcb7d606e41dec696e34482f6d1068c4afa; bytes32 internal constant snarkjsPackageDomainLabelhash = 0x31df71a9eb77699aba0f0e6d565af942889afef76e60ee8a9f80c27f2e946065; bytes32 internal constant tornadoOraclesPackageDomainLabelhash = 0xb7a48206cd37ed309fdcdf62fe4b65d6871298645d5e41942f0cd89c08a65cbf; bytes32 internal constant gasPriceOraclePackageDomainLabelhash = 0x05048648c60bebc220ad5a82188a966f910539a7e1947cc8a9ac0ec1cd99ca40; bytes32 internal constant tornadoConfigPackageDomainLabelhash = 0x0b49c88cd3d1ba3c99fdd9a41ced95ec8629bda85e80b6c506c15db62ab8f761; bytes32 internal constant anonymityMiningPackageDomainLabelhash = 0xc3520c36e06133299b24abf819a008b22bc3e9adfa39a38bbccd5cf829831d48; bytes32 internal constant tornadoTreesPackageDomainLabelhash = 0xef1496a9cbb93e123ce8e3a0868374bda8446faafa4c2eb7fce3c7a9465be8df; bytes32 internal constant fixedMerkleTreePackageDomainLabelhash = 0x37441881d8c14192cbe636eb3d4318346c6af80d92971e1357419a1a94e8a2e2; bytes32 internal constant txManagerPackageDomainLabelhash = 0x0d3be7866f858f24a43fd40d3844a410405b3d6abd2255102d8327fa242a4ff3; bytes32 internal constant merkleRootUpdaterPackageDomainLabelhash = 0x1b162702ef4549cb2e6522252d90c0d44fcce15b939897373cfa4f829488cab4; function executeProposal() public { // Register all subnodes, set Governance as an owner ensRegistry.setSubnodeRecord(rootTornadoDomainNode, sourcesDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(sourcesDomainNode, minifiedSourcesDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(sourcesDomainNode, packagesDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(sourcesDomainNode, downloadScriptSourceDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(sourcesDomainNode, classicUISourceDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(sourcesDomainNode, novaUISourceDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(sourcesDomainNode, docsSourceDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(sourcesDomainNode, relayersUISourceDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(sourcesDomainNode, tornTokenSourceDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(sourcesDomainNode, novaRelayerSoftwareSourceDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord( sourcesDomainNode, classicRelayerSoftwareSourceDomainLabelhash, governanceAddress, ensResolverAddress, 0 ); ensRegistry.setSubnodeRecord(sourcesDomainNode, tornadoCliSourceDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(sourcesDomainNode, infoPageSourceDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(minifiedSourcesDomainNode, classicUIMinifiedDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(minifiedSourcesDomainNode, novaMinifiedDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(minifiedSourcesDomainNode, tornadoCliMinifiedDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(packagesDomainNode, websnarkPackageDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(packagesDomainNode, circomlibPackageDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(packagesDomainNode, snarkjsPackageDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(packagesDomainNode, tornadoOraclesPackageDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(packagesDomainNode, gasPriceOraclePackageDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(packagesDomainNode, tornadoConfigPackageDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(packagesDomainNode, anonymityMiningPackageDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(packagesDomainNode, tornadoTreesPackageDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(packagesDomainNode, fixedMerkleTreePackageDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(packagesDomainNode, txManagerPackageDomainLabelhash, governanceAddress, ensResolverAddress, 0); ensRegistry.setSubnodeRecord(packagesDomainNode, merkleRootUpdaterPackageDomainLabelhash, governanceAddress, ensResolverAddress, 0); // From data/ensDomainsIPFSContenthashes.txt, calculated via scripts/calculateIPFSContenthashes.ts bytes memory downloadInstructionsHtmlContenthash = hex"e30101701220810e2b756845f89793b616c56a0b5ab9689da7f6e7fdf93280d05a0969a4902c"; bytes memory downloadScriptSourceContenthash = hex"e301017012208d6f8f48d3c2bcb6eaafae3110ad59b5aa2137010d827996ea1b87f39266b4f5"; bytes memory classicUiSourceContenthash = hex"e30101701220b674829af0777f2b89ed96020184ee6f04f6cfd2eb176ad2b653b1f2a5563d98"; bytes memory classicRelayerSourceContenthash = hex"e301017012205ad0c59d5fcc60e4866ab37f063480ffa305eb84da143894be5baeff2bb8e931"; bytes memory novaRelayerSourceContenthash = hex"e30101701220c9106227570ab16e639adb5f05ccde1b367b004f582e0700a00dfb54f914068c"; bytes memory relayersUiSourceContenthash = hex"e3010170122046847feae11b2774438df322e014e04652fe029ba59b79df90fafba040ba6550"; bytes memory novaUiSourceContenthash = hex"e30101701220b554eed2a9ba47011b6790ff6d23d0480419de78abf723ea7ada55e1664f5976"; bytes memory docsSourceContenthash = hex"e30101701220a140c7c35f6f2cc72f77d69b73dbab14ac0ccd6ba611a394282ac29f05b89951"; bytes memory tornadoCliSourceContenthash = hex"e30101701220cb1d7ca2be9c5d7ddba48d5c2b5bb027359ac4c0cf077327a14c9ffe1db057e6"; bytes memory infoPageSourceContenthash = hex"e30101701220269c131010a479474d82d7926cc14394d01c41bfb4cda23c26aa3defd65ad4fe"; bytes memory classicUiMinifiedContenthash = hex"e301017012201cbffa16ff8f8bd88f2600f1826648aead1ad513b2f3b1118ef873db9f2add59"; bytes memory novaUiMinifiedContenthash = hex"e30101701220f1e9f532b9a96e8d808f983d4471da7c261daeacbd9d8e76f82d04875d5ad9fa"; bytes memory tornadoCliMinifiedContenthash = hex"e3010170122057be20935fa635689427856a462b288fe353df7b588dcb30ff1b7e6cbffe0d9c"; bytes memory tornTokenSourceContenthash = hex"e30101701220fdee0b6906de7f60179c44103dc0bfd4600233f3737c48eb2e7279850970fd92"; bytes memory merkleRootUpdaterPackageContenthash = hex"e301017012204c9d433771e8e97cece783366a16c6cd4357b6fb94c6602a90d98e54c4179a3d"; bytes memory gasPriceOraclePackageContenthash = hex"e3010170122073e0f65b60d455058aff4fd9b2d0ba2b87f62fb59069433439810dad2d54e615"; bytes memory tornadoOraclesPackageContenthash = hex"e30101701220968d7fb0c0b8981bc8ec464e27ad2a90ef0dbcf67df5990498d94718fa9c6361"; bytes memory snarkjsPackageContenthash = hex"e30101701220e5d69d83d296c8623aa1b1ff5f9ddc3242914df2bd5f20c1682f07ee095dc6d4"; bytes memory websnarkPackageContenthash = hex"e3010170122033fa876a2752cc124fec5c61ebedaf623b42ac50ff348322f8f08183c5aabb8f"; bytes memory circomlibPackageContenthash = hex"e30101701220663529c784c5702922344a1035884949317cd59a529160cfb4571709df9c7059"; bytes memory txManagerPackageContenthash = hex"e30101701220952a5880f8b175e2206e7502b9891710876e2c970031616b7ede68ce994dea4b"; bytes memory fixedMerkleTreePackageContenthash = hex"e30101701220615d9d0986e8fd6a233615d792a70cf5125e188aa82c7493816a5d83c384b924"; bytes memory tornadoTreesPackageContenthash = hex"e30101701220b8ea77533cc9b2f434bac48d96d8bc48183cc335fd726b8c5edf11dfa36a78dc"; bytes memory anonymityMiningPackageContenthash = hex"e301017012204f3d3a8f0a8a183261288f6012844f74605fd7813d9adc5200784125fb1f671c"; bytes memory tornadoConfigPackageContenthash = hex"e301017012202d419e8834b28e8aafabe3dfe39e3d71f2c07c3911c856248a6e6587bfec195a"; // Set IPFS Cids in ENS subdomain contenthashes ensResolver.setContenthash(sourcesDomainNode, downloadInstructionsHtmlContenthash); ensResolver.setContenthash(downloadScriptSourceDomainNode, downloadScriptSourceContenthash); ensResolver.setContenthash(classicUISourceDomainNode, classicUiSourceContenthash); ensResolver.setContenthash(novaUISourceDomainNode, novaUiSourceContenthash); ensResolver.setContenthash(docsSourceDomainNode, docsSourceContenthash); ensResolver.setContenthash(relayersUISourceDomainNode, relayersUiSourceContenthash); ensResolver.setContenthash(tornTokenSourceDomainNode, tornTokenSourceContenthash); ensResolver.setContenthash(classicRelayerSoftwareSourceDomainNode, classicRelayerSourceContenthash); ensResolver.setContenthash(novaRelayerSoftwareSourceDomainNode, novaRelayerSourceContenthash); ensResolver.setContenthash(tornadoCliSourceDomainNode, tornadoCliSourceContenthash); ensResolver.setContenthash(infoPageSourceDomainNode, infoPageSourceContenthash); ensResolver.setContenthash(classicUIMinifiedDomainNode, classicUiMinifiedContenthash); ensResolver.setContenthash(tornadoCliMinifiedDomainNode, tornadoCliMinifiedContenthash); ensResolver.setContenthash(websnarkPackageDomainNode, websnarkPackageContenthash); ensResolver.setContenthash(circomlibPackageDomainNode, circomlibPackageContenthash); ensResolver.setContenthash(novaMinifiedDomainNode, novaUiMinifiedContenthash); ensResolver.setContenthash(snarkjsPackageDomainNode, snarkjsPackageContenthash); ensResolver.setContenthash(tornadoOraclesPackageDomainNode, tornadoOraclesPackageContenthash); ensResolver.setContenthash(gasPriceOraclePackageDomainNode, gasPriceOraclePackageContenthash); ensResolver.setContenthash(tornadoConfigPackageDomainNode, tornadoConfigPackageContenthash); ensResolver.setContenthash(anonymityMiningPackageDomainNode, anonymityMiningPackageContenthash); ensResolver.setContenthash(tornadoTreesPackageDomainNode, tornadoTreesPackageContenthash); ensResolver.setContenthash(fixedMerkleTreePackageDomainNode, fixedMerkleTreePackageContenthash); ensResolver.setContenthash(txManagerPackageDomainNode, txManagerPackageContenthash); ensResolver.setContenthash(merkleRootUpdaterPackageDomainNode, merkleRootUpdaterPackageContenthash); } }