# Proxy Governance¶

contract ProxyGovernance is Governance

The Proxy 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 (proxyNominateNewGovernor)

2. Remove other governors (proxyRemoveGovernor)

3. Add new implementations (proxied contracts)

4. Remove (new or old) implementations

5. Update implementations after a timelock allows it

Adding governors is performed in a two step procedure:

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

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

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 or managed via a multi-sig contract.

function proxyIsGovernor(address testGovernor)
external
view
returns (bool)
function proxyNominateNewGovernor(address newGovernor)
external
function proxyRemoveGovernor(address governorForRemoval)
external
function proxyAcceptGovernance()
external
function proxyCancelNomination()
external