From 87b74fc69c788709bb606c59e41cf5a365506b06 Mon Sep 17 00:00:00 2001 From: Adam Gall Date: Wed, 13 Nov 2024 11:36:26 -0500 Subject: [PATCH 1/3] Remove FractalRegistry deployment script, rename the others --- ...reezeVoting.ts => 003_deploy_ERC20FreezeVoting.ts} | 0 deploy/core/003_deploy_FractalRegistry.ts | 11 ----------- ...zeVoting.ts => 004_deploy_MultisigFreezeVoting.ts} | 0 ...eezeGuard.ts => 005_deploy_MultisigFreezeGuard.ts} | 0 ...reezeGuard.ts => 006_deploy_AzoriusFreezeGuard.ts} | 0 .../{008_deploy_Azorius.ts => 007_deploy_Azorius.ts} | 0 ..._deploy_VotesERC20.ts => 008_deploy_VotesERC20.ts} | 0 ...ERC20Voting.ts => 009_deploy_LinearERC20Voting.ts} | 0 ...y_KeyValuePairs.ts => 010_deploy_KeyValuePairs.ts} | 0 ...RC20Wrapper.ts => 011_deploy_VotesERC20Wrapper.ts} | 0 ...ting.ts => 012_deploy_LinearERC20WrappedVoting.ts} | 0 ...C721Voting.ts => 013_deploy_LinearERC721Voting.ts} | 0 ...eezeVoting.ts => 014_deploy_ERC721FreezeVoting.ts} | 0 ...usAdmin.ts => 015_deploy_DecentAutonomousAdmin.ts} | 0 ...dule.ts => 016_deploy_DecentHatsCreationModule.ts} | 0 ....ts => 017_deploy_DecentHatsModificationModule.ts} | 0 ...ts => 018_deploy_DecentSablierStreamManagement.ts} | 0 ...ploy_LinearERC20VotingWithHatsProposalCreation.ts} | 0 ...loy_LinearERC721VotingWithHatsProposalCreation.ts} | 0 19 files changed, 11 deletions(-) rename deploy/core/{004_deploy_ERC20FreezeVoting.ts => 003_deploy_ERC20FreezeVoting.ts} (100%) delete mode 100644 deploy/core/003_deploy_FractalRegistry.ts rename deploy/core/{005_deploy_MultisigFreezeVoting.ts => 004_deploy_MultisigFreezeVoting.ts} (100%) rename deploy/core/{006_deploy_MultisigFreezeGuard.ts => 005_deploy_MultisigFreezeGuard.ts} (100%) rename deploy/core/{007_deploy_AzoriusFreezeGuard.ts => 006_deploy_AzoriusFreezeGuard.ts} (100%) rename deploy/core/{008_deploy_Azorius.ts => 007_deploy_Azorius.ts} (100%) rename deploy/core/{009_deploy_VotesERC20.ts => 008_deploy_VotesERC20.ts} (100%) rename deploy/core/{010_deploy_LinearERC20Voting.ts => 009_deploy_LinearERC20Voting.ts} (100%) rename deploy/core/{011_deploy_KeyValuePairs.ts => 010_deploy_KeyValuePairs.ts} (100%) rename deploy/core/{012_deploy_VotesERC20Wrapper.ts => 011_deploy_VotesERC20Wrapper.ts} (100%) rename deploy/core/{013_deploy_LinearERC20WrappedVoting.ts => 012_deploy_LinearERC20WrappedVoting.ts} (100%) rename deploy/core/{014_deploy_LinearERC721Voting.ts => 013_deploy_LinearERC721Voting.ts} (100%) rename deploy/core/{015_deploy_ERC721FreezeVoting.ts => 014_deploy_ERC721FreezeVoting.ts} (100%) rename deploy/core/{016_deploy_DecentAutonomousAdmin.ts => 015_deploy_DecentAutonomousAdmin.ts} (100%) rename deploy/core/{017_deploy_DecentHatsCreationModule.ts => 016_deploy_DecentHatsCreationModule.ts} (100%) rename deploy/core/{018_deploy_DecentHatsModificationModule.ts => 017_deploy_DecentHatsModificationModule.ts} (100%) rename deploy/core/{019_deploy_DecentSablierStreamManagement.ts => 018_deploy_DecentSablierStreamManagement.ts} (100%) rename deploy/core/{020_deploy_LinearERC20VotingWithHatsProposalCreation.ts => 019_deploy_LinearERC20VotingWithHatsProposalCreation.ts} (100%) rename deploy/core/{021_deploy_LinearERC721VotingWithHatsProposalCreation.ts => 020_deploy_LinearERC721VotingWithHatsProposalCreation.ts} (100%) diff --git a/deploy/core/004_deploy_ERC20FreezeVoting.ts b/deploy/core/003_deploy_ERC20FreezeVoting.ts similarity index 100% rename from deploy/core/004_deploy_ERC20FreezeVoting.ts rename to deploy/core/003_deploy_ERC20FreezeVoting.ts diff --git a/deploy/core/003_deploy_FractalRegistry.ts b/deploy/core/003_deploy_FractalRegistry.ts deleted file mode 100644 index 2a01c64..0000000 --- a/deploy/core/003_deploy_FractalRegistry.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { HardhatRuntimeEnvironment } from 'hardhat/types'; -import { DeployFunction } from 'hardhat-deploy/types'; -import { deployNonUpgradeable } from '../helpers/deployNonUpgradeable'; - -const func: DeployFunction = async (hre: HardhatRuntimeEnvironment) => { - await deployNonUpgradeable(hre, 'FractalRegistry', []); -}; - -func.tags = ['FractalRegistry']; - -export default func; diff --git a/deploy/core/005_deploy_MultisigFreezeVoting.ts b/deploy/core/004_deploy_MultisigFreezeVoting.ts similarity index 100% rename from deploy/core/005_deploy_MultisigFreezeVoting.ts rename to deploy/core/004_deploy_MultisigFreezeVoting.ts diff --git a/deploy/core/006_deploy_MultisigFreezeGuard.ts b/deploy/core/005_deploy_MultisigFreezeGuard.ts similarity index 100% rename from deploy/core/006_deploy_MultisigFreezeGuard.ts rename to deploy/core/005_deploy_MultisigFreezeGuard.ts diff --git a/deploy/core/007_deploy_AzoriusFreezeGuard.ts b/deploy/core/006_deploy_AzoriusFreezeGuard.ts similarity index 100% rename from deploy/core/007_deploy_AzoriusFreezeGuard.ts rename to deploy/core/006_deploy_AzoriusFreezeGuard.ts diff --git a/deploy/core/008_deploy_Azorius.ts b/deploy/core/007_deploy_Azorius.ts similarity index 100% rename from deploy/core/008_deploy_Azorius.ts rename to deploy/core/007_deploy_Azorius.ts diff --git a/deploy/core/009_deploy_VotesERC20.ts b/deploy/core/008_deploy_VotesERC20.ts similarity index 100% rename from deploy/core/009_deploy_VotesERC20.ts rename to deploy/core/008_deploy_VotesERC20.ts diff --git a/deploy/core/010_deploy_LinearERC20Voting.ts b/deploy/core/009_deploy_LinearERC20Voting.ts similarity index 100% rename from deploy/core/010_deploy_LinearERC20Voting.ts rename to deploy/core/009_deploy_LinearERC20Voting.ts diff --git a/deploy/core/011_deploy_KeyValuePairs.ts b/deploy/core/010_deploy_KeyValuePairs.ts similarity index 100% rename from deploy/core/011_deploy_KeyValuePairs.ts rename to deploy/core/010_deploy_KeyValuePairs.ts diff --git a/deploy/core/012_deploy_VotesERC20Wrapper.ts b/deploy/core/011_deploy_VotesERC20Wrapper.ts similarity index 100% rename from deploy/core/012_deploy_VotesERC20Wrapper.ts rename to deploy/core/011_deploy_VotesERC20Wrapper.ts diff --git a/deploy/core/013_deploy_LinearERC20WrappedVoting.ts b/deploy/core/012_deploy_LinearERC20WrappedVoting.ts similarity index 100% rename from deploy/core/013_deploy_LinearERC20WrappedVoting.ts rename to deploy/core/012_deploy_LinearERC20WrappedVoting.ts diff --git a/deploy/core/014_deploy_LinearERC721Voting.ts b/deploy/core/013_deploy_LinearERC721Voting.ts similarity index 100% rename from deploy/core/014_deploy_LinearERC721Voting.ts rename to deploy/core/013_deploy_LinearERC721Voting.ts diff --git a/deploy/core/015_deploy_ERC721FreezeVoting.ts b/deploy/core/014_deploy_ERC721FreezeVoting.ts similarity index 100% rename from deploy/core/015_deploy_ERC721FreezeVoting.ts rename to deploy/core/014_deploy_ERC721FreezeVoting.ts diff --git a/deploy/core/016_deploy_DecentAutonomousAdmin.ts b/deploy/core/015_deploy_DecentAutonomousAdmin.ts similarity index 100% rename from deploy/core/016_deploy_DecentAutonomousAdmin.ts rename to deploy/core/015_deploy_DecentAutonomousAdmin.ts diff --git a/deploy/core/017_deploy_DecentHatsCreationModule.ts b/deploy/core/016_deploy_DecentHatsCreationModule.ts similarity index 100% rename from deploy/core/017_deploy_DecentHatsCreationModule.ts rename to deploy/core/016_deploy_DecentHatsCreationModule.ts diff --git a/deploy/core/018_deploy_DecentHatsModificationModule.ts b/deploy/core/017_deploy_DecentHatsModificationModule.ts similarity index 100% rename from deploy/core/018_deploy_DecentHatsModificationModule.ts rename to deploy/core/017_deploy_DecentHatsModificationModule.ts diff --git a/deploy/core/019_deploy_DecentSablierStreamManagement.ts b/deploy/core/018_deploy_DecentSablierStreamManagement.ts similarity index 100% rename from deploy/core/019_deploy_DecentSablierStreamManagement.ts rename to deploy/core/018_deploy_DecentSablierStreamManagement.ts diff --git a/deploy/core/020_deploy_LinearERC20VotingWithHatsProposalCreation.ts b/deploy/core/019_deploy_LinearERC20VotingWithHatsProposalCreation.ts similarity index 100% rename from deploy/core/020_deploy_LinearERC20VotingWithHatsProposalCreation.ts rename to deploy/core/019_deploy_LinearERC20VotingWithHatsProposalCreation.ts diff --git a/deploy/core/021_deploy_LinearERC721VotingWithHatsProposalCreation.ts b/deploy/core/020_deploy_LinearERC721VotingWithHatsProposalCreation.ts similarity index 100% rename from deploy/core/021_deploy_LinearERC721VotingWithHatsProposalCreation.ts rename to deploy/core/020_deploy_LinearERC721VotingWithHatsProposalCreation.ts From a79520f87d9166776b9ed5bff1f9b4e3001444bc Mon Sep 17 00:00:00 2001 From: Adam Gall Date: Wed, 13 Nov 2024 11:36:37 -0500 Subject: [PATCH 2/3] Delete FractalRegistry contract and tests --- contracts/FractalRegistry.sol | 23 ------------ test/Fractal-Registry.test.ts | 67 ----------------------------------- 2 files changed, 90 deletions(-) delete mode 100644 contracts/FractalRegistry.sol delete mode 100644 test/Fractal-Registry.test.ts diff --git a/contracts/FractalRegistry.sol b/contracts/FractalRegistry.sol deleted file mode 100644 index 96c9e76..0000000 --- a/contracts/FractalRegistry.sol +++ /dev/null @@ -1,23 +0,0 @@ -//SPDX-License-Identifier: MIT -pragma solidity =0.8.19; - -import { IFractalRegistry } from "./interfaces/IFractalRegistry.sol"; - -/** - * Implementation of [IFractalRegistry](./interfaces/IFractalRegistry.md). - */ -contract FractalRegistry is IFractalRegistry { - - event FractalNameUpdated(address indexed daoAddress, string daoName); - event FractalSubDAODeclared(address indexed parentDAOAddress, address indexed subDAOAddress); - - /** @inheritdoc IFractalRegistry*/ - function updateDAOName(string memory _name) external { - emit FractalNameUpdated(msg.sender, _name); - } - - /** @inheritdoc IFractalRegistry*/ - function declareSubDAO(address _subDAOAddress) external { - emit FractalSubDAODeclared(msg.sender, _subDAOAddress); - } -} diff --git a/test/Fractal-Registry.test.ts b/test/Fractal-Registry.test.ts deleted file mode 100644 index f05ed7f..0000000 --- a/test/Fractal-Registry.test.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; -import { expect } from 'chai'; -import hre from 'hardhat'; - -import { - FractalRegistry, - FractalRegistry__factory, - KeyValuePairs, - KeyValuePairs__factory, -} from '../typechain-types'; - -describe('Fractal Registry', () => { - // Deployed contracts - let fractalRegistry: FractalRegistry; - let keyValues: KeyValuePairs; - - // Addresses - let deployer: SignerWithAddress; - let dao1: SignerWithAddress; - let dao2: SignerWithAddress; - - beforeEach(async () => { - [deployer, dao1, dao2] = await hre.ethers.getSigners(); - - // Deploy the Fractal Name Registry - fractalRegistry = await new FractalRegistry__factory(deployer).deploy(); - keyValues = await new KeyValuePairs__factory(deployer).deploy(); - }); - - it('A DAO can update its name', async () => { - await expect(fractalRegistry.connect(dao1).updateDAOName('Decent Dawgs')) - .to.emit(fractalRegistry, 'FractalNameUpdated') - .withArgs(dao1.address, 'Decent Dawgs'); - - await expect(fractalRegistry.connect(dao2).updateDAOName('Decent Dawgs2')) - .to.emit(fractalRegistry, 'FractalNameUpdated') - .withArgs(dao2.address, 'Decent Dawgs2'); - }); - - it('A DAO can update its name multiple times', async () => { - await expect(fractalRegistry.connect(dao1).updateDAOName('Decent Dawgs')) - .to.emit(fractalRegistry, 'FractalNameUpdated') - .withArgs(dao1.address, 'Decent Dawgs'); - - await expect(fractalRegistry.connect(dao1).updateDAOName('Decent Dawgs2')) - .to.emit(fractalRegistry, 'FractalNameUpdated') - .withArgs(dao1.address, 'Decent Dawgs2'); - }); - - it('A DAO can declare its subDAO', async () => { - await expect(fractalRegistry.connect(dao1).declareSubDAO(dao2.address)) - .to.emit(fractalRegistry, 'FractalSubDAODeclared') - .withArgs(dao1.address, dao2.address); - }); - - it('A DAO can declare arbitrary key/value pairs', async () => { - await expect(keyValues.connect(dao1).updateValues(['twitter'], ['@awesome'])) - .to.emit(keyValues, 'ValueUpdated') - .withArgs(dao1.address, 'twitter', '@awesome'); - }); - - it('KeyValuePairs reverts if unequal array lengths are passed to it', async () => { - await expect( - keyValues.connect(dao1).updateValues(['twitter', 'discord'], ['@awesome']), - ).to.be.revertedWithCustomError(keyValues, 'IncorrectValueCount'); - }); -}); From 9dd28c2e386f9bf1e4d373f4b6900bb263d04a40 Mon Sep 17 00:00:00 2001 From: Adam Gall Date: Wed, 13 Nov 2024 11:36:46 -0500 Subject: [PATCH 3/3] Remove FractalRegistry contract artifacts --- deployments/base/FractalRegistry.json | 124 ------------------- deployments/mainnet/FractalRegistry.json | 124 ------------------- deployments/optimism/FractalRegistry.json | 124 ------------------- deployments/polygon/FractalRegistry.json | 140 ---------------------- deployments/sepolia/FractalRegistry.json | 124 ------------------- 5 files changed, 636 deletions(-) delete mode 100644 deployments/base/FractalRegistry.json delete mode 100644 deployments/mainnet/FractalRegistry.json delete mode 100644 deployments/optimism/FractalRegistry.json delete mode 100644 deployments/polygon/FractalRegistry.json delete mode 100644 deployments/sepolia/FractalRegistry.json diff --git a/deployments/base/FractalRegistry.json b/deployments/base/FractalRegistry.json deleted file mode 100644 index 0c0ffa4..0000000 --- a/deployments/base/FractalRegistry.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "address": "0x023BDAEFeDDDdd5B43aF125CAA8007a99A886Fd3", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "daoAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "daoName", - "type": "string" - } - ], - "name": "FractalNameUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "parentDAOAddress", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "subDAOAddress", - "type": "address" - } - ], - "name": "FractalSubDAODeclared", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_subDAOAddress", - "type": "address" - } - ], - "name": "declareSubDAO", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - } - ], - "name": "updateDAOName", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x3edd102d03635b5be448a8a7e4f80cc486f19e2187312eeeeb264c6164686797", - "receipt": { - "to": null, - "from": "0xb5Ca125166C1987A35EDD550E16846Fa1e1D9bB3", - "contractAddress": "0x023BDAEFeDDDdd5B43aF125CAA8007a99A886Fd3", - "transactionIndex": 37, - "gasUsed": "183485", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xf7dba55a27b71a0619f5c2088ab562727122f2e387d1b80e2dd2a8aa98f2f1a7", - "transactionHash": "0x3edd102d03635b5be448a8a7e4f80cc486f19e2187312eeeeb264c6164686797", - "logs": [], - "blockNumber": 12996617, - "cumulativeGasUsed": "5545473", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "6969d63459ce17f5a879f7f9d1507f8e", - "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"daoAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"daoName\",\"type\":\"string\"}],\"name\":\"FractalNameUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"parentDAOAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"subDAOAddress\",\"type\":\"address\"}],\"name\":\"FractalSubDAODeclared\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_subDAOAddress\",\"type\":\"address\"}],\"name\":\"declareSubDAO\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"updateDAOName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"declareSubDAO(address)\":{\"params\":{\"_subDAOAddress\":\"address of the subDAO to declare as a child of the caller\"}},\"updateDAOName(string)\":{\"params\":{\"_name\":\"new DAO name\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"declareSubDAO(address)\":{\"notice\":\"Declares an address as a subDAO of the caller's address. This declaration has no binding logic, and serves only to allow us to find the list of \\\"potential\\\" subDAOs of any given Safe address. Given the list of declaring events, we can then check each Safe still has a [FractalModule](../FractalModule.md) attached. If no FractalModule is attached, we'll exclude it from the DAO hierarchy. In the case of a Safe attaching a FractalModule without calling to declare it, we would unfortunately not know to display it as a subDAO.\"},\"updateDAOName(string)\":{\"notice\":\"Updates a DAO's registered \\\"name\\\". This is a simple string with no restrictions or validation for uniqueness.\"}},\"notice\":\"Implementation of [IFractalRegistry](./interfaces/IFractalRegistry.md).\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/FractalRegistry.sol\":\"FractalRegistry\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/FractalRegistry.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity =0.8.19;\\n\\nimport { IFractalRegistry } from \\\"./interfaces/IFractalRegistry.sol\\\";\\n\\n/**\\n * Implementation of [IFractalRegistry](./interfaces/IFractalRegistry.md).\\n */\\ncontract FractalRegistry is IFractalRegistry {\\n\\n event FractalNameUpdated(address indexed daoAddress, string daoName);\\n event FractalSubDAODeclared(address indexed parentDAOAddress, address indexed subDAOAddress);\\n\\n /** @inheritdoc IFractalRegistry*/\\n function updateDAOName(string memory _name) external {\\n emit FractalNameUpdated(msg.sender, _name);\\n }\\n\\n /** @inheritdoc IFractalRegistry*/\\n function declareSubDAO(address _subDAOAddress) external {\\n emit FractalSubDAODeclared(msg.sender, _subDAOAddress);\\n }\\n}\\n\",\"keccak256\":\"0x7adce05a4b6beadbe877cbab3cc6111444e25545217078a56baefdfc0bdea53f\",\"license\":\"MIT\"},\"contracts/interfaces/IFractalRegistry.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity =0.8.19;\\n\\n/**\\n * A utility contract which logs events pertaining to Fractal DAO metadata.\\n */\\ninterface IFractalRegistry {\\n\\n /**\\n * Updates a DAO's registered \\\"name\\\". This is a simple string\\n * with no restrictions or validation for uniqueness.\\n *\\n * @param _name new DAO name\\n */\\n function updateDAOName(string memory _name) external;\\n\\n /**\\n * Declares an address as a subDAO of the caller's address.\\n *\\n * This declaration has no binding logic, and serves only\\n * to allow us to find the list of \\\"potential\\\" subDAOs of any \\n * given Safe address.\\n *\\n * Given the list of declaring events, we can then check each\\n * Safe still has a [FractalModule](../FractalModule.md) attached.\\n *\\n * If no FractalModule is attached, we'll exclude it from the\\n * DAO hierarchy.\\n *\\n * In the case of a Safe attaching a FractalModule without calling \\n * to declare it, we would unfortunately not know to display it \\n * as a subDAO.\\n *\\n * @param _subDAOAddress address of the subDAO to declare \\n * as a child of the caller\\n */\\n function declareSubDAO(address _subDAOAddress) external;\\n}\\n\",\"keccak256\":\"0xfc6a8701bbc54f129d3c5f93634d97ce7b09cf0a2a15b6595c46a5a637e7da20\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5061025b806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ad25ee4a1461003b578063b7d0e69114610050575b600080fd5b61004e6100493660046100f6565b610063565b005b61004e61005e3660046101a7565b6100a7565b336001600160a01b03167f3c7e9162ed121fd2c775c8c39886daeaede693a6e24ac0fa81e50c47833a9e088260405161009c91906101d7565b60405180910390a250565b6040516001600160a01b0382169033907f099c708754e573857f5a1999a474653fd72d617a0619e740e41bd3b882b64bb890600090a350565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561010857600080fd5b813567ffffffffffffffff8082111561012057600080fd5b818401915084601f83011261013457600080fd5b813581811115610146576101466100e0565b604051601f8201601f19908116603f0116810190838211818310171561016e5761016e6100e0565b8160405282815287602084870101111561018757600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000602082840312156101b957600080fd5b81356001600160a01b03811681146101d057600080fd5b9392505050565b600060208083528351808285015260005b81811015610204578581018301518582016040015282016101e8565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220e2b1f1b3d902ef6591361d379f3e52d6019e14289e0c0637d7e5b94f829575bc64736f6c63430008130033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063ad25ee4a1461003b578063b7d0e69114610050575b600080fd5b61004e6100493660046100f6565b610063565b005b61004e61005e3660046101a7565b6100a7565b336001600160a01b03167f3c7e9162ed121fd2c775c8c39886daeaede693a6e24ac0fa81e50c47833a9e088260405161009c91906101d7565b60405180910390a250565b6040516001600160a01b0382169033907f099c708754e573857f5a1999a474653fd72d617a0619e740e41bd3b882b64bb890600090a350565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561010857600080fd5b813567ffffffffffffffff8082111561012057600080fd5b818401915084601f83011261013457600080fd5b813581811115610146576101466100e0565b604051601f8201601f19908116603f0116810190838211818310171561016e5761016e6100e0565b8160405282815287602084870101111561018757600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000602082840312156101b957600080fd5b81356001600160a01b03811681146101d057600080fd5b9392505050565b600060208083528351808285015260005b81811015610204578581018301518582016040015282016101e8565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220e2b1f1b3d902ef6591361d379f3e52d6019e14289e0c0637d7e5b94f829575bc64736f6c63430008130033", - "devdoc": { - "kind": "dev", - "methods": { - "declareSubDAO(address)": { - "params": { - "_subDAOAddress": "address of the subDAO to declare as a child of the caller" - } - }, - "updateDAOName(string)": { - "params": { - "_name": "new DAO name" - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "declareSubDAO(address)": { - "notice": "Declares an address as a subDAO of the caller's address. This declaration has no binding logic, and serves only to allow us to find the list of \"potential\" subDAOs of any given Safe address. Given the list of declaring events, we can then check each Safe still has a [FractalModule](../FractalModule.md) attached. If no FractalModule is attached, we'll exclude it from the DAO hierarchy. In the case of a Safe attaching a FractalModule without calling to declare it, we would unfortunately not know to display it as a subDAO." - }, - "updateDAOName(string)": { - "notice": "Updates a DAO's registered \"name\". This is a simple string with no restrictions or validation for uniqueness." - } - }, - "notice": "Implementation of [IFractalRegistry](./interfaces/IFractalRegistry.md).", - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/mainnet/FractalRegistry.json b/deployments/mainnet/FractalRegistry.json deleted file mode 100644 index 41d4471..0000000 --- a/deployments/mainnet/FractalRegistry.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "address": "0x023BDAEFeDDDdd5B43aF125CAA8007a99A886Fd3", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "daoAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "daoName", - "type": "string" - } - ], - "name": "FractalNameUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "parentDAOAddress", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "subDAOAddress", - "type": "address" - } - ], - "name": "FractalSubDAODeclared", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_subDAOAddress", - "type": "address" - } - ], - "name": "declareSubDAO", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - } - ], - "name": "updateDAOName", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xbe571de1ebb30e2dbb3cb8091b2dc9ca415aba1bf13dc83c5c032e4a5597c0b8", - "receipt": { - "to": null, - "from": "0xb5Ca125166C1987A35EDD550E16846Fa1e1D9bB3", - "contractAddress": "0x023BDAEFeDDDdd5B43aF125CAA8007a99A886Fd3", - "transactionIndex": 26, - "gasUsed": "183485", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x7bd203e37ff50e9959a1fb5b966a594178fce9b27266d08d436506e60202f497", - "transactionHash": "0xbe571de1ebb30e2dbb3cb8091b2dc9ca415aba1bf13dc83c5c032e4a5597c0b8", - "logs": [], - "blockNumber": 17389302, - "cumulativeGasUsed": "3404241", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "6969d63459ce17f5a879f7f9d1507f8e", - "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"daoAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"daoName\",\"type\":\"string\"}],\"name\":\"FractalNameUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"parentDAOAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"subDAOAddress\",\"type\":\"address\"}],\"name\":\"FractalSubDAODeclared\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_subDAOAddress\",\"type\":\"address\"}],\"name\":\"declareSubDAO\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"updateDAOName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"declareSubDAO(address)\":{\"params\":{\"_subDAOAddress\":\"address of the subDAO to declare as a child of the caller\"}},\"updateDAOName(string)\":{\"params\":{\"_name\":\"new DAO name\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"declareSubDAO(address)\":{\"notice\":\"Declares an address as a subDAO of the caller's address. This declaration has no binding logic, and serves only to allow us to find the list of \\\"potential\\\" subDAOs of any given Safe address. Given the list of declaring events, we can then check each Safe still has a [FractalModule](../FractalModule.md) attached. If no FractalModule is attached, we'll exclude it from the DAO hierarchy. In the case of a Safe attaching a FractalModule without calling to declare it, we would unfortunately not know to display it as a subDAO.\"},\"updateDAOName(string)\":{\"notice\":\"Updates a DAO's registered \\\"name\\\". This is a simple string with no restrictions or validation for uniqueness.\"}},\"notice\":\"Implementation of [IFractalRegistry](./interfaces/IFractalRegistry.md).\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/FractalRegistry.sol\":\"FractalRegistry\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/FractalRegistry.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity =0.8.19;\\n\\nimport { IFractalRegistry } from \\\"./interfaces/IFractalRegistry.sol\\\";\\n\\n/**\\n * Implementation of [IFractalRegistry](./interfaces/IFractalRegistry.md).\\n */\\ncontract FractalRegistry is IFractalRegistry {\\n\\n event FractalNameUpdated(address indexed daoAddress, string daoName);\\n event FractalSubDAODeclared(address indexed parentDAOAddress, address indexed subDAOAddress);\\n\\n /** @inheritdoc IFractalRegistry*/\\n function updateDAOName(string memory _name) external {\\n emit FractalNameUpdated(msg.sender, _name);\\n }\\n\\n /** @inheritdoc IFractalRegistry*/\\n function declareSubDAO(address _subDAOAddress) external {\\n emit FractalSubDAODeclared(msg.sender, _subDAOAddress);\\n }\\n}\\n\",\"keccak256\":\"0x7adce05a4b6beadbe877cbab3cc6111444e25545217078a56baefdfc0bdea53f\",\"license\":\"MIT\"},\"contracts/interfaces/IFractalRegistry.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity =0.8.19;\\n\\n/**\\n * A utility contract which logs events pertaining to Fractal DAO metadata.\\n */\\ninterface IFractalRegistry {\\n\\n /**\\n * Updates a DAO's registered \\\"name\\\". This is a simple string\\n * with no restrictions or validation for uniqueness.\\n *\\n * @param _name new DAO name\\n */\\n function updateDAOName(string memory _name) external;\\n\\n /**\\n * Declares an address as a subDAO of the caller's address.\\n *\\n * This declaration has no binding logic, and serves only\\n * to allow us to find the list of \\\"potential\\\" subDAOs of any \\n * given Safe address.\\n *\\n * Given the list of declaring events, we can then check each\\n * Safe still has a [FractalModule](../FractalModule.md) attached.\\n *\\n * If no FractalModule is attached, we'll exclude it from the\\n * DAO hierarchy.\\n *\\n * In the case of a Safe attaching a FractalModule without calling \\n * to declare it, we would unfortunately not know to display it \\n * as a subDAO.\\n *\\n * @param _subDAOAddress address of the subDAO to declare \\n * as a child of the caller\\n */\\n function declareSubDAO(address _subDAOAddress) external;\\n}\\n\",\"keccak256\":\"0xfc6a8701bbc54f129d3c5f93634d97ce7b09cf0a2a15b6595c46a5a637e7da20\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5061025b806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ad25ee4a1461003b578063b7d0e69114610050575b600080fd5b61004e6100493660046100f6565b610063565b005b61004e61005e3660046101a7565b6100a7565b336001600160a01b03167f3c7e9162ed121fd2c775c8c39886daeaede693a6e24ac0fa81e50c47833a9e088260405161009c91906101d7565b60405180910390a250565b6040516001600160a01b0382169033907f099c708754e573857f5a1999a474653fd72d617a0619e740e41bd3b882b64bb890600090a350565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561010857600080fd5b813567ffffffffffffffff8082111561012057600080fd5b818401915084601f83011261013457600080fd5b813581811115610146576101466100e0565b604051601f8201601f19908116603f0116810190838211818310171561016e5761016e6100e0565b8160405282815287602084870101111561018757600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000602082840312156101b957600080fd5b81356001600160a01b03811681146101d057600080fd5b9392505050565b600060208083528351808285015260005b81811015610204578581018301518582016040015282016101e8565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220e2b1f1b3d902ef6591361d379f3e52d6019e14289e0c0637d7e5b94f829575bc64736f6c63430008130033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063ad25ee4a1461003b578063b7d0e69114610050575b600080fd5b61004e6100493660046100f6565b610063565b005b61004e61005e3660046101a7565b6100a7565b336001600160a01b03167f3c7e9162ed121fd2c775c8c39886daeaede693a6e24ac0fa81e50c47833a9e088260405161009c91906101d7565b60405180910390a250565b6040516001600160a01b0382169033907f099c708754e573857f5a1999a474653fd72d617a0619e740e41bd3b882b64bb890600090a350565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561010857600080fd5b813567ffffffffffffffff8082111561012057600080fd5b818401915084601f83011261013457600080fd5b813581811115610146576101466100e0565b604051601f8201601f19908116603f0116810190838211818310171561016e5761016e6100e0565b8160405282815287602084870101111561018757600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000602082840312156101b957600080fd5b81356001600160a01b03811681146101d057600080fd5b9392505050565b600060208083528351808285015260005b81811015610204578581018301518582016040015282016101e8565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220e2b1f1b3d902ef6591361d379f3e52d6019e14289e0c0637d7e5b94f829575bc64736f6c63430008130033", - "devdoc": { - "kind": "dev", - "methods": { - "declareSubDAO(address)": { - "params": { - "_subDAOAddress": "address of the subDAO to declare as a child of the caller" - } - }, - "updateDAOName(string)": { - "params": { - "_name": "new DAO name" - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "declareSubDAO(address)": { - "notice": "Declares an address as a subDAO of the caller's address. This declaration has no binding logic, and serves only to allow us to find the list of \"potential\" subDAOs of any given Safe address. Given the list of declaring events, we can then check each Safe still has a [FractalModule](../FractalModule.md) attached. If no FractalModule is attached, we'll exclude it from the DAO hierarchy. In the case of a Safe attaching a FractalModule without calling to declare it, we would unfortunately not know to display it as a subDAO." - }, - "updateDAOName(string)": { - "notice": "Updates a DAO's registered \"name\". This is a simple string with no restrictions or validation for uniqueness." - } - }, - "notice": "Implementation of [IFractalRegistry](./interfaces/IFractalRegistry.md).", - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/optimism/FractalRegistry.json b/deployments/optimism/FractalRegistry.json deleted file mode 100644 index 93eed58..0000000 --- a/deployments/optimism/FractalRegistry.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "address": "0x023BDAEFeDDDdd5B43aF125CAA8007a99A886Fd3", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "daoAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "daoName", - "type": "string" - } - ], - "name": "FractalNameUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "parentDAOAddress", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "subDAOAddress", - "type": "address" - } - ], - "name": "FractalSubDAODeclared", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_subDAOAddress", - "type": "address" - } - ], - "name": "declareSubDAO", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - } - ], - "name": "updateDAOName", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x79b827ea0f8afd1a7a7c4e9f004b36a5bcbc00006b8fc9c3a8b5c86780081589", - "receipt": { - "to": null, - "from": "0xb5Ca125166C1987A35EDD550E16846Fa1e1D9bB3", - "contractAddress": "0x023BDAEFeDDDdd5B43aF125CAA8007a99A886Fd3", - "transactionIndex": 5, - "gasUsed": "183485", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x3dd90dc82beea5b39bd7d4fc0b960a916d6621a1386135c73f6ae42e8ca32366", - "transactionHash": "0x79b827ea0f8afd1a7a7c4e9f004b36a5bcbc00006b8fc9c3a8b5c86780081589", - "logs": [], - "blockNumber": 118640391, - "cumulativeGasUsed": "672901", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "6969d63459ce17f5a879f7f9d1507f8e", - "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"daoAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"daoName\",\"type\":\"string\"}],\"name\":\"FractalNameUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"parentDAOAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"subDAOAddress\",\"type\":\"address\"}],\"name\":\"FractalSubDAODeclared\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_subDAOAddress\",\"type\":\"address\"}],\"name\":\"declareSubDAO\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"updateDAOName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"declareSubDAO(address)\":{\"params\":{\"_subDAOAddress\":\"address of the subDAO to declare as a child of the caller\"}},\"updateDAOName(string)\":{\"params\":{\"_name\":\"new DAO name\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"declareSubDAO(address)\":{\"notice\":\"Declares an address as a subDAO of the caller's address. This declaration has no binding logic, and serves only to allow us to find the list of \\\"potential\\\" subDAOs of any given Safe address. Given the list of declaring events, we can then check each Safe still has a [FractalModule](../FractalModule.md) attached. If no FractalModule is attached, we'll exclude it from the DAO hierarchy. In the case of a Safe attaching a FractalModule without calling to declare it, we would unfortunately not know to display it as a subDAO.\"},\"updateDAOName(string)\":{\"notice\":\"Updates a DAO's registered \\\"name\\\". This is a simple string with no restrictions or validation for uniqueness.\"}},\"notice\":\"Implementation of [IFractalRegistry](./interfaces/IFractalRegistry.md).\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/FractalRegistry.sol\":\"FractalRegistry\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/FractalRegistry.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity =0.8.19;\\n\\nimport { IFractalRegistry } from \\\"./interfaces/IFractalRegistry.sol\\\";\\n\\n/**\\n * Implementation of [IFractalRegistry](./interfaces/IFractalRegistry.md).\\n */\\ncontract FractalRegistry is IFractalRegistry {\\n\\n event FractalNameUpdated(address indexed daoAddress, string daoName);\\n event FractalSubDAODeclared(address indexed parentDAOAddress, address indexed subDAOAddress);\\n\\n /** @inheritdoc IFractalRegistry*/\\n function updateDAOName(string memory _name) external {\\n emit FractalNameUpdated(msg.sender, _name);\\n }\\n\\n /** @inheritdoc IFractalRegistry*/\\n function declareSubDAO(address _subDAOAddress) external {\\n emit FractalSubDAODeclared(msg.sender, _subDAOAddress);\\n }\\n}\\n\",\"keccak256\":\"0x7adce05a4b6beadbe877cbab3cc6111444e25545217078a56baefdfc0bdea53f\",\"license\":\"MIT\"},\"contracts/interfaces/IFractalRegistry.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity =0.8.19;\\n\\n/**\\n * A utility contract which logs events pertaining to Fractal DAO metadata.\\n */\\ninterface IFractalRegistry {\\n\\n /**\\n * Updates a DAO's registered \\\"name\\\". This is a simple string\\n * with no restrictions or validation for uniqueness.\\n *\\n * @param _name new DAO name\\n */\\n function updateDAOName(string memory _name) external;\\n\\n /**\\n * Declares an address as a subDAO of the caller's address.\\n *\\n * This declaration has no binding logic, and serves only\\n * to allow us to find the list of \\\"potential\\\" subDAOs of any \\n * given Safe address.\\n *\\n * Given the list of declaring events, we can then check each\\n * Safe still has a [FractalModule](../FractalModule.md) attached.\\n *\\n * If no FractalModule is attached, we'll exclude it from the\\n * DAO hierarchy.\\n *\\n * In the case of a Safe attaching a FractalModule without calling \\n * to declare it, we would unfortunately not know to display it \\n * as a subDAO.\\n *\\n * @param _subDAOAddress address of the subDAO to declare \\n * as a child of the caller\\n */\\n function declareSubDAO(address _subDAOAddress) external;\\n}\\n\",\"keccak256\":\"0xfc6a8701bbc54f129d3c5f93634d97ce7b09cf0a2a15b6595c46a5a637e7da20\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5061025b806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ad25ee4a1461003b578063b7d0e69114610050575b600080fd5b61004e6100493660046100f6565b610063565b005b61004e61005e3660046101a7565b6100a7565b336001600160a01b03167f3c7e9162ed121fd2c775c8c39886daeaede693a6e24ac0fa81e50c47833a9e088260405161009c91906101d7565b60405180910390a250565b6040516001600160a01b0382169033907f099c708754e573857f5a1999a474653fd72d617a0619e740e41bd3b882b64bb890600090a350565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561010857600080fd5b813567ffffffffffffffff8082111561012057600080fd5b818401915084601f83011261013457600080fd5b813581811115610146576101466100e0565b604051601f8201601f19908116603f0116810190838211818310171561016e5761016e6100e0565b8160405282815287602084870101111561018757600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000602082840312156101b957600080fd5b81356001600160a01b03811681146101d057600080fd5b9392505050565b600060208083528351808285015260005b81811015610204578581018301518582016040015282016101e8565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220e2b1f1b3d902ef6591361d379f3e52d6019e14289e0c0637d7e5b94f829575bc64736f6c63430008130033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063ad25ee4a1461003b578063b7d0e69114610050575b600080fd5b61004e6100493660046100f6565b610063565b005b61004e61005e3660046101a7565b6100a7565b336001600160a01b03167f3c7e9162ed121fd2c775c8c39886daeaede693a6e24ac0fa81e50c47833a9e088260405161009c91906101d7565b60405180910390a250565b6040516001600160a01b0382169033907f099c708754e573857f5a1999a474653fd72d617a0619e740e41bd3b882b64bb890600090a350565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561010857600080fd5b813567ffffffffffffffff8082111561012057600080fd5b818401915084601f83011261013457600080fd5b813581811115610146576101466100e0565b604051601f8201601f19908116603f0116810190838211818310171561016e5761016e6100e0565b8160405282815287602084870101111561018757600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000602082840312156101b957600080fd5b81356001600160a01b03811681146101d057600080fd5b9392505050565b600060208083528351808285015260005b81811015610204578581018301518582016040015282016101e8565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220e2b1f1b3d902ef6591361d379f3e52d6019e14289e0c0637d7e5b94f829575bc64736f6c63430008130033", - "devdoc": { - "kind": "dev", - "methods": { - "declareSubDAO(address)": { - "params": { - "_subDAOAddress": "address of the subDAO to declare as a child of the caller" - } - }, - "updateDAOName(string)": { - "params": { - "_name": "new DAO name" - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "declareSubDAO(address)": { - "notice": "Declares an address as a subDAO of the caller's address. This declaration has no binding logic, and serves only to allow us to find the list of \"potential\" subDAOs of any given Safe address. Given the list of declaring events, we can then check each Safe still has a [FractalModule](../FractalModule.md) attached. If no FractalModule is attached, we'll exclude it from the DAO hierarchy. In the case of a Safe attaching a FractalModule without calling to declare it, we would unfortunately not know to display it as a subDAO." - }, - "updateDAOName(string)": { - "notice": "Updates a DAO's registered \"name\". This is a simple string with no restrictions or validation for uniqueness." - } - }, - "notice": "Implementation of [IFractalRegistry](./interfaces/IFractalRegistry.md).", - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/polygon/FractalRegistry.json b/deployments/polygon/FractalRegistry.json deleted file mode 100644 index bdfc816..0000000 --- a/deployments/polygon/FractalRegistry.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "address": "0xfE5950B4975a19679be7c31a0A03D626d237f37C", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "daoAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "daoName", - "type": "string" - } - ], - "name": "FractalNameUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "parentDAOAddress", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "subDAOAddress", - "type": "address" - } - ], - "name": "FractalSubDAODeclared", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_subDAOAddress", - "type": "address" - } - ], - "name": "declareSubDAO", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - } - ], - "name": "updateDAOName", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xc2ecd65a339b5b670958bf089b27a4ed9ea8a830cdacd14994a970a10bfbbcc6", - "receipt": { - "to": null, - "from": "0xc43bEf2d300e825391B6A16CB5382F0ad17B90b3", - "contractAddress": "0xfE5950B4975a19679be7c31a0A03D626d237f37C", - "transactionIndex": 28, - "gasUsed": "183445", - "logsBloom": "0x00000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000008000000000408000000000000000004200000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000080000000000000000000000000000000000000000000100000", - "blockHash": "0xd490920792250164d1dc7368be8279305a428e2a9557c8386804e83618f3cae7", - "transactionHash": "0xc2ecd65a339b5b670958bf089b27a4ed9ea8a830cdacd14994a970a10bfbbcc6", - "logs": [ - { - "transactionIndex": 28, - "blockNumber": 43952847, - "transactionHash": "0xc2ecd65a339b5b670958bf089b27a4ed9ea8a830cdacd14994a970a10bfbbcc6", - "address": "0x0000000000000000000000000000000000001010", - "topics": [ - "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", - "0x0000000000000000000000000000000000000000000000000000000000001010", - "0x000000000000000000000000c43bef2d300e825391b6a16cb5382f0ad17b90b3", - "0x000000000000000000000000448aa1665fe1fae6d1a00a9209ea62d7dcd81a4b" - ], - "data": "0x000000000000000000000000000000000000000000000000001a511616ee9f930000000000000000000000000000000000000000000000012a6d8f27812621380000000000000000000000000000000000000000000002e2aeca52bde94588c20000000000000000000000000000000000000000000000012a533e116a3781a50000000000000000000000000000000000000000000002e2aee4a3d400342855", - "logIndex": 103, - "blockHash": "0xd490920792250164d1dc7368be8279305a428e2a9557c8386804e83618f3cae7" - } - ], - "blockNumber": 43952847, - "cumulativeGasUsed": "4224749", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "6969d63459ce17f5a879f7f9d1507f8e", - "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"daoAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"daoName\",\"type\":\"string\"}],\"name\":\"FractalNameUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"parentDAOAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"subDAOAddress\",\"type\":\"address\"}],\"name\":\"FractalSubDAODeclared\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_subDAOAddress\",\"type\":\"address\"}],\"name\":\"declareSubDAO\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"updateDAOName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"declareSubDAO(address)\":{\"params\":{\"_subDAOAddress\":\"address of the subDAO to declare as a child of the caller\"}},\"updateDAOName(string)\":{\"params\":{\"_name\":\"new DAO name\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"declareSubDAO(address)\":{\"notice\":\"Declares an address as a subDAO of the caller's address. This declaration has no binding logic, and serves only to allow us to find the list of \\\"potential\\\" subDAOs of any given Safe address. Given the list of declaring events, we can then check each Safe still has a [FractalModule](../FractalModule.md) attached. If no FractalModule is attached, we'll exclude it from the DAO hierarchy. In the case of a Safe attaching a FractalModule without calling to declare it, we would unfortunately not know to display it as a subDAO.\"},\"updateDAOName(string)\":{\"notice\":\"Updates a DAO's registered \\\"name\\\". This is a simple string with no restrictions or validation for uniqueness.\"}},\"notice\":\"Implementation of [IFractalRegistry](./interfaces/IFractalRegistry.md).\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/FractalRegistry.sol\":\"FractalRegistry\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/FractalRegistry.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity =0.8.19;\\n\\nimport { IFractalRegistry } from \\\"./interfaces/IFractalRegistry.sol\\\";\\n\\n/**\\n * Implementation of [IFractalRegistry](./interfaces/IFractalRegistry.md).\\n */\\ncontract FractalRegistry is IFractalRegistry {\\n\\n event FractalNameUpdated(address indexed daoAddress, string daoName);\\n event FractalSubDAODeclared(address indexed parentDAOAddress, address indexed subDAOAddress);\\n\\n /** @inheritdoc IFractalRegistry*/\\n function updateDAOName(string memory _name) external {\\n emit FractalNameUpdated(msg.sender, _name);\\n }\\n\\n /** @inheritdoc IFractalRegistry*/\\n function declareSubDAO(address _subDAOAddress) external {\\n emit FractalSubDAODeclared(msg.sender, _subDAOAddress);\\n }\\n}\\n\",\"keccak256\":\"0x7adce05a4b6beadbe877cbab3cc6111444e25545217078a56baefdfc0bdea53f\",\"license\":\"MIT\"},\"contracts/interfaces/IFractalRegistry.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity =0.8.19;\\n\\n/**\\n * A utility contract which logs events pertaining to Fractal DAO metadata.\\n */\\ninterface IFractalRegistry {\\n\\n /**\\n * Updates a DAO's registered \\\"name\\\". This is a simple string\\n * with no restrictions or validation for uniqueness.\\n *\\n * @param _name new DAO name\\n */\\n function updateDAOName(string memory _name) external;\\n\\n /**\\n * Declares an address as a subDAO of the caller's address.\\n *\\n * This declaration has no binding logic, and serves only\\n * to allow us to find the list of \\\"potential\\\" subDAOs of any \\n * given Safe address.\\n *\\n * Given the list of declaring events, we can then check each\\n * Safe still has a [FractalModule](../FractalModule.md) attached.\\n *\\n * If no FractalModule is attached, we'll exclude it from the\\n * DAO hierarchy.\\n *\\n * In the case of a Safe attaching a FractalModule without calling \\n * to declare it, we would unfortunately not know to display it \\n * as a subDAO.\\n *\\n * @param _subDAOAddress address of the subDAO to declare \\n * as a child of the caller\\n */\\n function declareSubDAO(address _subDAOAddress) external;\\n}\\n\",\"keccak256\":\"0xfc6a8701bbc54f129d3c5f93634d97ce7b09cf0a2a15b6595c46a5a637e7da20\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5061025b806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ad25ee4a1461003b578063b7d0e69114610050575b600080fd5b61004e6100493660046100f6565b610063565b005b61004e61005e3660046101a7565b6100a7565b336001600160a01b03167f3c7e9162ed121fd2c775c8c39886daeaede693a6e24ac0fa81e50c47833a9e088260405161009c91906101d7565b60405180910390a250565b6040516001600160a01b0382169033907f099c708754e573857f5a1999a474653fd72d617a0619e740e41bd3b882b64bb890600090a350565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561010857600080fd5b813567ffffffffffffffff8082111561012057600080fd5b818401915084601f83011261013457600080fd5b813581811115610146576101466100e0565b604051601f8201601f19908116603f0116810190838211818310171561016e5761016e6100e0565b8160405282815287602084870101111561018757600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000602082840312156101b957600080fd5b81356001600160a01b03811681146101d057600080fd5b9392505050565b600060208083528351808285015260005b81811015610204578581018301518582016040015282016101e8565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220e2b1f1b3d902ef6591361d379f3e52d6019e14289e0c0637d7e5b94f829575bc64736f6c63430008130033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063ad25ee4a1461003b578063b7d0e69114610050575b600080fd5b61004e6100493660046100f6565b610063565b005b61004e61005e3660046101a7565b6100a7565b336001600160a01b03167f3c7e9162ed121fd2c775c8c39886daeaede693a6e24ac0fa81e50c47833a9e088260405161009c91906101d7565b60405180910390a250565b6040516001600160a01b0382169033907f099c708754e573857f5a1999a474653fd72d617a0619e740e41bd3b882b64bb890600090a350565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561010857600080fd5b813567ffffffffffffffff8082111561012057600080fd5b818401915084601f83011261013457600080fd5b813581811115610146576101466100e0565b604051601f8201601f19908116603f0116810190838211818310171561016e5761016e6100e0565b8160405282815287602084870101111561018757600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000602082840312156101b957600080fd5b81356001600160a01b03811681146101d057600080fd5b9392505050565b600060208083528351808285015260005b81811015610204578581018301518582016040015282016101e8565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220e2b1f1b3d902ef6591361d379f3e52d6019e14289e0c0637d7e5b94f829575bc64736f6c63430008130033", - "devdoc": { - "kind": "dev", - "methods": { - "declareSubDAO(address)": { - "params": { - "_subDAOAddress": "address of the subDAO to declare as a child of the caller" - } - }, - "updateDAOName(string)": { - "params": { - "_name": "new DAO name" - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "declareSubDAO(address)": { - "notice": "Declares an address as a subDAO of the caller's address. This declaration has no binding logic, and serves only to allow us to find the list of \"potential\" subDAOs of any given Safe address. Given the list of declaring events, we can then check each Safe still has a [FractalModule](../FractalModule.md) attached. If no FractalModule is attached, we'll exclude it from the DAO hierarchy. In the case of a Safe attaching a FractalModule without calling to declare it, we would unfortunately not know to display it as a subDAO." - }, - "updateDAOName(string)": { - "notice": "Updates a DAO's registered \"name\". This is a simple string with no restrictions or validation for uniqueness." - } - }, - "notice": "Implementation of [IFractalRegistry](./interfaces/IFractalRegistry.md).", - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/deployments/sepolia/FractalRegistry.json b/deployments/sepolia/FractalRegistry.json deleted file mode 100644 index 35e74a7..0000000 --- a/deployments/sepolia/FractalRegistry.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "address": "0x4791FF2a6E84F012402c0679C12Cb1d9260450A6", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "daoAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "daoName", - "type": "string" - } - ], - "name": "FractalNameUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "parentDAOAddress", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "subDAOAddress", - "type": "address" - } - ], - "name": "FractalSubDAODeclared", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_subDAOAddress", - "type": "address" - } - ], - "name": "declareSubDAO", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - } - ], - "name": "updateDAOName", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x0a0b8a05c078a0ebd16eb6c7ce376ad5b93b0d3c755a24fc2beea335599ddc3d", - "receipt": { - "to": null, - "from": "0x637366C372a9096b262bd2fe6c40D7BCc6239976", - "contractAddress": "0x4791FF2a6E84F012402c0679C12Cb1d9260450A6", - "transactionIndex": 24, - "gasUsed": "183485", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x66300dec12b0570782ae3edb565dfed117db4ceb366a0b975db6aebed92f8694", - "transactionHash": "0x0a0b8a05c078a0ebd16eb6c7ce376ad5b93b0d3c755a24fc2beea335599ddc3d", - "logs": [], - "blockNumber": 4916634, - "cumulativeGasUsed": "4489398", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 1, - "solcInputHash": "6969d63459ce17f5a879f7f9d1507f8e", - "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"daoAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"daoName\",\"type\":\"string\"}],\"name\":\"FractalNameUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"parentDAOAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"subDAOAddress\",\"type\":\"address\"}],\"name\":\"FractalSubDAODeclared\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_subDAOAddress\",\"type\":\"address\"}],\"name\":\"declareSubDAO\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"updateDAOName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"declareSubDAO(address)\":{\"params\":{\"_subDAOAddress\":\"address of the subDAO to declare as a child of the caller\"}},\"updateDAOName(string)\":{\"params\":{\"_name\":\"new DAO name\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"declareSubDAO(address)\":{\"notice\":\"Declares an address as a subDAO of the caller's address. This declaration has no binding logic, and serves only to allow us to find the list of \\\"potential\\\" subDAOs of any given Safe address. Given the list of declaring events, we can then check each Safe still has a [FractalModule](../FractalModule.md) attached. If no FractalModule is attached, we'll exclude it from the DAO hierarchy. In the case of a Safe attaching a FractalModule without calling to declare it, we would unfortunately not know to display it as a subDAO.\"},\"updateDAOName(string)\":{\"notice\":\"Updates a DAO's registered \\\"name\\\". This is a simple string with no restrictions or validation for uniqueness.\"}},\"notice\":\"Implementation of [IFractalRegistry](./interfaces/IFractalRegistry.md).\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/FractalRegistry.sol\":\"FractalRegistry\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/FractalRegistry.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity =0.8.19;\\n\\nimport { IFractalRegistry } from \\\"./interfaces/IFractalRegistry.sol\\\";\\n\\n/**\\n * Implementation of [IFractalRegistry](./interfaces/IFractalRegistry.md).\\n */\\ncontract FractalRegistry is IFractalRegistry {\\n\\n event FractalNameUpdated(address indexed daoAddress, string daoName);\\n event FractalSubDAODeclared(address indexed parentDAOAddress, address indexed subDAOAddress);\\n\\n /** @inheritdoc IFractalRegistry*/\\n function updateDAOName(string memory _name) external {\\n emit FractalNameUpdated(msg.sender, _name);\\n }\\n\\n /** @inheritdoc IFractalRegistry*/\\n function declareSubDAO(address _subDAOAddress) external {\\n emit FractalSubDAODeclared(msg.sender, _subDAOAddress);\\n }\\n}\\n\",\"keccak256\":\"0x7adce05a4b6beadbe877cbab3cc6111444e25545217078a56baefdfc0bdea53f\",\"license\":\"MIT\"},\"contracts/interfaces/IFractalRegistry.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity =0.8.19;\\n\\n/**\\n * A utility contract which logs events pertaining to Fractal DAO metadata.\\n */\\ninterface IFractalRegistry {\\n\\n /**\\n * Updates a DAO's registered \\\"name\\\". This is a simple string\\n * with no restrictions or validation for uniqueness.\\n *\\n * @param _name new DAO name\\n */\\n function updateDAOName(string memory _name) external;\\n\\n /**\\n * Declares an address as a subDAO of the caller's address.\\n *\\n * This declaration has no binding logic, and serves only\\n * to allow us to find the list of \\\"potential\\\" subDAOs of any \\n * given Safe address.\\n *\\n * Given the list of declaring events, we can then check each\\n * Safe still has a [FractalModule](../FractalModule.md) attached.\\n *\\n * If no FractalModule is attached, we'll exclude it from the\\n * DAO hierarchy.\\n *\\n * In the case of a Safe attaching a FractalModule without calling \\n * to declare it, we would unfortunately not know to display it \\n * as a subDAO.\\n *\\n * @param _subDAOAddress address of the subDAO to declare \\n * as a child of the caller\\n */\\n function declareSubDAO(address _subDAOAddress) external;\\n}\\n\",\"keccak256\":\"0xfc6a8701bbc54f129d3c5f93634d97ce7b09cf0a2a15b6595c46a5a637e7da20\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5061025b806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ad25ee4a1461003b578063b7d0e69114610050575b600080fd5b61004e6100493660046100f6565b610063565b005b61004e61005e3660046101a7565b6100a7565b336001600160a01b03167f3c7e9162ed121fd2c775c8c39886daeaede693a6e24ac0fa81e50c47833a9e088260405161009c91906101d7565b60405180910390a250565b6040516001600160a01b0382169033907f099c708754e573857f5a1999a474653fd72d617a0619e740e41bd3b882b64bb890600090a350565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561010857600080fd5b813567ffffffffffffffff8082111561012057600080fd5b818401915084601f83011261013457600080fd5b813581811115610146576101466100e0565b604051601f8201601f19908116603f0116810190838211818310171561016e5761016e6100e0565b8160405282815287602084870101111561018757600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000602082840312156101b957600080fd5b81356001600160a01b03811681146101d057600080fd5b9392505050565b600060208083528351808285015260005b81811015610204578581018301518582016040015282016101e8565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220e2b1f1b3d902ef6591361d379f3e52d6019e14289e0c0637d7e5b94f829575bc64736f6c63430008130033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063ad25ee4a1461003b578063b7d0e69114610050575b600080fd5b61004e6100493660046100f6565b610063565b005b61004e61005e3660046101a7565b6100a7565b336001600160a01b03167f3c7e9162ed121fd2c775c8c39886daeaede693a6e24ac0fa81e50c47833a9e088260405161009c91906101d7565b60405180910390a250565b6040516001600160a01b0382169033907f099c708754e573857f5a1999a474653fd72d617a0619e740e41bd3b882b64bb890600090a350565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561010857600080fd5b813567ffffffffffffffff8082111561012057600080fd5b818401915084601f83011261013457600080fd5b813581811115610146576101466100e0565b604051601f8201601f19908116603f0116810190838211818310171561016e5761016e6100e0565b8160405282815287602084870101111561018757600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000602082840312156101b957600080fd5b81356001600160a01b03811681146101d057600080fd5b9392505050565b600060208083528351808285015260005b81811015610204578581018301518582016040015282016101e8565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220e2b1f1b3d902ef6591361d379f3e52d6019e14289e0c0637d7e5b94f829575bc64736f6c63430008130033", - "devdoc": { - "kind": "dev", - "methods": { - "declareSubDAO(address)": { - "params": { - "_subDAOAddress": "address of the subDAO to declare as a child of the caller" - } - }, - "updateDAOName(string)": { - "params": { - "_name": "new DAO name" - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "declareSubDAO(address)": { - "notice": "Declares an address as a subDAO of the caller's address. This declaration has no binding logic, and serves only to allow us to find the list of \"potential\" subDAOs of any given Safe address. Given the list of declaring events, we can then check each Safe still has a [FractalModule](../FractalModule.md) attached. If no FractalModule is attached, we'll exclude it from the DAO hierarchy. In the case of a Safe attaching a FractalModule without calling to declare it, we would unfortunately not know to display it as a subDAO." - }, - "updateDAOName(string)": { - "notice": "Updates a DAO's registered \"name\". This is a simple string with no restrictions or validation for uniqueness." - } - }, - "notice": "Implementation of [IFractalRegistry](./interfaces/IFractalRegistry.md).", - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file