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¶
UControllerwill 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,
UControllermight 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.