Roll your own CRDAO!
The CRDAO is an Aragon organization, currently deployed to Rinkeby. The following walk through describes the deployment process using the Aragon CLI
Note: Once the first cohort of CRDAO members are on-boarded, Admin1 will relinquish the mint role on the Token manager. the permissions table can be found here
1. Deploy new DAO
Create a new DAO
dao new --environment aragon:rinkeby --use-frame
Create DAO environment variable
dao=<DAO_ADDRESS>
Create deployer environment variable
me=<DEPLOYER_ADDRESS>
2. Token
Create token
dao token new "Bird" "BIRD" --environment aragon:rinkeby --use-frame
Create token environment variable
token=<TOKEN_ADDRESS>
Create token manager
dao install $dao token-manager --app-init none --environment aragon:rinkeby --use-frame
Create Token Manager environment variable
tm=<TOKEN_MANAGER_ADDRESS>
Set token manager as tokens controller
dao token change-controller $token $tm --environment aragon:rinkeby --use-frame
3. Voting
Install voting
50 percent support requirement
5 percent approval quorum
1 week vote duration
dao install $dao voting --app-init-args $token 500000000000000000 50000000000000000 604800 --environment aragon:rinkeby --use-frame
Set the voting address environment variable
voting=<VOTING_ADDRESS>
4. Voting and Token Manager permissions
Create permission for deployer to create votes
dao acl create $dao $voting CREATE_VOTES_ROLE $me $voting --environment aragon:rinkeby --use-frame
Set the permissions such so that voting is required to Issue, Assign, and Burn tokens. And the deployer and voting can Mint tokens
dao acl create $dao $tm MINT_ROLE $me $voting --environment aragon:rinkeby --use-frame
dao acl grant $dao $tm MINT_ROLE $voting --environment aragon:rinkeby --use-frame
dao acl create $dao $tm ISSUE_ROLE $voting $voting --environment aragon:rinkeby --use-frame
dao acl create $dao $tm ASSIGN_ROLE $voting $voting --environment aragon:rinkeby --use-frame
dao acl create $dao $tm BURN_ROLE $voting $voting --environment aragon:rinkeby --use-frame
initialize the token manager, setting the token to transferrable and havung unlimited balances
dao exec $dao $tm initialize $token true 0 --environment aragon:rinkeby --use-frame
In the web client mint 1 token to deployer
5. Install agent and finance
Install agent to use as a vault
dao install $dao agent --environment aragon:rinkeby --use-frame
Set the Agent address environment variable
vault=<VAULT_ADDRESS>
Install Finance
dao install $dao finance --app-init-args $vault 2592000 --environment aragon:rinkeby --use-frame
Set the address address environment variable
finance=<FINANCE_ADDRESS>
6. Agent and Finance permissions
Grant permission for finance to transfer assets from the vault
dao acl create $dao $vault TRANSFER_ROLE $finance $voting --environment aragon:rinkeby --use-frame
Grant voting permissions Create, Execute and Manage payment on the Finance app
dao acl create $dao $finance CREATE_PAYMENTS_ROLE $voting $voting --environment aragon:rinkeby --use-frame
dao acl create $dao $finance EXECUTE_PAYMENTS_ROLE $voting $voting --environment aragon:rinkeby --use-frame
dao acl create $dao $finance MANAGE_PAYMENTS_ROLE $voting $voting --environment aragon:rinkeby --use-frame
7. Address book
Install address book
dao install $dao address-book.aragonpm.eth --environment aragon:rinkeby --use-frame
Set Address Book address environment variable
address_book=<ADDRESS_BOOK_ADDRESS>
Grant voting permissions to Add, Remove and Update entries in the Address book
dao acl create $dao $address_book ADD_ENTRY_ROLE $voting $voting --environment aragon:rinkeby --use-frame
dao acl create $dao $address_book REMOVE_ENTRY_ROLE $voting $voting --environment aragon:rinkeby --use-frame
dao acl create $dao $address_book UPDATE_ENTRY_ROLE $voting $voting --environment aragon:rinkeby --use-frame
8. Dot Voting
Install Dot Voting
50 percent support requirement
0 percent approval quorum
1 week vote duration
dao install $dao dot-voting.aragonpm.eth --app-init-args $token 500000000000000000 0 604800 --environment aragon:rinkeby --use-frame
Set Dot Voting address environment variable
dot_voting=<DOT_VOTING_ADDRESS>
Grant Token Manager permissions to create votes and add candidates to Dot Voting
dao acl create $dao $dot_voting ROLE_CREATE_VOTES $tm $voting --environment aragon:rinkeby --use-frame
dao acl create $dao $dot_voting ROLE_ADD_CANDIDATES $tm $voting --environment aragon:rinkeby --use-frame
9. Allocations
Install Allocations
dao install $dao allocations.aragonpm.eth --app-init-args $vault 604800 --environment aragon:rinkeby --use-frame
Set Allocations address environment variable
allocations=<ALLOCATIONS>
Grant Voting permissions to create accounts and change budgets on Allocations
dao acl create $dao $allocations CREATE_ACCOUNT_ROLE $voting $voting --environment aragon:rinkeby --use-frame
dao acl create $dao $allocations CHANGE_BUDGETS_ROLE $voting $voting --environment aragon:rinkeby --use-frame
Grant Dot Voting permissions to create a new allocation
dao acl create $dao $allocations CREATE_ALLOCATION_ROLE $dot_voting $voting --environment aragon:rinkeby --use-frame
Grant the Token Manager permissions to execute an Allocation
dao acl create $dao $allocations EXECUTE_ALLOCATION_ROLE $tm $voting --environment aragon:rinkeby --use-frame
Grant Allocations permissions to transfer funds from the vault
dao acl grant $dao $vault TRANSFER_ROLE $allocations --environment aragon:rinkeby --use-frame
10. Admin Permissions
set variable for admin address
admin1=<ADMIN_ADDRESS>
add entry to the address book
dao acl grant $dao $address_book ADD_ENTRY_ROLE $admin1 --environment aragon:rinkeby --use-frame
11. Clean up permissions
set variable for ACL address
acl=<ACL_ADDRESS>
add voting as app manager
dao acl grant $dao $dao APP_MANAGER_ROLE $voting --environment aragon:rinkeby --use-frame
remove deployer account as app manager
dao acl revoke $dao $dao APP_MANAGER_ROLE $me --environment aragon:rinkeby --use-frame
set voting as the permission manager
dao acl set-manager $dao $dao APP_MANAGER_ROLE $voting --environment aragon:rinkeby --use-frame
add voting as permissions manager
dao acl grant $dao $acl CREATE_PERMISSIONS_ROLE $voting --environment aragon:rinkeby --use-frame
remove deployer account as permissions manager
dao acl revoke $dao $acl CREATE_PERMISSIONS_ROLE $me --environment aragon:rinkeby --use-frame
set voting as the permission manager
dao acl set-manager $dao $acl CREATE_PERMISSIONS_ROLE $voting --environment aragon:rinkeby --use-frame
allow token manager to create votes
dao acl grant $dao $voting CREATE_VOTES_ROLE $tm --environment aragon:rinkeby --use-frame
remove deployer permission to create votes
dao acl remove $dao $voting CREATE_VOTES_ROLE $me --environment aragon:rinkeby --use-frame