diff --git a/packages/contracts/docs/osx/01-how-it-works/02-framework/aragon-os-infrastructure-core-overview.drawio.svg b/packages/contracts/docs/osx/01-how-it-works/02-framework/aragon-os-infrastructure-core-overview.drawio.svg index 24a1ef73a..23595b18d 100644 --- a/packages/contracts/docs/osx/01-how-it-works/02-framework/aragon-os-infrastructure-core-overview.drawio.svg +++ b/packages/contracts/docs/osx/01-how-it-works/02-framework/aragon-os-infrastructure-core-overview.drawio.svg @@ -1,11 +1,11 @@ - + - + -
+
@@ -15,16 +15,16 @@
- + Framework - + -
+
@@ -34,16 +34,16 @@
- + Plugin Management - + -
+
@@ -53,16 +53,16 @@
- + DAO Creation - + -
+
@@ -72,16 +72,16 @@
- + Core - + -
+
@@ -91,16 +91,16 @@
- + Plugin - + -
+
IPlugin @@ -108,16 +108,16 @@
- + IPlugin - + -
+
@@ -127,16 +127,16 @@
- + DAO - + -
+
PermissionManager @@ -144,16 +144,16 @@
- + PermissionManager - + -
+
CallbackHandler @@ -161,16 +161,16 @@
- + CallbackHandler - + -
+
DaoAuthorizable @@ -178,16 +178,16 @@
- + DaoAuthorizable - + -
+
PluginRepo @@ -197,17 +197,17 @@
- + PluginRepo... - - + + -
+
versions @@ -215,16 +215,16 @@
- + versions - + -
+
PluginRepo @@ -232,17 +232,17 @@
- + PluginRepo - - + + -
+
processes @@ -250,16 +250,16 @@
- + processes - + -
+
PluginSetup @@ -269,17 +269,17 @@
- + PluginSetup... - - + + -
+
registers @@ -287,17 +287,17 @@
- + registers - - + + -
+
creates & manages @@ -305,16 +305,16 @@
- + creates & manages - + -
+
PluginSetup @@ -322,16 +322,16 @@
- + PluginSetup - + -
+
PluginRepoFactory @@ -339,17 +339,17 @@
- + PluginRepoFactory - - + + -
+
registers @@ -357,43 +357,43 @@
- + registers - - - + + + -
+
- + + + + 👷 + + - - - 👷 - -
- + 👷 - - - + + + -
+
@@ -403,18 +403,18 @@
- + Non-upgradeable - - - + + + -
+
@@ -424,18 +424,18 @@
- + Upgradeable - - - + + + -
+
DaoAuthorizable @@ -445,40 +445,40 @@
- + DaoAuthorizable... - - + + -
-
-
+
+
+
connects
- + connects - - - - - - - + + + + + + + -
+
ERC-1271 @@ -488,17 +488,17 @@
- + ERC-1271... - - + + -
+
select Plugins @@ -506,17 +506,17 @@
- + select Plugins - - + + -
+
creates @@ -524,7 +524,7 @@
- + creates @@ -532,7 +532,7 @@ -
+
@@ -542,18 +542,18 @@
- + creates - - - + + + -
+
DAOFactory @@ -561,16 +561,16 @@
- + DAOFactory - + -
+
DAORegistry @@ -578,17 +578,17 @@
- + DAORegistry - - + + -
+
creates @@ -596,158 +596,220 @@
- + creates - + + + -
+
- Upgradeability + PluginCloneable
- - Upgradeability + + PluginCloneable - + -
+
- DAOstar.one + Plugin
- - DAOstar.one + + Plugin - - - + -
+
- PluginCloneable + PluginUUPS Upgradeable
- - PluginCloneable + + PluginUUPS Upgradeab... - + + -
-
-
- Plugin +
+
+
+ + Creation +
- - Plugin + + Creation - + + -
-
-
- PluginUUPS Upgradeable +
+
+
+ + Curation +
- - PluginUUPS Upgradeab... + + Curation - - + + -
+
- Creation + Setup
- - Creation + + Setup - - + -
-
-
- - Curation - +
+
+
+ IMembeship
- - Curation + + IMembeship + + + + + + + +
+
+
+ IProposal +
+
+
+
+ + IProposal
- - + -
+
+
+
+ ERC-4824 +
+ DAO Interface +
+
+
+ + + ERC-4824... + + + + + + + + + + +
+
+
+ provides +
+ data +
+
+
+
+ + provides... + +
+
+ + + + + +
- Setup + Upgradeable
- - Setup + + Upgradeable
+ diff --git a/packages/contracts/docs/osx/02-how-to-guides/02-plugin-development/03-non-upgradeable-plugin/03-setup.md b/packages/contracts/docs/osx/02-how-to-guides/02-plugin-development/03-non-upgradeable-plugin/03-setup.md index 9d44bcb1e..d44b2152d 100644 --- a/packages/contracts/docs/osx/02-how-to-guides/02-plugin-development/03-non-upgradeable-plugin/03-setup.md +++ b/packages/contracts/docs/osx/02-how-to-guides/02-plugin-development/03-non-upgradeable-plugin/03-setup.md @@ -46,11 +46,16 @@ import {SimpleAdmin} from './SimpleAdmin.sol'; contract SimpleAdminSetup is PluginSetup { /// @notice The address of `SimpleAdmin` plugin logic contract to be cloned. - address private immutable implementation; + address private immutable simpleAdminImplementation; /// @notice The constructor setting the `SimpleAdmin` implementation contract to clone from. constructor() { - implementation = address(new SimpleAdmin()); + simpleAdminImplementation = address(new SimpleAdmin()); + } + + /// @inheritdoc IPluginSetup + function implementation() external view returns (address) { + return simpleAdminImplementation; } } ``` @@ -63,15 +68,15 @@ The skeleton of our `SimpleAdminSetup` contract inheriting from `PluginSetup` lo SimpleAdminSetup: The Sekeleton ```solidity -import {PermissionLib} from '@aragon/osx/core/permissions/PermissionsLib.sol'; +import {PermissionLib} from '@aragon/osx/core/permission/PermissionsLib.sol'; contract SimpleAdminSetup is PluginSetup { /// @notice The address of `SimpleAdmin` plugin logic contract to be cloned. - address private immutable implementation; + address private immutable simpleAdminImplementation; /// @notice The constructor setting the `SimpleAdmin` implementation contract to clone from. constructor() { - implementation = address(new SimpleAdmin()); + simpleAdminImplementation = address(new SimpleAdmin()); } /// @inheritdoc IPluginSetup @@ -91,16 +96,16 @@ contract SimpleAdminSetup is PluginSetup { } /// @inheritdoc IPluginSetup - function getImplementationAddress() external view returns (address) { - return implementation; + function implementation() external view returns (address) { + return simpleAdminImplementation; } } ``` -We have a constructor storing the implementation contract instantiated via `new` in the private immutable variable `implementation` to save gas and a `getImplementationAddress` function to return it. -Next, we have to external functions, `prepareInstallation` and `prepareUninstallation` that we are going to implement. +We have a constructor storing the implementation contract instantiated via `new` in the private immutable variable `implementation` to save gas and a `implementation` function to return it. +Next, we have two external functions, `prepareInstallation` and `prepareUninstallation` that we are going to implement. ### Implementing the `prepareInstallation` function @@ -123,7 +128,7 @@ function prepareInstallation( plugin = implementation.clone(); // Initialize cloned plugin contract. - Admin(plugin).initialize(IDAO(_dao), admin); + SimpleAdmin(plugin).initialize(IDAO(_dao), admin); // Prepare permissions PermissionLib.MultiTargetPermission[] @@ -135,7 +140,7 @@ function prepareInstallation( where: plugin, who: admin, condition: PermissionLib.NO_CONDITION, - permissionId: Admin(plugin).EXECUTE_PROPOSAL_PERMISSION_ID() + permissionId: SimpleAdmin(plugin).EXECUTE_PROPOSAL_PERMISSION_ID() }); // Grant the `EXECUTE_PERMISSION` on the DAO to the plugin. @@ -195,7 +200,7 @@ function prepareUninstallation( ) external view returns (PermissionLib.MultiTargetPermission[] memory permissions) { // Collect addresses address plugin = _payload.plugin; - address admin = Admin(plugin).admin(); + address admin = SimpleAdmin(plugin).admin(); // Prepare permissions permissions = new PermissionLib.MultiTargetPermission[](2); @@ -205,7 +210,7 @@ function prepareUninstallation( where: plugin, who: admin, condition: PermissionLib.NO_CONDITION, - permissionId: Admin(plugin).ADMIN_EXECUTE_PERMISSION_ID() + permissionId: SimpleAdmin(plugin).ADMIN_EXECUTE_PERMISSION_ID() }); permissions[1] = PermissionLib.MultiTargetPermission({ @@ -233,7 +238,7 @@ pragma solidity 0.8.17; import {Clones} from '@openzeppelin/contracts/proxy/Clones.sol'; -import {PermissionLib} from '@aragon/osx/core/permissions/PermissionsLib.sol'; +import {PermissionLib} from '@aragon/osx/core/permission/PermissionsLib.sol'; import {PluginSetup, IPluginSetup} from '@aragon/osx/framework/plugin/setup/PluginSetup.sol'; import {SimpleAdmin} from './SimpleAdmin.sol'; @@ -241,7 +246,7 @@ contract SimpleAdminSetup is PluginSetup { using Clones for address; /// @notice The address of `SimpleAdmin` plugin logic contract to be cloned. - address private immutable implementation; + address private immutable simpleAdminImplementation; /// @notice Thrown if the admin address is zero. /// @param admin The admin address. @@ -249,7 +254,7 @@ contract SimpleAdminSetup is PluginSetup { /// @notice The constructor setting the `Admin` implementation contract to clone from. constructor() { - implementation = address(new SimpleAdmin()); + simpleAdminImplementation = address(new SimpleAdmin()); } /// @inheritdoc IPluginSetup @@ -280,7 +285,7 @@ contract SimpleAdminSetup is PluginSetup { where: plugin, who: admin, condition: PermissionLib.NO_CONDITION, - permissionId: Admin(plugin).EXECUTE_PROPOSAL_PERMISSION_ID() + permissionId: SimpleAdmin(plugin).EXECUTE_PROPOSAL_PERMISSION_ID() }); // Grant the `EXECUTE_PERMISSION` on the DAO to the plugin. @@ -325,8 +330,8 @@ contract SimpleAdminSetup is PluginSetup { } /// @inheritdoc IPluginSetup - function getImplementationAddress() external view returns (address) { - return implementation; + function implementation() external view returns (address) { + return simpleAdminImplementation; } } ``` diff --git a/packages/contracts/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/03-setup.md b/packages/contracts/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/03-setup.md index 8fe7fbfb0..92b69e693 100644 --- a/packages/contracts/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/03-setup.md +++ b/packages/contracts/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/03-setup.md @@ -40,13 +40,17 @@ For the first version, the setup is very similar to the [setup example for the n SimpleStorageBuild0Setup ```solidity -import {PermissionLib} from '@aragon/osx/core/permissions/PermissionsLib.sol'; +import {PermissionLib} from '@aragon/osx/core/permission/PermissionsLib.sol'; import {PluginSetup, IPluginSetup} from '@aragon/osx/framework/plugin/setup/PluginSetup.sol'; import {SimpleStorageBuild0} from './SimpleStorageBuild0.sol'; /// @title SimpleStorageSetup v1.0 contract SimpleStorageBuild0Setup is PluginSetup { - constructor() PluginSetup(address(new SimpleStorageBuild0)) {} + address private immutable simpleStorageImplementation; + + constructor() { + simpleStorageImplementation = address(new SimpleStorageBuild0()); + } /// @inheritdoc IPluginSetup function prepareInstallation( @@ -56,7 +60,7 @@ contract SimpleStorageBuild0Setup is PluginSetup { uint256 number = abi.decode(_data, (uint256)); plugin = createERC1967Proxy( - implementation, + simpleStorageImplementation, abi.encodeWithSelector(SimpleStorageBuild0.initializeBuild0.selector, _dao, number) ); @@ -146,7 +150,11 @@ Additionally, since we want to support updates from build 0 to build 1, we must ```solidity /// @title SimpleStorageSetup v1.1 contract SimpleStorageBuild1Setup is PluginSetup { - constructor() PluginSetup(address(new SimpleStorageBuild1)) {} + address private immutable simpleStorageImplementation; + + constructor() { + simpleStorageImplementation = address(new SimpleStorageBuild1()); + } /// @inheritdoc IPluginSetup function prepareInstallation( @@ -156,7 +164,7 @@ contract SimpleStorageBuild1Setup is PluginSetup { (uint256 _number, address _account) = abi.decode(_data, (uint256, address)); plugin = createERC1967Proxy( - implementation, + simpleStorageImplementation, abi.encodeWithSelector(SimpleStorageBuild1.initializeBuild1.selector, _dao, _number, _account) ); @@ -291,7 +299,11 @@ contract SimpleStorageBuild2 is PluginUUPSUpgradeable { ```solidity /// @title SimpleStorageSetup v1.2 contract SimpleStorageBuild2Setup is PluginSetup { - constructor() PluginSetup(address(new SimpleStorageBuild2)) {} + address private immutable simpleStorageImplementation; + + constructor() { + simpleStorageImplementation = address(new SimpleStorageBuild2()); + } /// @inheritdoc IPluginSetup function prepareInstallation( @@ -301,7 +313,7 @@ contract SimpleStorageBuild2Setup is PluginSetup { (uint256 _number, address _account) = abi.decode(_data, (uint256, address)); plugin = createERC1967Proxy( - implementation, + simpleStorageImplementation, abi.encodeWithSelector(SimpleStorageBuild2.initializeBuild2.selector, _dao, _number, _account) ); diff --git a/packages/contracts/docs/osx/02-how-to-guides/02-plugin-development/index.md b/packages/contracts/docs/osx/02-how-to-guides/02-plugin-development/index.md index 0b7edfff7..de435a988 100644 --- a/packages/contracts/docs/osx/02-how-to-guides/02-plugin-development/index.md +++ b/packages/contracts/docs/osx/02-how-to-guides/02-plugin-development/index.md @@ -39,7 +39,7 @@ Next, you write a plugin setup contract: // SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.8.17; -import {PermissionLib} from '@aragon/osx/core/permissions/PermissionsLib.sol'; +import {PermissionLib} from '@aragon/osx/core/permission/PermissionsLib.sol'; import {PluginSetup} from '@aragon/osx/framework/plugin/setup/PluginSetup.sol'; import './MyPlugin.sol'; @@ -58,7 +58,7 @@ contract GreeterSetup is PluginSetup { (_dao, _payload); } - function getImplementationAddress() external view returns (address) {} + function implementation() external view returns (address) {} } ``` diff --git a/packages/contracts/docs/osx/index.md b/packages/contracts/docs/osx/index.md index 4c1cda086..0bc6b4b49 100644 --- a/packages/contracts/docs/osx/index.md +++ b/packages/contracts/docs/osx/index.md @@ -1,8 +1,10 @@ --- title: Aragon OSx +sidebar_label: Intro +sidebar_position: 0 --- -## The Contracts behind Aragon OSx +## The Contracts Behind the Protocol The Aragon OSx protocol allows you to customize your DAO by managing contract permissions or developing your own plugin. To **add the contracts to your project**, open a terminal in your projects root folder and type