Aragon is a powerful tool for creating digital organizations. The flexibility provided by the underlying aragonOS smart contract system means that nearly any organization model or governance rules that can be conceived of can be implemented in code and built into an Aragon organization.
Want to know more about Aragon? Read our blog post Governing with Aragon.
In this tutorial I will show how you can use Aragon to create a multistakeholder organization that is governed by its members. A multistakeholder organization is an organization governed by stakeholders from “different social, political, or economic groups”. For example, a neighborhood that wants to unite to solve problems or provide benefits to the local community could create a multistakeholder organization made up of neighborhood residents, business owners, workers, and civil society groups to propose and vote on different activities to focus resources towards.
In this tutorial we will create a multistakeholder organization that is starting off with three stakeholder groups: a local business, an institutional nonprofit, and a grassroots community organization. Each stakeholder group will have an internal process for nominating a representative who will be responsible for relaying information about proposals back and forth from the multistakeholder organization, as well as voting on proposals in the multistakeholder organization. This keeps the multistakeholder organization nimble and allows most members of the stakeholder groups to focus on their normal jobs rather than being constantly distracted by what’s happening in the multistakeholder organization. If at any time a stakeholder group feels that their representative is no longer the best fit for the job, they can swap them out for a new representative.
Note: It is possible for a stakeholder group to vote on proposals in the multistakeholder organization using direct democracy or any other governance model, but for this example we will use a representative model.
Step 0. Prerequisites
Make sure you have all of the prerequisites necessary to start using Aragon. Namely, for this tutorial you will need an Ethereum provider and at least 0.5 Rinkeby test ETH.
Part 1. Create your stakeholder organizations
As mentioned before, our multistakeholder organization is going to start off with three stakeholder groups: a local business, an institutional nonprofit, and a grassroots community organization. Each of these groups is going to have its own Aragon organization so that they can, at a minimum, nominate a representative who will act on their behalf in the multistakeholder organization.
Each stakeholder organization is going to be configured the same way, so we will perform this step three times, once for each stakeholder organization.
1.1 Go to rinkeby.aragon.org
We’ll create our organizations on the Rinkeby test network for now. This way if we make any mistakes, it won’t cost us real money and we can easily start over if needed.
1.2 Click the “Connect account” button
Connect your Ethereum account to the Aragon client. A popup may appear asking for your approval. Approve the connection to continue.
1.3 Click “Create an organization”
We’re going to set up each of our stakeholder organizations using the Membership template. With this template, each member of the organization will receive one non-transferable token that represents their membership and provides them with voting rights in the organization. Each member can only hold at most one token. This creates a “one-member-one-vote” governance model for the organization.
1.4 Install optional Agent app
For this setup, we want to make sure that we install the Agent app on each stakeholder organization. The Agent app is an Aragon app that enables Aragon organizations to interact directly with any other smart contract on Ethereum, including other Aragon organizations. This is what will enable each stakeholder organization to act independently inside of the multistakeholder organization.
Click the toggle to enable the Agent app installation then click the “Use this template” button to proceed.
1.5 Complete the setup flow
There are five steps to completing the setup flow for each stakeholder organization.
1.5.1 Choose an ENS name
We have to choose an Ethereum Name Service (ENS) subdomain name for each stakeholder organization. This will uniquely identify each organization on the Ethereum blockchain. I’m going to call our stakeholder organizations business.aragonid.eth, nonprofit.aragonid.eth, and grassroots.aragonid.eth.
1.5.2 Select Voting app parameters
We have to select the parameters we want to use for the Voting app that will be installed on each organization. I’m going to set both the Support % and Minimum Approval % parameters to 50%, which means that more than half of the organization members must vote YES for a proposal to be approved. I’m also going to set the vote duration to 10 minutes. Since this is just a demo organization we want the votes to go quickly.
1.5.3 Select Tokens app parameters
We have to set the parameters for the Tokens app. I’m going to make the token name for each organization VOTE TOKEN and make the token symbol VOTE. In the Token Holders field I’m going to paste my own Ethereum address. I could click the “Add more” button to add the Ethereum addresses of other members of the organization, but for simplicity I’ll leave it with just my address for now.
1.5.4 Review setup settings
We have an opportunity to review all of the settings we just entered for our organization. Everything looks good so I’m going to click “Launch your organization”.
1.5.5 Launch the organization
We have to sign and broadcast the transaction to create the organization. If you decide to add multiple tokenholders to the organization on the Tokens app section of the setup flow, you may have to sign and broadcast more than one transaction.
Now we’re ready to go! Click “Get started” to go to the organization you just created.
After repeating these steps three times – once for each stakeholder organization – we will have each of the organizations that will make up the multistakeholder organization and we can move on to the next part of the tutorial.
Part 2. Create the multistakeholder organization
The steps completed to create the multistakeholder organization are going to be almost exactly the same as creating each individual stakeholder organization. The only differences will be the ENS name and the initial tokenholders that I select.
For the ENS name, I am going to call the multistakeholder organization multistakeholder.aragonid.eth.
When it’s time to add the initial set of tokenholders on the Tokens app section of the setup flow (Step 1.5.3 above) we are going to enter the Agent address of each stakeholder organization, for a total of three initial tokenholders.
To find the address of the Agent app for each stakeholder organization, navigate to the organization in the Aragon client then go to “Organization” under the “System” section of the sidebar in the Aragon client.
Click on the Agent app address then copy and paste it into the Token Holders field on the Tokens app settings page when setting up the multistakeholder organization. Click “Add more” to add the Agent addresses of each other stakeholder organization.
Review and confirm the details, then launch the multistakeholder organization. Since there are three initial tokenholders, we must sign and broadcast two transactions to complete the setup.
And now we have our multistakeholder organization.
Part 3. Nominate stakeholder representatives
In this part we will nominate a representative in each stakeholder organization. As mentioned before, this representative will be responsible for taking proposals from their organization to the multistakeholder organization, relaying information between the multistakeholder organization and their own stakeholder organization, and voting on proposals in the multistakeholder organization on behalf of their stakeholder organization.
This part is optional; a multistakeholder organization could decide that all of the members of the stakeholder organizations should be fully involved in the governance process, and so participation is based on a direct voting model rather than a representative model. There are many ways this could be set up. But for this example, we’ll use a representative model.
We will complete this part of the tutorial for each stakeholder organization.
3.1 Propose a representative
To propose a representative, we’re going to create a proposal that gives the representative’s Ethereum address permission to execute actions using the Agent app of the representative’s organization.
Note: The permission to execute actions using the Agent app can be a powerful permission that would, for example, give permission to the representative to unilaterally transfer any assets managed by the Agent app, if it manages any assets at all. This permission is best granted only in an organization where the Agent app is not used to manage assets, and is only used to vote in a multistakeholder organization as in this tutorial. If an organization wants to participate in a multistakeholder organization this way and manage assets using the Agent app, it’s best to set up a separate organization specifically for this purpose.
3.1.1 Go to the Permissions app of the stakeholder organization
Click “Permissions” under the System section of the sidebar in the Aragon client to open the Permissions app.
3.1.2 Click “New permission” and configure new permission
On app “Agent” assign to entity “Custom address” “(paste address of the representative)” permission to perform action “Execute actions”. Click “Add permission” then sign and broadcast the transaction.
3.2 Approve proposal to give the representative the necessary permission
After you sign and broadcast the transaction to create the new permission giving the representative the ability to execute actions using the Agent app, a proposal will be created in the Voting app. Based on the parameters we set for the Voting app in each stakeholder organization, over half of the members must vote YES for the proposal to be approved. Go to the Voting app and vote YES on the proposal. If there are other members, have them vote YES as well.
Now the representative has the permission to execute actions on behalf of the organization using the Agent app.
Part 4. Set up Frame + Agent
The representative now has to set up their Ethereum provider so that they can interact with the multistakeholder organization using their stakeholder organization’s Agent app. Currently Frame is the only Ethereum provider that has native support for interacting on behalf of an Aragon organization using the Agent app.
1. Install Frame
Visit https://frame.sh/ and install the Frame desktop app. You can also install the Frame browser extension if you want to be able to use Frame with other Ethereum applications.
2. Add your Ethereum wallet to Frame
Start the Frame desktop application. Click the arrows at the top of Frame to change to the Settings menu. Next to “Connection” change “Mainnet” to “Rinkeby”. Click the arrows at the top again to go back to the main page. Click the “+” button and add your Ethereum account to Frame. This should be the same Ethereum account that has the address nominated as the stakeholder representative. You can select from multiple options to add your account depending on how you are storing your account.
3. Add the stakeholder organization’s Agent
Once you (the representative) have added your personal Ethereum account to Frame, click the “+” button in Frame again to add another account. Scroll down to where it says “Smart accounts” and click “Add Aragon account”. Type the name of your organization (the stakeholder organization the representative is acting on behalf of) then click “Next”.
Select the Ethereum account that holds your stakeholder organization token, then select the specific address holding the token (the same Ethereum address selected to be the representative).
Frame will show a success message, then you will be taken back to the main account selection screen in Frame where you can select the Aragon account to act with.
4. Create and vote on proposals in the multistakeholder organization
Using Frame + Agent and acting as their stakeholder organization, representatives can now create and vote on proposals in the multistakeholder organization. The proposals can do almost anything a proposal in any other Aragon organization can do: add or remove tokenholders, withdraw funds, change permissions, install or upgrade apps, etc.
Note: Due to a software limitation that prevents acting as an organization within another organization, the only type of proposal not currently directly supported in a multistakeholder organization like this are Agent app proposals. One way that you can work around this limitation is to give representatives the “Create new vote” permission on the Voting app in the multistakeholder organization. Then, representatives can create new votes on behalf of the multistakeholder organization using the multistakeholder organization’s Agent app, as described above using Agent + Frame except acting as the multistakeholder organization instead of the representative’s stakeholder organization. Once the vote is created, the members of the multistakeholder organization can cast their votes on the Agent proposal. If one of the stakeholder organizations ever changes its representative, then the “Create new vote” permission can be revoked from the old representative and assigned to the new one.
Once a proposal is created, the representative can use Frame + Agent to cast a vote on behalf of their stakeholder organization using the multistakeholder organization’s Voting app.
We are now done setting up a multistakeholder organization using Aragon!
You can learn more about how to use Aragon for your organization at the Aragon Help Desk.