Governance¶
Governance of the Crayon Protocol is concerned with deciding:
The desks to deploy including their longables (tokens accepted as collateral) and horizons (loan durations).
Setting and re-setting various fees on those desks.
Setting and re-setting reward token distributions (
XCRAYtokens).
Fees and reward token distributions are managed on an on-going basis.
Approved governance decisions are executed through the Control smart contract where deployed desks are registered. The admin address in Control is the only address empowered to register newly deployed desks and set and reset fees and reward rates.
Current State¶
The Crayon Protocol team currently holds the governance privileges and the Control smart contract’s admin keys.
Future State¶
Governance will be transferred to XCRAY token holders. See Roadmap. XCRAY token holders will use the (to-be-deployed) Governor smart contract to vote their tokens in favor of (or against) proposed new desk deployments or new fees and distribution rates of reward tokens across the desks. The Crayon Protocol team will also change the admin address in the Control smart contract to the Governor smart contract address which therefore will have sole privileges for setting fees and reward rates on the various registered desks.
Governance Execution Functions¶
Changing Crayon Protocol desk attributes is generally a two-step process that initially schedules the changes to be made and in a second step, after the passage of a public number of blocks, commits the changes. Setting distribution rates of XCRAY tokens for a particular desk, however, takes effect as soon as that desk queries the Control smart contract for an update.
The functions below are part of the Crayon Protocol Control smart contract.
Reward token distribution rates are reset and read using these functions.
- set_desk_rates(_desks: DynArray[address, MAX_NUM_DESKS], _borrow_rates: DynArray[uint256, MAX_NUM_DESKS], _deposit_rates: DynArray[uint256, MAX_NUM_DESKS])
Set new
XCRAYdistribution rates for lenders and borrowers at a number of desks. All three arrays must have the same length._desks: The array of desks targeted for new _borrow_rates_borrow_rates: The array of new distribution rates for borrowersdeposit_rates: The array of new distribution rates for lenders
Note
This function will revert if the length of the arrays exceeds the number of deployed desks that were registered with this Control smart contract.
- get_reward_parameters(_desk: address)
Return the tuple of rates of distribution of
XCRAYtokens to borrowers and lenders, resp. This is aviewfunction._desk: The desk for which the rates are sought
The following functions in Control reset attributes in Crayon Protocol desks.
- schedule_new_fee(_horizon: uint256, _new_fee: uint256, _desk: address)
Schedules a change in the fee paid by borrowers.
_horizon: The borrowing horizon for which a new fee is being Set_new_fee: The new fee value in bps. A value of 9 means a fee of 0.09%_desk: The Crayon Protocol desk targeted by the change
- schedule_new_flashloan_fee(_new_flashloan_fee: uint256, _desk: address)
Schedules a change in the flashloan fee on a desk.
_new_flashloan_fee: The new fee value in bps_desk: The Crayon Protocol desk targeted by the change
- schedule_new_liquidation_bonus(_new_liquidation_bonus: uint256, _desk: address)
Schedules a change in the liquidation bonus for liquidators.
_new_liquidation_bonus: The new liquidation bonus in bps_desk: The Crayon Protocol desk targeted by the change
- commit_new_fee(_desk: address)
Start applying the already-scheduled new borrowing fee.
_desk: The Crayon Protocol desk for which the new fee was scheduled
- commit_new_flashloan_fee(_desk: address)
Start applying the already-scheduled new flashloan fee.
_desk: The Crayon Protocol desk for which the new flashloan fee was scheduled
- commit_new_liquidation_bonus(_desk: address)
Start applying the already-scheduled new liquidation bonus.
_desk: The Crayon Protocol desk for which the new liquidation bonus was scheduled
Note
The last three functions (the “commit” functions) will revert if called before the minimum waiting period has elapsed.
Monitoring Changes¶
Users can watch for scheduled changes by listening to events logged by functions in the Control smart contract. They are:
event NewFee:
desk: indexed(address)
horizon: indexed(uint256)
new_fee: uint256
from_block: uint256
event NewFlashFee:
desk: indexed(address)
new_flash_fee: uint256
from_block: uint256
event NewLiquidationBonus:
desk: indexed(address)
new_liquidation_bonus: uint256
from_block: uint256