Timelock flow
- A
PROPOSERbuilds anAdminOperation. - Governance validates it at proposal time and schedules it with
propose(proposer, op, salt), which returns the operation id. - The operation waits until
get_min_delay()ledgers pass. Track it withget_operation_stateandget_operation_ledger. - Someone executes it. Call
executefor a controller-targeted operation, orexecute_selffor a governance-self one. Both takeexecutor: Option<Address>: passSome(address)and that address must authorize and holdEXECUTOR; passNoneand anyone may execute. - Governance forwards the call to the controller and returns its result, or
applies the self operation inline. (Soroban does not allow the generic
self-call that
executeuses, which is why the two paths differ.)
Roles
Governance roles arePROPOSER, EXECUTOR, CANCELLER, GUARDIAN, and
ORACLE.
Three rules keep the role set from deadlocking:
- No account holds both
EXECUTORandCANCELLER. The grant is rejected with#41 InvalidRole, so nobody can both schedule past a cancel and cancel. - The last
PROPOSERcannot be revoked (#48 CannotRemoveLastProposer). Losing every proposer would make governance permanently unable to act. - A canceller reset path exists (
propose_canceller_reset/execute_canceller_reset), so a lost canceller role does not block governance forever. It is owner-gated and still timelocked.
revoke_role_immediate(account, role) to strip a role without waiting. It works
on GUARDIAN and ORACLE only — any other role is #41 InvalidRole.
Operation scope
Governance controls:- hub, spoke, spoke-asset configuration, and the per-spoke liquidation curve;
- market creation and rate-model updates;
- pool and position-NFT deployment and upgrades;
- oracle configuration, tolerance, and sanity bands;
- swap-aggregator, price-aggregator, and accumulator addresses;
- position limits, the minimum-borrow floor, and position-manager registration;
- the Blend pool allow-list;
force_socialize_bad_debt, unpause, controller upgrade, migration, and ownership;- governance roles, delay, ownership, and upgrade.
Emergency controls
The emergency model is deliberately asymmetric: the guardian can make the protocol safer immediately, but cannot reopen it.
Attempting to relax through the fast path is rejected:
#317 SpokeAssetFlagRelaxation for flags, #227 SanityBandMustTighten for
sanity bands.
Operations are validated at proposal time, delayed, and bound to their scheduled
payload. A scheduled operation whose grace period elapses expires
(#40 TimelockOperationExpired) and must be proposed again.
Next
Governance ABI
Entry points and AdminOperation groups.
Configuration
Controller configuration surface.

