Timelock lifecycle
- A
PROPOSERcallspropose(proposer, op, salt)with anAdminOperation. Governance checks proposal authority, validates the payload, and returns an operation id. Some operations also require the proposer to be the owner. - The operation waits until its ready ledger. Standard operations use
get_min_delay(); sensitive and recovery operations also have delay floors. Readget_operation_ledgerfor the scheduled value. - Execute a ready operation with
executefor controller or price-aggregator targets, orexecute_selffor governance operations, includingSetPriceAggregator. - Governance applies the scheduled payload to its bound target. Execution
after the grace period fails with
#40 TimelockOperationExpired; propose the operation again to schedule a new execution window.
executor: Option<Address>. Some(address)
requires that address to authorize and hold EXECUTOR. With None, execution
is permissionless once the operation is ready.
Roles
Code upgrades, controller migration, ownership transfers, delay changes, oracle
configuration or tolerance changes, external address changes, Blend pool
approval, and role grants require both the owner and
PROPOSER authority.
A role grant alone does not let another proposer schedule these operations.
The owner receives all five roles. Other addresses cannot hold both EXECUTOR
and CANCELLER; conflicting grants return #41 InvalidRole. Ordinary governance
revocation cannot remove the owner’s roles or the last proposer.
Removing the last proposer fails with #48 CannotRemoveLastProposer.
The owner can schedule a canceller reset through propose_canceller_reset and
execute_canceller_reset. The reset remains timelocked. The owner can immediately
revoke GUARDIAN or ORACLE with revoke_role_immediate; other role values are
rejected.
Controlled settings
The one-time
deploy_controller bootstrap call requires the governance owner
and executes immediately. Governance and controller ownership transfers require
transfer_ownership(new_owner, live_until_ledger), followed by
accept_ownership() from the incoming owner.
Emergency controls
Read
get_spoke_asset_flags_epoch(spoke_id, hub_asset) before proposing flag
relaxation. Set expected_epoch to that value. A later flag change invalidates
the proposal with #319 SpokeFlagsEpochMismatch; read again and propose anew.
EditAssetInSpoke cannot clear a set flag.
Immediate create_hub and add_spoke calls create empty containers. They do not
register pool markets or list assets for lending.
Fast-path relaxation fails with #317 SpokeAssetFlagRelaxation for flags or
#227 SanityBandMustTighten for sanity bands. Global pause and per-listing flags
have different effects on exits; see
Risk parameters.
For signatures and operation groups, use
Governance ABI. For configuration inputs,
use Configuration.
