Deploy subDAOs With the subDAOs Factory
An entire SubDAO can be deployed using the subDAO Factory in a single transaction. You can use the subDAO Factory on the EthereansOS platform here (link coming soon).
The subDAO Factory, which is a custom Factory, allows you to clone (via the deploy
function) your subDAO, choose which Components you want to link to it and initialize everything at once.
You can assemble the Root Layer with a selection of the following Components:
Treasury Manager
State Manager
SubDAO Manager
Delegations Manager
Treasury Splitter Manager
Investments Manager
The Proposal Manager is the only mandatory Component; it is automatically cloned and linked to your subDAO.
Deploy the subDAO
As input, the deploy
method of the Factory takes the deployData
parameter:
deployData
is the encoded value of the OrganizationDeployData
struct, which is composed as follows:
string
uri
-> this uri parameter contains the subDAO's metadata. The subDAO contract implements theDynamicMetadataCapableElement
, so that you can set a traditional or a dynamic uri (see here to learn more).bytes[]
mandatoryComponentsDeployData
-> thisinit
data is used to initialize the Proposal Manager, which is the only mandatory Component of the SubDAO.uint256[]
additionalComponents
-> this is an index of the additional Components that you want to link to the SubDAO. Look below to find the Component indices.bytes[]
additionalComponentsDeployData
-> this init data is used to initialize the additional chosen Components. Each position in the bytes array corresponds to the sequentially equivalent position in theadditionalComponents
array.bytes[]
specialComponentsData
-> this data is used to link and initialize external Components to the deployed subDAO. See below to learn more.bytes
specificOrganizationData
-> this data is used to initialize the subDAO. See below to learn more.
specificOrganizationData
The specificOrganizationData
is used to initialize some parameters of the subDAO.
It must contain the following encoded parameters:
bool
initToBeFinalized
-> this represents if the subDAO has to be finalized later (true) or not (false).address
organizationHost
-> this represents the subDAO Manager contract address, which is the subDAO host address. See here to learn more aboutinitToBeFinalized
andorganizationHost
.proposalModels
-> the model in the first position of this parameter is the poll model, and the others are a series of prefixed models that define the fixed executable Proposals that can be created and voted on using this specific subDAO. See here to learn more.
specialComponentsData
This parameter can be used to link and initialize external Components to the subDAO. The parameter must be the encoded valued of:
for each element of the bytes[] specialComponentsData array.
bytes32
key
-> it represents the user defined key of the Component.address
modelOrLocation
-> it represents the Component address.bool
active
-> it represents if the Component must be linked as active (true) or not (false)bytes
deployData
-> if it's passed, it must contain encoded valued of:clone
-> it represents if the Component must be cloned (true) or not (false).deployData
-> it represents the initialization data of the Component.
So if you have a deployed and initialized Component you have to pass clone as false and deployData empty. If you have a deployed and not initialized Component you have to pass clone as false and deployData populated. If you have a not deployed and not initialized Component you have to pass clone as true and deployData populated.
Component Indices
Proposal Manager -> 0
Treasury Manager -> 1
State Manager -> 2
TreasurySplitter Manager -> 3
SubDAO Manager -> 4
Delegations Manager -> 5
Investments Manager -> 6
How to Pass the deployData
In this example, the Component indices are:
The deployData
to pass is composed as follows:
Use this example pattern to create your own deployData
.
Last updated