Onboarding a new Allocator (end-to-end)
Goal: grant an address the Allocator role, set its credit line & fee, assign pockets per asset, and produce a referral code.
TL;DR
Register action type → register UCE as governed (one-time) → queue
SET_ALLOCATORwith parameters → wait timelock → execute → (optionally) update pockets.
Prerequisites (usually one-time)
Register UCE as a governed contract
Action:
REGISTER_CONTRACTPayload: (address contractAddr, string name) → e.g., (UCE, "Orbit UCE")
Sign (≥ 4), queue, timelock, execute.
Register product action types (if not already)
Actions:
REGISTER_ACTION_TYPEfor:ACT_SET_ALLOCATORACT_SET_ALLOCATOR_POCKETS
Each call:
payload (bytes32 actionType, string description).
Parameters required for onboarding
Allocator address (init.allocator)
Credit line:
ceiling - max effective debt
dailyCap - max issuance per 24h rolling UTC day
Borrow fee:
borrowFeeBps(e.g., tuned to target ~5% annualized policy)Allowed flag: allowed = true
Per-asset scope:
assets[]- list of supported underlyings this allocator will managepocketsNew[]- pocket addresses per asset (same order as assets[])
The UCE also computes and assigns a referral code to the allocator during SET_ALLOCATOR. The code is derived from (allocator, ceiling, dailyCap, borrowFeeBps). If these values change later, governance may re-assign a new code (the old mapping is cleared).
The governance call(s)
Onboard / set allocator
Action:
ACT_SET_ALLOCATORPayload: (
op,SetAllocatorMemory init,address[] assets,address[] pocketsNew) where:op =
SET_ALLOCATORinit = {
allocator,allowed,line{ceiling,dailyCap,mintedToday=0,lastMintDay=current},borrowFeeBps}assets[]andpocketsNew[]can be empty if pockets will be set in a follow-up call.
Effects (on UCE):
Marks allowed = true.
Stores credit line and
borrowFeeBps.Generates and maps a
referralCode.Emits
AllocatorSet,CreditLineUpdated,AllocatorBorrowFeeSet,AllocatorReferralSet.
(Optional) Set or update allocator pockets
Action:
ACT_SET_ALLOCATOR_POCKETSPayload: (
allocator, asset, newPocket) for single-asset tweaks, or callACT_SET_ALLOCATORwithop = UPDATE_POCKETand arrays for batch updates.Effects:
Updates allocator → asset → pocket mapping.
Emits
AllocatorPocketSetand migrates any pullable balances between old/new pockets.
Both actions go through: sign (≥ 4, ≤ 9) → queue (timelock) → execute. If the signers or parameters are invalid, the governance module rejects them upfront (before queueing) by verifying valid action type, signatures, and nonce.
After onboarding: operational readiness checklist
Fund pockets with initial liquidity; keep allowances to UCE high enough for expected redemptions.
Pre-mint inventory using
allocatorCreditMint(staying within dailyCap and ceiling).Distribute referral code to direct your user flow.
Set up monitoring for: reserve levels, allowances, pocket balances, Aave utilization, surcharge spikes, and debtIndex moves
Last updated