diff --git a/docs/osx/01-get-started.mdx b/docs/osx/01-get-started.mdx
deleted file mode 100644
index c6a828a9..00000000
--- a/docs/osx/01-get-started.mdx
+++ /dev/null
@@ -1,10 +0,0 @@
----
-title: ''
-sidebar_label: Get Started
-sidebar_position: 1
-hide_table_of_contents: true
----
-
-import GetStarted from '../../src/pages/get-started.tsx';
-
-
diff --git a/docs/osx/01-how-it-works/01-core/03-plugins/index.md b/docs/osx/01-how-it-works/01-core/03-plugins/index.md
index 36bbccf2..cfeadcd1 100644
--- a/docs/osx/01-how-it-works/01-core/03-plugins/index.md
+++ b/docs/osx/01-how-it-works/01-core/03-plugins/index.md
@@ -24,7 +24,7 @@ Whenever a DAO installs a plugin, an instance of that plugin's base template is
Each instance of a plugin is installed to a DAO through the granting of permissions.
:::info
-Learn more about the different [plugin types](../../../02-how-to-guides/02-plugin-development/02-plugin-types.md) in our How-to guide.
+Lern more about the different [plugin types](../../../02-how-to-guides/02-plugin-development/02-plugin-types.md) in our How-to guide.
:::
This raises questions on how the DAO manages plugins and who actually owns plugins.
@@ -42,7 +42,7 @@ A DAO manages plugins and interactions between them. In more detail, its permiss
![Schematic depiction of the interaction between the DAO, the PermissionManager, and a Plugin contract.](../dao-plugin.drawio.svg)
- An exemplary DAO setup showing interactions between the three core contract pieces triggered by different user groups: The DAO
contract in blue containing the PermissionManager
in red, respectively, as well as two Plugin
contracts in green.
+ An examplary DAO setup showing interactions between the three core contract pieces triggered by different user groups: The DAO
contract in blue containing the PermissionManager
in red, respectively, as well as two Plugin
contracts in green.
Function calls are visualized as black arrows and require permission checks (red, dashed arrow). In this example, the permission manager determines whether the token voting plugin can execute actions on the DAO, a member can change its settings, or if a DeFi-related plugin is allowed to invest in a certain, external contract.
diff --git a/docs/osx/01-how-it-works/01-core/index.md b/docs/osx/01-how-it-works/01-core/index.md
index f80ea57f..e5d42bef 100644
--- a/docs/osx/01-how-it-works/01-core/index.md
+++ b/docs/osx/01-how-it-works/01-core/index.md
@@ -1,6 +1,5 @@
---
title: The Smart Contracts behind DAOs
-sidebar_label: Smart Contracts
---
## The Contracts Constituting Your DAO
@@ -32,7 +31,7 @@ The underlying smart contracts constitute **the core contracts** of the Aragon O
![Schematic depiction of the interaction between the DAO, the PermissionManager, and a Plugin contract.](dao-plugin.drawio.svg)
- An exemplary DAO setup showing interactions between the three core contract pieces triggered by different user groups: The DAO
contract in blue containing the PermissionManager
in red, respectively, as well as two Plugin
contracts in green.
+ An examplary DAO setup showing interactions between the three core contract pieces triggered by different user groups: The DAO
contract in blue containing the PermissionManager
in red, respectively, as well as two Plugin
contracts in green.
Function calls are visualized as black arrows and require permission checks (red, dashed arrow). In this example, the permission manager determines whether the token voting plugin can execute actions on the DAO, a member can change its settings, or if a DeFi-related plugin is allowed to invest in a certain, external contract.
diff --git a/docs/osx/01-how-it-works/02-framework/01-dao-creation/index.md b/docs/osx/01-how-it-works/02-framework/01-dao-creation/index.md
index 32f8dbd6..8fcbb41d 100644
--- a/docs/osx/01-how-it-works/02-framework/01-dao-creation/index.md
+++ b/docs/osx/01-how-it-works/02-framework/01-dao-creation/index.md
@@ -24,7 +24,7 @@ as well as an array of `PluginSettings` containing `PluginSetup` contract refere
The `DAOFactory` create the `DAO` in four steps and interacts with the `DAORegistry` and being also part of the Aragon OSx framework:
-1. Creates a new DAO by deploying an [ERC-1967](https://eips.ethereum.org/EIPS/eip-1967) proxy pointing to the latest Aragon OSx `DAO` implementation and becomes the initial owner.
+1. Creates a new DAO by deploying an [ERC-1967](https://eips.ethereum.org/EIPS/eip-1967) proxy pointing to the latest Aragon OSx `DAO` impelementation and becomes the initial owner.
2. Registers the new contract in the [`DAORegistry`](#daoregistry).
diff --git a/docs/osx/01-how-it-works/02-framework/02-plugin-management/01-plugin-repo/index.md b/docs/osx/01-how-it-works/02-framework/02-plugin-management/01-plugin-repo/index.md
index cbea2b40..fd58973e 100644
--- a/docs/osx/01-how-it-works/02-framework/02-plugin-management/01-plugin-repo/index.md
+++ b/docs/osx/01-how-it-works/02-framework/02-plugin-management/01-plugin-repo/index.md
@@ -4,7 +4,7 @@ title: Plugin Repositories
## What are Plugin Repositories?
-Each plugin has its own Plugin Repository, unique ENS name, and on-chain repository contract, the `PluginRepo`, in which different versions of the plugin are stored for reference using version tags constituted by a **release** and **build** number.
+Each plugin has its own Plugin Repository, unique ENS name, and on-chain repository contract, the `PluginRepo`, in which different versions of the plugin are stored for reference using verstion tags constituted by a **release** and **build** number.
Different versions might contain:
@@ -19,7 +19,7 @@ Different versions might contain:
![Schematic depiction of the versioning taking place in the PluginRepoRegistry.](./plugin-repo-overview.drawio.svg)
- Overview of the plugin versioning and registry in the Aragon OSx protocol. The `PluginRepoRegistry` contract, which is a curated list of ENS named `PluginRepo` contracts, is shown on the left. Each `PluginRepo` contract maintains a list of versions of the `PluginSetup` contract (internally referencing the `Plugin` implementation contract) and the associated UI building blocks as a URI, exemplarily shown on the right.
+ Overview of the plugin versioning and registry in the Aragon OSx protocol. The `PluginRepoRegistry` contract, which is a curated list of ENS named `PluginRepo` contracts, is shown on the left. Each `PluginRepo` contract maintains a list of versions of the `PluginSetup` contract (internally referencing the `Plugin` implementation contract) and the associated UI building blocks as a URI, examplarily shown on the right.
diff --git a/docs/osx/01-how-it-works/02-framework/02-plugin-management/02-plugin-setup/01-security-risk-mitigation.md b/docs/osx/01-how-it-works/02-framework/02-plugin-management/02-plugin-setup/01-security-risk-mitigation.md
index 1b3433ee..33015ebe 100644
--- a/docs/osx/01-how-it-works/02-framework/02-plugin-management/02-plugin-setup/01-security-risk-mitigation.md
+++ b/docs/osx/01-how-it-works/02-framework/02-plugin-management/02-plugin-setup/01-security-risk-mitigation.md
@@ -22,7 +22,7 @@ that might be carelessly or intentionally caused, a malicious plugin can hide **
#### Backdoors
-- [metamorphic contracts](https://a16zcrypto.com/metamorphic-smart-contract-detector-tool/) (contracts, that can be redeployed with new code to the same address)
+- [metamorpic contracts](https://a16zcrypto.com/metamorphic-smart-contract-detector-tool/) (contracts, that can be redeployed with new code to the same address)
- malicious repurposing of storage in an update of an upgradeable plugin contract
diff --git a/docs/osx/01-how-it-works/02-framework/02-plugin-management/02-plugin-setup/index.md b/docs/osx/01-how-it-works/02-framework/02-plugin-management/02-plugin-setup/index.md
index 073261f7..330b81fa 100644
--- a/docs/osx/01-how-it-works/02-framework/02-plugin-management/02-plugin-setup/index.md
+++ b/docs/osx/01-how-it-works/02-framework/02-plugin-management/02-plugin-setup/index.md
@@ -15,7 +15,7 @@ How this works:
- Although a Plugin is composed by the `Plugin` and `PluginSetup` contracts, the Aragon OSx protocol only knows of the `PluginSetup` contract.
- Since the `PluginSetup` contract is the one containing the plugin installation instructions, it is the one in charge of deploying the Plugin instance. Each plugin instance is specific to that DAO, deployed with its own unique parameters. You can review how to build a `PluginSetup` contract [here](../../../../02-how-to-guides/02-plugin-development/index.md).
-- The `PluginSetup` contract then interacts with the Aragon OSx framework's `PluginSetupProcessor` contract, which is in charge of applying the installation, update, or uninstallation of a plugin into a DAO.
+- The `PluginSetup` contract then interacts with the Aragon OSx framework's `PluginSetupProcessor` contract, which is in charge of applying the installion, update, or uninstallation of a plugin into a DAO.
- Publishing a Plugin into the Aragon OSx protocol is done through creating the first version of the plugin's `PluginRepo`. The plugin's `PluginRepo` instance stores all plugin versions. You can read more about that [here](../../../../02-how-to-guides/02-plugin-development/07-publication/index.md).
- Except for the gas costs required, plugins are completely free to install, unless decided otherwise by the developer.
@@ -44,7 +44,7 @@ The preparation of a `PluginSetup` contract proceeds as follows:
- deployment of new contracts
- initialization of new storage variables
- - deprecating/decommissioning outdated (helper) contracts
+ - deprecating/decomissioning outdated (helper) contracts
- governance settings or other attributes
- ...
diff --git a/docs/osx/01-how-it-works/02-framework/index.md b/docs/osx/01-how-it-works/02-framework/index.md
index 042ffa0e..adc424a2 100644
--- a/docs/osx/01-how-it-works/02-framework/index.md
+++ b/docs/osx/01-how-it-works/02-framework/index.md
@@ -1,6 +1,5 @@
---
title: Framework - How Everything Connects
-sidebar_label: Framework
---
## The Infrastructure Running the Aragon OSx Protocol
diff --git a/docs/osx/01-how-it-works/_category_.yml b/docs/osx/01-how-it-works/_category_.yml
deleted file mode 100644
index 93cea945..00000000
--- a/docs/osx/01-how-it-works/_category_.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-collapsible: true
-collapsed: false
diff --git a/docs/osx/02-how-to-guides/01-dao/index.md b/docs/osx/02-how-to-guides/01-dao/index.md
index f174353e..e50ec109 100644
--- a/docs/osx/02-how-to-guides/01-dao/index.md
+++ b/docs/osx/02-how-to-guides/01-dao/index.md
@@ -1,5 +1,5 @@
---
-title: Operating a DAO
+title: How to Operate a DAO
---
DAOs are decentralized autonomous organizations. They are a group of people managing on-chain assets through a set of smart contracts.
diff --git a/docs/osx/02-how-to-guides/02-plugin-development/02-plugin-types.md b/docs/osx/02-how-to-guides/02-plugin-development/02-plugin-types.md
index 86cd6d8e..eb2d3191 100644
--- a/docs/osx/02-how-to-guides/02-plugin-development/02-plugin-types.md
+++ b/docs/osx/02-how-to-guides/02-plugin-development/02-plugin-types.md
@@ -49,11 +49,11 @@ Some key things to keep in mind:
The following table compares the different deployment methods with their benefits and drawbacks:
-| | `new` Instantiation | Minimal Proxy (Clones) | Transparent Proxy | UUPS Proxy |
-| -------------- | --------------------------------------------- | ------------------------------------------------- | ------------------------------------------------ | --------------------------------------------- |
-| upgradeability | no | no | yes | yes |
-| gas costs | high | very low | moderate | low |
-| difficulty | low | low | high | high |
+| | `new` Instantiation | Minimal Proxy (Clones) | Transparent Proxy | UUPS Proxy |
+| ------------- | --------------------------------------------- | ------------------------------------------------- | ------------------------------------------------ | --------------------------------------------- |
+| upgradability | no | no | yes | yes |
+| gas costs | high | very low | moderate | low |
+| difficulty | low | low | high | high |
Accordingly, we recommend to use [minimal proxies (ERC-1167)](https://eips.ethereum.org/EIPS/eip-1167) for non-upgradeable and [UUPS proxies (1822)](https://eips.ethereum.org/EIPS/eip-1822) for upgradeable plugin.
To help you with developing and deploying your plugin within the Aragon infrastructure, we provide the following implementation that you can inherit from:
diff --git a/docs/osx/02-how-to-guides/02-plugin-development/03-non-upgradeable-plugin/01-initialization.md b/docs/osx/02-how-to-guides/02-plugin-development/03-non-upgradeable-plugin/01-initialization.md
index ac83e5cf..ea62070a 100644
--- a/docs/osx/02-how-to-guides/02-plugin-development/03-non-upgradeable-plugin/01-initialization.md
+++ b/docs/osx/02-how-to-guides/02-plugin-development/03-non-upgradeable-plugin/01-initialization.md
@@ -74,7 +74,7 @@ contract SimpleAdmin is PluginCloneable {
}
```
-We must protect it from being called multiple times by using [OpenZeppelin's `initializer` modifier made available through `Initializable`](https://docs.openzeppelin.com/contracts/4.x/api/proxy#Initializable) and call the internal function `__PluginCloneable_init(IDAO _dao)` available through the `PluginCloneable` base contract to store the `IDAO _dao` reference in the right place.
+We must protect it from being called multiple times by using [OpenZeppelin's `initializer` modifier made available through `Initalizable`](https://docs.openzeppelin.com/contracts/4.x/api/proxy#Initializable) and call the internal function `__PluginCloneable_init(IDAO _dao)` available through the `PluginCloneable` base contract to store the `IDAO _dao` reference in the right place.
:::caution
If you forget calling `__PluginCloneable_init(_dao)` inside your `initialize` function, your plugin won't be associated with a DAO and cannot use the DAO's `PermissionManager`.
diff --git a/docs/osx/02-how-to-guides/02-plugin-development/03-non-upgradeable-plugin/02-implementation.md b/docs/osx/02-how-to-guides/02-plugin-development/03-non-upgradeable-plugin/02-implementation.md
index f8444bd1..d0b8af77 100644
--- a/docs/osx/02-how-to-guides/02-plugin-development/03-non-upgradeable-plugin/02-implementation.md
+++ b/docs/osx/02-how-to-guides/02-plugin-development/03-non-upgradeable-plugin/02-implementation.md
@@ -42,7 +42,7 @@ Setting this permission is key because it ensures only signers who have been gra
Now that we have created the permission, we will use it to protect the implementation. We want to make sure only the authorized callers holding the `ADMIN_EXECUTE_PERMISSION`, can use the function.
-Because we have initialized the [`PluginCloneable` base contract](https://github.com/aragon/osx-commons/blob/develop/contracts/src/plugin/PluginCloneable.sol), we can now use its features, i.e., the [`auth` modifier](https://github.com/aragon/osx-commons/blob/1cf46ff15dbda8481f9ee37558e7ea8b257d51f2/contracts/src/permission/auth/DaoAuthorizable.sol#L30-L35) provided through the `DaoAuthorizable` base class. The `auth('ADMIN_EXECUTE_PERMISSION')` returns an error if the address calling on the function has not been granted that permission, effectively protecting from malicious use cases.
+Because we have initialized the [`PluginClonable` base contract](https://github.com/aragon/osx-commons/blob/develop/contracts/src/plugin/PluginCloneable.sol), we can now use its features, i.e., the [`auth` modifier](https://github.com/aragon/osx-commons/blob/1cf46ff15dbda8481f9ee37558e7ea8b257d51f2/contracts/src/permission/auth/DaoAuthorizable.sol#L30-L35) provided through the `DaoAuthorizable` base class. The `auth('ADMIN_EXECUTE_PERMISSION')` returns an error if the address calling on the function has not been granted that permission, effectively protecting from malicious use cases.
Later, we will also use the [`dao()` getter function from the base contract](https://github.com/aragon/osx-commons/blob/1cf46ff15dbda8481f9ee37558e7ea8b257d51f2/contracts/src/permission/auth/DaoAuthorizable.sol#L24-L28), which returns the associated DAO for that plugin.
diff --git a/docs/osx/02-how-to-guides/02-plugin-development/03-non-upgradeable-plugin/03-setup.md b/docs/osx/02-how-to-guides/02-plugin-development/03-non-upgradeable-plugin/03-setup.md
index 33940074..12e45a02 100644
--- a/docs/osx/02-how-to-guides/02-plugin-development/03-non-upgradeable-plugin/03-setup.md
+++ b/docs/osx/02-how-to-guides/02-plugin-development/03-non-upgradeable-plugin/03-setup.md
@@ -6,7 +6,7 @@ title: Plugin Setup Contract
The Plugin Setup contract is the contract defining the instructions for installing, uninstalling, or upgrading plugins into DAOs. This contract prepares the permission granting or revoking that needs to happen in order for plugins to be able to perform actions on behalf of the DAO.
-You need it for the plugin to be installed into the DAO.
+You need it for the plugin to be installed intto the DAO.
### 1. Finish the Plugin contract
@@ -116,7 +116,7 @@ The `prepareInstallation()` function should take in two parameters:
1. the `DAO` it prepares the installation for, and
2. the `_data` parameter containing all the information needed for this function to work properly, in this case, the address we want to set as admin of our DAO.
-Hence, the first thing we should do when working on the `prepareInstallation()` function is decode the information from the `_data` parameter. We also want to check that the address is not accidentally set to `address(0)`, which would freeze the DAO forever.
+Hence, the first thing we should do when working on the `prepareInsallation()` function is decode the information from the `_data` parameter. We also want to check that the address is not accidentally set to `address(0)`, which would freeze the DAO forever.
```solidity
import {Clones} from '@openzeppelin/contracts/proxy/Clones.sol';
diff --git a/docs/osx/02-how-to-guides/02-plugin-development/03-non-upgradeable-plugin/index.md b/docs/osx/02-how-to-guides/02-plugin-development/03-non-upgradeable-plugin/index.md
index 3672b5ac..bf7da198 100644
--- a/docs/osx/02-how-to-guides/02-plugin-development/03-non-upgradeable-plugin/index.md
+++ b/docs/osx/02-how-to-guides/02-plugin-development/03-non-upgradeable-plugin/index.md
@@ -14,7 +14,7 @@ Some observations:
Before moving on with the Guide, make sure you've read our documentation on [Choosing the Best Type for Your Plugin](../02-plugin-types.md) to make sure you're selecting the right type of contract for your Plugin.
-## Building a Non-Upgradable Plugin
+## Building a Non-Upgradeble Plugin
We will build a plugin which returns "Hello world!" and the amount of times the function has been called.
@@ -43,7 +43,7 @@ sudo apt-get install -y nodejs
[Here's a tutorial](https://hardhat.org/tutorial/setting-up-the-environment) on installing this if you haven't done so already.
-2. Next up, we want to create a Hardhat project in our terminal. This is the Solidity framework we'll use to get our project up and running.
+2. Next up, we want to create a Hardhat project in our terminal. This is the Solidity framework we'll use to get our project up and runing.
```bash
npm init
diff --git a/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/01-initialization.md b/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/01-initialization.md
index 1b64cdcb..c843ec27 100644
--- a/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/01-initialization.md
+++ b/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/01-initialization.md
@@ -1,12 +1,12 @@
---
-title: Initialization
+title: Intialization
---
## How to Initialize Upgradeable Plugins
To deploy your implementation contract via the [UUPS pattern (ERC-1822)](https://eips.ethereum.org/EIPS/eip-1822), you inherit from the `PluginUUPSUpgradeable` contract.
-We must protect it from being set up multiple times by using [OpenZeppelin's `initializer` modifier made available through `Initializable`](https://docs.openzeppelin.com/contracts/4.x/api/proxy#Initializable). In order to do this, we will call the internal function `__PluginUUPSUpgradeable_init(IDAO _dao)` function available through the `PluginUUPSUpgradeable` base contract to store the `IDAO _dao` reference in the right place.
+We must protect it from being set up multiple times by using [OpenZeppelin's `initializer` modifier made available through `Initalizable`](https://docs.openzeppelin.com/contracts/4.x/api/proxy#Initializable). In order to do this, we will call the internal function `__PluginUUPSUpgradeable_init(IDAO _dao)` function available through the `PluginUUPSUpgradeable` base contract to store the `IDAO _dao` reference in the right place.
:::note
This has to be called - otherwise, anyone else could call the plugin's initialization with whatever params they wanted.
diff --git a/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/03-setup.md b/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/03-setup.md
index b90f1812..4f3fc186 100644
--- a/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/03-setup.md
+++ b/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/03-setup.md
@@ -47,7 +47,7 @@ The `prepareInstallation()` function takes in two parameters:
1. the `DAO` it should prepare the installation for, and
2. the `_data` parameter containing all the information needed for this function to work properly, encoded as a `bytes memory`. In this case, we get the number we want to store.
-Hence, the first thing we should do when working on the `prepareInstallation()` function is decode the information from the `_data` parameter.
+Hence, the first thing we should do when working on the `prepareInsallation()` function is decode the information from the `_data` parameter.
Similarly, the `prepareUninstallation()` function takes in a `payload`.
```solidity
@@ -131,7 +131,7 @@ Firstly, we'll make sure our preferred network is well setup within our `hardhat
```js
import '@nomicfoundation/hardhat-toolbox';
-// To find your Alchemy key, go to https://dashboard.alchemy.com/. Infura or any other provider would work here as well.
+// To find your Alchemy key, go to https://dashboard.alchemy.com/. Infure or any other provider would work here as well.
const goerliAlchemyKey = 'add-your-own-alchemy-key';
// To find a private key, go to your wallet of choice and export a private key. Remember this must be kept secret at all times.
const privateKeyGoerli = 'add-your-account-private-key';
@@ -177,8 +177,7 @@ async function main() {
console.log('Deploying contracts with the account:', deployer.address);
console.log('Account balance:', (await deployer.getBalance()).toString());
- const getSimpleStorageSetup =
- await ethers.getContractFactory('SimpleStorageSetup');
+ const getSimpleStorageSetup = await ethers.getContractFactory('SimpleStorageSetup');
const SimpleStorageSetup = await SimpleStorageSetup.deploy();
await SimpleStorageSetup.deployed();
diff --git a/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/04-subsequent-builds.md b/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/04-subsequent-builds.md
index 3568eaaa..bd2d9bcd 100644
--- a/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/04-subsequent-builds.md
+++ b/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/04-subsequent-builds.md
@@ -21,7 +21,7 @@ Make sure you have at least one build already deployed and published into the Ar
In this second build implementation we want to update the functionality of our plugin - in this case, we want to update the storage of our plugin with new values. Specifically, we will add a second storage variable `address public account;`. Additional to the `initializeFromBuild2` function, we also want to add a second setter function `storeAccount` that uses the same permission as `storeNumber`.
-As you can see, we're still inheriting from the `PluginUUPSUpgradeable` contract and simply overriding some implementation from the previous build. The idea is that when someone upgrades the plugin and calls on these functions, they'll use this new upgraded implementation, rather than the older one.
+As you can see, we're still inheritting from the `PluginUUPSUpgradeable` contract and simply overriding some implementation from the previous build. The idea is that when someone upgrades the plugin and calls on these functions, they'll use this new upgraded implementation, rather than the older one.
```solidity
import {PluginUUPSUpgradeable, IDAO} '@aragon/osx/core/plugin/PluginUUPSUpgradeable.sol';
@@ -60,7 +60,7 @@ contract SimpleStorageBuild2 is PluginUUPSUpgradeable {
}
```
-Builds that you publish don't necessarily need to introduce new storage variables of your contracts and don't necessarily need to change the storage. To read more about Upgradeability, check out [OpenZeppelin's UUPSUpgradeability implementation here](https://docs.openzeppelin.com/contracts/4.x/api/proxy#UUPSUpgradeable).
+Builds that you publish don't necessarily need to introduce new storage varaibles of your contracts and don't necessarily need to change the storage. To read more about Upgradeability, check out [OpenZeppelin's UUPSUpgradeability implementation here](https://docs.openzeppelin.com/contracts/4.x/api/proxy#UUPSUpgradeable).
:::note
Note that because these contracts are Upgradeable, keeping storage gaps `uint256 [50] __gap;` in dependencies is a must in order to avoid storage corruption. To learn more about storage gaps, review OpenZeppelin's documentation [here](https://docs.openzeppelin.com/upgrades-plugins/1.x/writing-upgradeable#storage-gaps).
diff --git a/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/05-updating-versions.md b/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/05-updating-versions.md
index c21935e6..e10e3b44 100644
--- a/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/05-updating-versions.md
+++ b/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/05-updating-versions.md
@@ -146,7 +146,7 @@ contract SimpleStorageBuild2Setup is PluginSetup {
}
```
-The key thing to review in this new Plugin Setup contract is its `prepareUpdate()` function. The function only contains a condition checking from which build number the update is transitioning to build `2`. Here, it is the build number `1` as this is the only update path we support. Inside, we decode the `address _account` input argument provided with `bytes _date` and pass it to the `initializeFromBuild1` function taking care of initializing the storage that was added in this build.
+The key thing to review in this new Plugin Setup contract is its `prepareUpdate()` function. The function only contains a condition checking from which build number the update is transitioning to build `2`. Here, it is the build number `1` as this is the only update path we support. Inside, we decode the `address _account` input argument provided with `bytes _date` and pass it to the `initializeFromBuild1` function taking care of intializing the storage that was added in this build.
### 3. Future builds
@@ -226,7 +226,7 @@ contract SimpleStorageBuild3 is PluginUUPSUpgradeable {
-With each new build implementation, we will need to update the Plugin Setup contract to be able to update to that new version. We do this through updating the `prepareUpdate()` function to support any new features that need to be set up.
+With each new build implementation, we will need to udate the Plugin Setup contract to be able to update to that new version. We do this through updating the `prepareUpdate()` function to support any new features that need to be set up.
Third plugin setup example, modifying prepareUpdate
function
@@ -353,8 +353,8 @@ contract SimpleStorageBuild3Setup is PluginSetup {
In this case, the `prepareUpdate()` function only contains a condition checking from which build number the update is transitioning to build 2. Here, we can update from build 0 or build 1 and different operations must happen for each case to transition to `SimpleAdminBuild3`.
-In the first case, `initializeFromBuild1` is called taking care of initializing `address _account` that was added in build 1 and emitting the events added in build 2.
+In the first case, `initializeFromBuild1` is called taking care of intializing `address _account` that was added in build 1 and emitting the events added in build 2.
-In the second case, `initializeFromBuild2` is called taking care of initializing the build. Here, only the two events will be emitted.
+In the second case, `initializeFromBuild2` is called taking care of intializing the build. Here, only the two events will be emitted.
Lastly, the `prepareUpdate()` function takes care of modifying the permissions by revoking the `STORE_PERMISSION_ID` and granting the more specific `STORE_NUMBER_PERMISSION_ID` and `STORE_ACCOUNT)PERMISSION_ID` permissions, that are also granted if build 2 is freshly installed. This must happen for both update paths so this code is outside the `if` statements.
diff --git a/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/index.md b/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/index.md
index 7c8ba89d..37ca2ad3 100644
--- a/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/index.md
+++ b/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/index.md
@@ -18,7 +18,7 @@ Although we've abstracted away most of the complications of the upgrade process
- You have read about the different [plugin types](../02-plugin-types.md) and decided to develop an upgradeable plugin being deployed via the [UUPS pattern (ERC-1822)](https://eips.ethereum.org/EIPS/eip-1822).
- You know how to write a [non-upgradeable plugin](../03-non-upgradeable-plugin/index.md).
- You know about the difficulties and pitfalls of ["Writing Upgradeable Contracts"](https://docs.openzeppelin.com/upgrades-plugins/1.x/writing-upgradeable) that come with
- - modifying the storage layout
+ - modifiying the storage layout
- initialization
- inheritance
- leaving storage gaps
diff --git a/docs/osx/02-how-to-guides/02-plugin-development/07-publication/02-metadata.md b/docs/osx/02-how-to-guides/02-plugin-development/07-publication/02-metadata.md
index dcf24c0e..bfe6d57c 100644
--- a/docs/osx/02-how-to-guides/02-plugin-development/07-publication/02-metadata.md
+++ b/docs/osx/02-how-to-guides/02-plugin-development/07-publication/02-metadata.md
@@ -67,7 +67,7 @@ Each `"prepare..."` object contains:
| description | `string` | The description of what this particular setup step is doing and what it requires the input for. |
| inputs | `object[]` | A description of the inputs required for this setup step following the [Solidity JSON ABI](https://docs.ethers.org/v5/api/utils/abi/formats/#abi-formats--solidity) format enriched with an additional `"description"` field for each element. |
-By following the Solidity JSON ABI format for the inputs, we followed an established standard, have support for complex types (tuples, arrays, nested versions of the prior) and allow for future extensibility (such as the human readable description texts that we have added).
+By following the Solidity JSON ABI format for the inputs, we followed an establishd standard, have support for complex types (tuples, arrays, nested versions of the prior) and allow for future extensibility (such as the human readable description texts that we have added).
#### Example
@@ -103,7 +103,7 @@ By following the Solidity JSON ABI format for the inputs, we followed an establi
"internalType": "struct Multisig.MultisigSettings",
"name": "multisigSettings",
"type": "tuple",
- "description": "The initial multisig settings."
+ "description": "The inital multisig settings."
}
],
"prepareUpdate": {
diff --git a/docs/osx/02-how-to-guides/02-plugin-development/07-publication/index.md b/docs/osx/02-how-to-guides/02-plugin-development/07-publication/index.md
index 3f5b3db7..6187a414 100644
--- a/docs/osx/02-how-to-guides/02-plugin-development/07-publication/index.md
+++ b/docs/osx/02-how-to-guides/02-plugin-development/07-publication/index.md
@@ -20,8 +20,4 @@ You can find all of the addresses of `PluginRepoFactory` contracts by network [h
To create more versions of your plugin in the future, you'll call on the [`createVersion` function](https://github.com/aragon/osx/blob/develop/packages/contracts/src/framework/plugin/repo/PluginRepo.sol#L128) from the `PluginRepo` instance of your plugin. When you publish your plugin, you'll be able to find the address of your plugin's `PluginRepo` instance within the transaction data.
-### 3. Publishing subsequent builds
-
-When publishing subsequent builds, you want to use the `createVersion` function in the `PluginRepo` contract ([check out the function's source code here](https://github.com/aragon/osx/blob/develop/packages/contracts/src/framework/plugin/repo/PluginRepo.sol#L132)).
-
To deploy your plugin, follow the steps in the [`osx-plugin-template-hardhat` README.md](https://github.com/aragon/osx-plugin-template-hardhat/blob/main/README.md#deployment).
diff --git a/docs/osx/02-how-to-guides/02-plugin-development/index.md b/docs/osx/02-how-to-guides/02-plugin-development/index.md
index 72899dfe..869b37a7 100644
--- a/docs/osx/02-how-to-guides/02-plugin-development/index.md
+++ b/docs/osx/02-how-to-guides/02-plugin-development/index.md
@@ -1,5 +1,5 @@
---
-title: Developing a Plugin
+title: How to build a DAO Plugin
---
## Plugin Development Quickstart Guide
diff --git a/docs/osx/02-how-to-guides/_category_.yml b/docs/osx/02-how-to-guides/_category_.yml
deleted file mode 100644
index 93cea945..00000000
--- a/docs/osx/02-how-to-guides/_category_.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-collapsible: true
-collapsed: false
diff --git a/docs/osx/02-how-to-guides/index.md b/docs/osx/02-how-to-guides/index.md
index 31686516..2bf68843 100644
--- a/docs/osx/02-how-to-guides/index.md
+++ b/docs/osx/02-how-to-guides/index.md
@@ -1,5 +1,5 @@
---
-title: Tutorials
+title: How-to Guides
---
## Welcome to our How To Guides on Using the Aragon OSx Protocol!
diff --git a/docs/osx/03-reference-guide/core/dao/DAO.md b/docs/osx/03-reference-guide/core/dao/DAO.md
index f3c398e6..cc344f5a 100644
--- a/docs/osx/03-reference-guide/core/dao/DAO.md
+++ b/docs/osx/03-reference-guide/core/dao/DAO.md
@@ -92,7 +92,7 @@ error ActionFailed(uint256 index)
### error InsufficientGas
-Thrown if an action has insufficent gas left.
+Thrown if an action has insufficient gas left.
```solidity
error InsufficientGas()
diff --git a/docs/osx/03-reference-guide/core/permission/PermissionManager.md b/docs/osx/03-reference-guide/core/permission/PermissionManager.md
index 9caec23b..15d396e3 100644
--- a/docs/osx/03-reference-guide/core/permission/PermissionManager.md
+++ b/docs/osx/03-reference-guide/core/permission/PermissionManager.md
@@ -88,12 +88,12 @@ error ConditionNotAContract(contract IPermissionCondition condition)
| :---------- | ------------------------------- | ----------------------------------- |
| `condition` | `contract IPermissionCondition` | The address that is not a contract. |
-### error ConditionInterfacNotSupported
+### error ConditionInterfaceNotSupported
Thrown if a condition contract does not support the `IPermissionCondition` interface.
```solidity
-error ConditionInterfacNotSupported(contract IPermissionCondition condition)
+error ConditionInterfaceNotSupported(contract IPermissionCondition condition)
```
| Input | Type | Description |
diff --git a/docs/osx/03-reference-guide/core/utils/CallbackHandler.md b/docs/osx/03-reference-guide/core/utils/CallbackHandler.md
index a127ac67..e406d021 100644
--- a/docs/osx/03-reference-guide/core/utils/CallbackHandler.md
+++ b/docs/osx/03-reference-guide/core/utils/CallbackHandler.md
@@ -2,7 +2,7 @@
This contract handles callbacks by registering a magic number together with the callback function's selector. It provides the `_handleCallback` function that inheriting contracts have to call inside their `fallback()` function (`_handleCallback(msg.callbackSelector, msg.data)`). This allows to adaptively register ERC standards (e.g., [ERC-721](https://eips.ethereum.org/EIPS/eip-721), [ERC-1115](https://eips.ethereum.org/EIPS/eip-1155), or future versions of [ERC-165](https://eips.ethereum.org/EIPS/eip-165)) and returning the required magic numbers for the associated callback functions for the inheriting contract so that it doesn't need to be upgraded.
-This callback handling functionality is intented to be used by executor contracts (i.e., `DAO.sol`).
+This callback handling functionality is intended to be used by executor contracts (i.e., `DAO.sol`).
## Implementation
@@ -22,12 +22,12 @@ The magic number refering to unregistered callbacks.
bytes4 UNREGISTERED_CALLBACK
```
-### error UnkownCallback
+### error UnknownCallback
Thrown if the callback function is not registered.
```solidity
-error UnkownCallback(bytes4 callbackSelector, bytes4 magicNumber)
+error UnknownCallback(bytes4 callbackSelector, bytes4 magicNumber)
```
| Input | Type | Description |
diff --git a/docs/osx/03-reference-guide/framework/dao/DAOFactory.md b/docs/osx/03-reference-guide/framework/dao/DAOFactory.md
index 00694cb8..c625cbb5 100644
--- a/docs/osx/03-reference-guide/framework/dao/DAOFactory.md
+++ b/docs/osx/03-reference-guide/framework/dao/DAOFactory.md
@@ -98,7 +98,7 @@ function createDao(struct DAOFactory.DAOSettings _daoSettings, struct DAOFactory
### internal function \_createDAO
-Deploys a new DAO `ERC1967` proxy, and initialize it with this contract as the intial owner.
+Deploys a new DAO `ERC1967` proxy, and initialize it with this contract as the initial owner.
```solidity
function _createDAO(struct DAOFactory.DAOSettings _daoSettings) internal returns (contract DAO dao)
diff --git a/docs/osx/03-reference-guide/framework/plugin/setup/PluginSetupProcessor.md b/docs/osx/03-reference-guide/framework/plugin/setup/PluginSetupProcessor.md
index 0ceda55b..3d477c5f 100644
--- a/docs/osx/03-reference-guide/framework/plugin/setup/PluginSetupProcessor.md
+++ b/docs/osx/03-reference-guide/framework/plugin/setup/PluginSetupProcessor.md
@@ -410,7 +410,7 @@ function prepareUpdate(address _dao, struct PluginSetupProcessor.PrepareUpdatePa
| `initData` | `bytes` | The initialization data to be passed to upgradeable contracts when the update is applied |
| `preparedSetupData` | `struct IPluginSetup.PreparedSetupData` | The data struct containing the array of helper contracts and permissions that the setup has prepared. |
-_The list of `_params.setupPayload.currentHelpers` has to be specified in the same order as they were returned from previous setups preparation steps (the latest `prepareInstallation` or `prepareUpdate` step that has happend) on which the update is prepared for._
+_The list of `_params.setupPayload.currentHelpers` has to be specified in the same order as they were returned from previous setups preparation steps (the latest `prepareInstallation` or `prepareUpdate` step that has happened) on which the update is prepared for._
### external function applyUpdate
@@ -440,7 +440,7 @@ function prepareUninstallation(address _dao, struct PluginSetupProcessor.Prepare
| **Output** | |
| `permissions` | `struct PermissionLib.MultiTargetPermission[]` | The list of multi-targeted permission operations to be applied to the uninstalling DAO. |
-_The list of `_params.setupPayload.currentHelpers` has to be specified in the same order as they were returned from previous setups preparation steps (the latest `prepareInstallation` or `prepareUpdate` step that has happend) on which the uninstallation was prepared for._
+_The list of `_params.setupPayload.currentHelpers` has to be specified in the same order as they were returned from previous setups preparation steps (the latest `prepareInstallation` or `prepareUpdate` step that has happened) on which the uninstallation was prepared for._
### external function applyUninstallation
@@ -455,7 +455,7 @@ function applyUninstallation(address _dao, struct PluginSetupProcessor.ApplyUnin
| `_dao` | `address` | The address of the DAO. |
| `_params` | `struct PluginSetupProcessor.ApplyUninstallationParams` | The struct containing the parameters for the `applyUninstallation` function. |
-_The list of `_params.setupPayload.currentHelpers` has to be specified in the same order as they were returned from previous setups preparation steps (the latest `prepareInstallation` or `prepareUpdate` step that has happend) on which the uninstallation was prepared for._
+_The list of `_params.setupPayload.currentHelpers` has to be specified in the same order as they were returned from previous setups preparation steps (the latest `prepareInstallation` or `prepareUpdate` step that has happened) on which the uninstallation was prepared for._
### public function validatePreparedSetupId
diff --git a/docs/osx/index.md b/docs/osx/index.md
index d35031bf..e3e43afb 100644
--- a/docs/osx/index.md
+++ b/docs/osx/index.md
@@ -1,6 +1,6 @@
---
title: Aragon OSx
-sidebar_label: Introduction
+sidebar_label: Introduction to Aragon OSx
sidebar_position: 0
---
@@ -58,4 +58,4 @@ This documentation is divided into conceptual and practical sections as well as
- Conceptual [How It Works articles](01-how-it-works/index.md) explain the architecture behind our protocol.
- Practical [How-to Guides](02-how-to-guides/index.md) explain how to use and leverage our protocol.
-- The [Reference Guide](03-reference-guide/index.md) generated from the NatSpec comments of the latest `@aragon/osx` release documents each individual Solidity contract, function, and variable.
+- The [Reference Guide](03-reference-guide/index.md) generated from the NatSpec comments of the latest `@aragon/osx` release documents each individual Solididty contract, function, and variable.