# Governance¶

contract MainGovernance is Governance

The StarkEx contract is governed by one or more Governors of which the initial one is the deployer of the contract.

A governor has the sole authority to perform the following operations:

1. Nominate additional governors (mainNominateNewGovernor)

2. Remove other governors (mainRemoveGovernor)

3. Remove Verifiers and AvailabilityVerifiers after a timelock allows it

4. Nominate Operators (see Operator) and Token Administrators (see Tokens)

Adding governors is performed in a two step procedure:

1. First, an existing governor nominates a new governor (mainNominateNewGovernor)

2. Then, the new governor must accept governance to become a governor (mainAcceptGovernance)

This two step procedure ensures that a governor public key cannot be nominated unless there is an entity that has the corresponding private key. This is intended to prevent errors in the addition process.

The governor private key should typically be held in a secure cold wallet.

string public constant MAIN_GOVERNANCE_INFO_TAG
function mainIsGovernor(address testGovernor)
external
view
returns (bool)
function mainNominateNewGovernor(address newGovernor)
external
function mainRemoveGovernor(address governorForRemoval)
external
function mainAcceptGovernance()
external
function mainCancelNomination()
external