Controller Home¶
see the generated documentation
related: Controller | UController
The controller is the central entity of a DAO, which acts as the owner of the DAO's Avatar, Reputation and DAOToken.
It can perform "sensitive"operations through these entities (e.g token and reputation operations).
It is subject to a set of Schemes and Constraints that determine its behavior, where each scheme has it own operations permissions.
It stores scheme's parameters for the specific DAO.
Interface & Implementations¶
There are currently two implementations of the Controller Interface provided by Arc:
- Controller - A controller instance deployed for each DAO.
- UController - A single, universal controller instance deployed for may DAOs.
Choosing an implementation¶
UController
will probably will be deployed by the DAOstack team so by using it one saves the gas cost of deploying a controller when creating a DAO.- On the other hand,
UController
might be a bit expensive in terms of GAS for each operation.
Schemes¶
A single DAO controller might be a subject to multiple schemes, each with it's own logic. A scheme can only be registered to a controller by a scheme which has registration permission.
Permissions¶
The controller holds and enforces the permissions for each scheme.
e.g registerScheme(...) is allowed to be called only by an authorized (with permission: CAN_REGISTER
) scheme.
A scheme can have any combination of the following permissions:
REGISTERED
- All registered schemes has this permission. Only registered schemes can perform controller operations.CAN_REGISTER
- Grant the scheme the permission to register other schemes.ADD_OR_REMOVE_GLOBAL_CONSTRAINT
- Grant the scheme the permission to add or remove a global constraint.CAN_UPGRADE
- Grant the scheme the permission to upgrade the controller.
Parameters¶
The controller holds the hash of a parameters set for each scheme.
This way a scheme can define a set of parameters which are specific for an organization(defined by the controller).
Global constraints¶
A controller maintains and enforces global constraints for the organization.
A constraint define what a "cannot be done" in the DAO. e.g limit the number of minted tokens for the DAO.
The global constraints is checked before and after each controller operation.
Only a scheme with the ADD_OR_REMOVE_GLOBAL_CONSTRAINT
permission can add or remove a global constraint.