Governance
Enabling governance in a toolkit project requires approval for all changes through member votes. The project governance system currently uses a simple voting structure, where each member has one vote, and proposals need a minimum of 33% participation, with a 50%+ majority required for direct approval and execution.
Voting Power
Each member has a single ballot, giving equal voting power across all members.
Default Governance Rules
When governance is enabled, several default settings apply. These can be adjusted through proposals:
- Proposal Duration: 2 days
- Hotkeys Enabled:
true
- Governance Type:
None
(currently not utilized) - Canister Status Fetch Interval: 1 hour
Proposal Types
With governance enabled, members can propose various actions to manage and control the toolkit project. These actions fall under different proposal types, each with distinct functionalities.
ManageConfig
Settings to manage project configuration:
EnableGovernance(bool
)
Enable or disable governance.
true // Enable governance
false // Disable governance
Default:
false
SetProposalDurationNanos(u64
)
Set the duration for a proposal in nanoseconds.
u64 // Duration in nanoseconds
Default: 2 days
Range: 24 hours to 4 days
SetCanisterStatusFetchIntervalSeconds(u64
)
Specify the interval for fetching the status of controlled canisters.
u64 // Duration in seconds
Default: 1 hour
Range: 5 minutes to 2 days
RootConfig
Controls for the root canister of the toolkit project:
Upgrade
Upgrade the root canister to a new version.
Detach (Not Implemented)
Detach the root canister and assign a principal as the new controller.
ManageMember
Controls for adding or removing members:
Add(Account
)
Add a new member to the project.
pub struct Account {
pub owner: Principal,
pub subaccount: Option<[u8; 32]>,
}
Remove(Account
)
Remove an existing member from the project.
pub struct Account {
pub owner: Principal,
pub subaccount: Option<[u8; 32]>,
}
ManageCanister
Controls for managing canisters associated with the toolkit project:
Register(Principal
)
Register a canister with the toolkit project.
Principal // Canister to register
Requirements:
- The root canister must control the canister being added.
- The proposal creator must control the canister.
- Existing controllers will be removed upon registration.
Deregister(DeregisterCanisterArgs
)
Deregister a canister and assign a new controller.
pub struct DeregisterCanisterArgs {
pub canister_id: Principal, // Canister to deregister
pub controller: Principal, // New controller for the canister
}
Upgrade(InstallCodeArgument
)
Upgrade a canister’s code.
InstallCodeArgument // See InstallCodeArgument documentation
New(NewCanisterArgs
) (Not Implemented)
Deploy a new canister with specified cycles.
pub struct NewCanisterArgs {
pub icp_e8s: Principal, // ICP in e8s used for cycles
pub install_args: InstallCodeArgument, // Installation arguments
}
TransferOwner(Account
)
Transfer the ownership of the toolkit project to another principal. Ownership can only be transferred to an existing member.
pub struct Account {
pub owner: Principal,
pub subaccount: Option<[u8; 32]>,
}