# Governnace

### Governance of ZC

#### Motivation

There are many system parameters to control the behavior of the ZC:

* All these parameters of ZC system contracts should be flexible: slashing threshold, cross-chain transfer fees, relayer reward amount and so on.

### For ZC:

* Uniform interface. The contracts who are interested in these parameters only need to implement the same interface.
* Extensible. When adding a new system contract, there is no need to modify any other contracts.
* Failure toleration. Validators could vote to skip false proposals and go on.
* Multiplexing. Now we have only parameters gov, but in the future, there will be more governance functions.

### Gov Contract

Implement the cross chain contract interface: handlePackage(bytes calldata msgBytes, bytes calldata proof, uint64 height, uint64 packageSequence)

And do following step: - Basic check. Sequence check, Relayer sender check, block header sync check, merkel proof check. - Check the msg type according to the first byte of msgBytes, only param change msg type supported for now. Check and parse the msg bytes. - Use a fixed gas to invoke the updateParam interface of target contract. Catch any exception and emit fail event if necessary, but let the process go on. - Claim reward for the relayer and increase sequence.
