While developing my governance plugin for Aragon OSx, I ran into the max contract size limit.

To get past this issue I looked online and found the ERC-2535 Diamonds, Multi-Facet Proxy standard.

I have been playing around with this and it seems possible to make a very customizable and extendable AragonOSx plugin (for governance specifically in my case).

Just wondering if there is any issues I miss or things I should look out for when using a Diamond as Aragon plugin. If anyone has any remarks I'd love to hear them. ^-^

1 Answer 1


AragonOSx doesn't actively support the Diamond pattern as it is very complex with respect to deployment and upgrading of the different facets. Writing a UUPSUpgradeable plugin and updating it through the PluginSetupProcessor is already an advanced topic with a lot of caveats.

Although a DiamondPlugin could work, I would rather try to simplify your plugin and break it into pieces. Besides not currently mentioned in the docs, our PluginSetup's support so called helper contracts - these are basically all contracts associated with the current build of a plugin.

When updating form an old to the new plugin version, the previously nominated helpers must be provided as an input argument for the update (we make sure that this happens through hashing).

Maybe, your governance plugin can have such helpers and your setup can take care of transitioning these into a new version.

Another approach would be to start with a non-upgradeable (cloneable) plugin and don't worry about upgrading for now.

Sometimes, clever use of structs in storage can also reduce the bytecode quite significantly.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.