In order for a DAO to interact with external applications and protocols the DAO must have some way to perform an arbitrary external action and some way to ensure that the arbitrary actions can be integrated into the DAOs internal governance process.
This capability would drastically enhance the utility of a DAO by allowing the DAO and its members to collectively participate in any web3 application, including other DAOs. For example a DAO might choose to participate in a staking pool, breed cryptokitties, or participate in a larger DAO. This post is intended to discuss a possible way to implement such functionality and identify specific design challenges that might arise as a result.
From a usability perspective, a member of the DAO would ideally interact with an external application or protocol as they normally would using a web3 provider/browser, but when performing the action that intent should bridged to the DAO and trigger the transaction pathing workflow they experience when interacting with a native Aragon Application. At a high level this seems relatively simple, you need the signer to be aware of which DAO the user wants to perform the action as, you need a way to take actions at the signer level and dynamically produce an intent, and you need an application within the DAO that processes those intents.
In order for DAOs to perform web3 actions, there needs to be support at web3 provider or signer level. This would allow a user to register the DAO as an available account in the signer, and when performing an action the signer would dynamically generate an “intent” for the action and open the DAO where the client could process the “intent” normally.
In order for the DAO to process the intent a new application would need to be used to manage permissions for dynamically generated intents.
Managing Permissions of External Actions
We cannot assume that external actions will be aware of the ACL or have permission modifiers since they are simply function calls on an external contract. From the DAOs perspective these external actions can be divided into actions which have been registered in the DAO’s ACL and actions which are currently unregistered. This results in the following possible permissions:
- Execute an unregistered action
- Register an external action in the ACL
- Execute a registered action
Perhaps this could be accomplished by creating a generic “connector” that serves as the DAOs interface to external contracts.
Many web3 actions interact with the balances of assets held by the function caller, or send assets to the callers address. From the DAOs perspective the assets should generally be held in the organizations “vault”. A simple approach might be to create a version of the vault that implements ability to execute external actions described above. However, adding additional functionality, particularly open ended functionality like executing arbitrary actions to the vault may be risky.
In practice this would mean the vault would act more like a collective wallet, than it does currently.