Governance

The ShiftCTRL Tab Protocol is governed by a Decentralized Autonomous Organization (DAO) through a series of onchain governance smart contracts, built on the robust and battle-tested OpenZeppelin frame

Governance Contracts

ShiftCtrlGovernor

The ShiftCtrlGovernor is the primary governance contract used by the ShiftCTRL Tab Protocol community. It is designed to optimize transparency by implementing delayed voting and execution, ensuring that all users are informed and prepared to respond. Additionally, it encourages broad community participation by maintaining a low proposal threshold.

Proposal Threshold: 10,000CTRL

Voting Delay: 2 days

Voting Period: 3 days

Quorum: 5% required for proposal to pass

TimelockController: 2 days before passed proposal can be executed

ShiftCtrlEmergencyGovernor

The ShiftCtrlEmergencyGovernor is a specialized governance contract, similar to the standard ShiftCtrlGovernor, but with distinct parameters tailored for emergency situations. It features more stringent proposal criteria and faster execution timeframes, making it ideal for addressing urgent scenarios, such as applying security patches or triggering the Tab freeze function to safeguard the protocol.

Proposal Threshold: 1,000,000CTRL

Voting Delay: Immediate

Voting Period: 30 minutes

Quorum: 5% required for proposal to pass

TimelockController: Immediate. Can execute right after proposal is passed.

GovernanceAction

The GovernanceAction contract serves as a utility contract that simplifies the process of proposing common actions. It allows community members to call functions within a single contract, eliminating the need for technical expertise, such as knowing which contracts to call, having to call multiple contracts, and ensuring they are called in the correct sequence.

Currently, the GovernanceAction contract supports the following functions:

1. setDefBlockGenerationTimeInSecond(uint256 sec)

2. updateReserveParams(
  bytes32[] calldata _reserveKey,
  uint256[] calldata _processFeeRate,
  uint256[] calldata _minReserveRatio,
  uint256[] calldata _liquidationRatio)
  
3. updateTabParams(
  bytes3[] calldata _tab,
  uint256[] calldata _riskPenaltyPerFrame,
  uint256[] calldata _processFeeRate)
  
4. updateAuctionParams(
  uint256 _auctionStartPriceDiscount,
  uint256 _auctionStepPriceDiscount,
  uint256 _auctionStepDurationInSec,
  address _auctionManager)
  
5. disableTab(bytes3 _tab)

6. enableTab(bytes3 _tab)

7. disableAllTabs()

8. enableAllTabs()

9. setPeggedTab(bytes3 _ptab, bytes3 _tab, uint256 _priceRatio)

10. createNewTab(bytes3 _tab)

11. addReserve(
  bytes32 _reserveKey,
  address _token,
  address _vaultManager)
  
12. disableReserve(bytes32 _reserveKey)

13. addPriceOracleProvider(
  address provider,
  address paymentTokenAddress,
  uint256 paymentAmtPerFeed,
  uint256 blockCountPerFeed,
  uint256 feedSize,
  bytes32 whitelistedIPAddr)
  
14. configurePriceOracleProvider(
  address provider,
  address paymentTokenAddress,
  uint256 paymentAmtPerFeed,
  uint256 blockCountPerFeed,
  uint256 feedSize,
  bytes32 whitelistedIPAddr)
  
15. removePriceOracleProvider(
  address _provider,
  uint256 _blockNumber,
  uint256 _timestamp)
  
16. pausePriceOracleProvider(address _provider)

17. unpausePriceOracleProvider(address _provider)

18. ctrlAltDel(bytes3 _tab, uint256 _btcTabRate)

Last updated