I want to create my own plugin for the aragonOSx framework, but I'm unsure whether I need to submit my plugin into Aragon's
pluginRepo or if I can use a developed plugin from a personal
You can build your own custom plugin!
- you'll want to build your
Plugincontract, which contains the logic of your plugin + build a
PluginSetupcontract which contains all the instructions regarding installing, uninstalling, updating a plugin for a DAO.
- then, you want to use the
createPluginRepoWithFirstVersionfunction from the
PluginRepoFactory.solcontract and pass it the address of your
PluginSetup.solcontract. And you're done - your plugin will be published in the aragonOSx protocol for anyone to use!!
Here's an example of an Aragon
- Code: https://github.com/aragon/core/tree/develop/packages/contracts/contracts/voting/multisig
- Published plugin on Etherscan: https://goerli.etherscan.io/address/0x2F41BD1405E066749FFC719468ac8920BA815be1
For some additional context on publishing:
The way it works is the
PluginSetup contract holds a connection to your
Plugin contract and any other
Helper contracts. It is the one who sets the permissions for everything to work and presents the instructions on how to install this version of your
Plugin in your DAO.
So, what you're doing when you call on the
createPluginRepoWithFirstVersion from the
PluginRepoFactory.sol contract is that you're generating a
PluginRepo for your plugin with this specific
PluginSetup as your first version. That way, when you want to update your plugin, you can simply update the version in your
PluginRepo contract and submit a new
PluginRepo is your homebase for all versions of a given plugin and is an array filled with previous
PluginSetup contract addresses from previous versions.
For additional context if needed:
- Here is the
PluginRepoFactory- which creates the first version of a plugin and adds it to the
- This is how the
- Once the
PluginRepowith the initial version in it is created, subsequent versions are released through the
PluginRepocontract for that plugin, which is registered in the
PluginRepoRegistryafter you call on the