Following the Ethereum, Plasma and Monad activations above, the PT Risk Oracle stack is now deployed on Aave V3 X Layer for PT-USDG-25FEB2027, listed by [Direct-to-AIP] Onboard PT-USDG-25FEB2027 on X Layer. The contracts are byte-equivalent to the Certora-audited components already deployed on Ethereum, Plasma and Monad, all source-verified on OKLink, and being added to the address book under MiscXLayer. An AIP will follow shortly.
Deployed contracts (X Layer, chainId 196)
| Contract | Address |
|---|---|
| RiskOracle | 0x3e0C920C2bdDF6DF87f9A39Ea4db9CF65Cec1EDE |
| PTParameterRegistry | 0x101D7eA4D0F8Ab848D3CC24e7b391F19DaaF6a2d |
| LlamaguardRiskOracleRouter | 0xfC354324B152E2A358A17182d2AF0d3f882c27D2 |
| AaveDiscountRateAgent | 0xb00251C67dB290D0AD779903bfFeB092DAE76fFa |
| AaveEModeAgent | 0x19ae7c91dfd35a4515595cEd305d2102C3b1B02D |
Both agents are stock implementations from aave-dao/aave-risk-agents, built at that repository’s own settings (solc 0.8.27, optimizer runs 200, shanghai). They are ownerless and inert until governance registers them. The E-Mode agent preserves the category’s isolation flag, which is false for category 9 on X Layer.
Chainlink CRE workflows
Three workflows, owned by the Aave CRE organisation multisig (0x73494691C9B28b91A0b4C9dF213c1893fddA3a3B) and pinned as the only accepted author on every Router route: an EMA of the Pendle implied rate, and discount-rate and E-Mode risk-parameter oracles acting on category 9. The EMA leg writes to its own LlamaGuardOracle, deployed together with the CRE workflows, and activates without governance; the two agent-bearing routes go live only after the AIP executes.
What the AIP will do
Register the two predeployed agents on the Aave-owned AgentHub (aave-dao/aave-proposals-v3#1226), taking agent ids 0 and 1 (discount rate first, confirmed by fork execution), grant each RISK_ADMIN on AaveV3XLayer.ACL_MANAGER, and set four absolute default range bounds on the RangeValidationModule: 100 bps per injection on the discount rate, and 50 bps per injection on each of EModeLTV, EModeLiquidationThreshold and EModeLiquidationBonus. Every bound is absolute rather than relative because a relative cap measures against the last injected value, which does not exist on a freshly assigned agent id, so a relative configuration would leave the first injection unbounded. The payload changes no reserve configuration.
Launch risk parameters
Initial discount rate 2.953% per year, capped at 7.910%. E-Mode category 9 (PT_USDG_25FEB2027__Stablecoins, non-isolated) launches at 91.48% LTV, 93.48% liquidation threshold and 2.62% liquidation bonus, with the agent bounded by a 96.00% LT cap and a 2.0 pp LB floor.
Ownership and controls
Registration is governance-only: registerAgent and setAgentAdmin on the AgentHub are onlyOwner, and the owner is GovernanceV3XLayer.EXECUTOR_LVL_1, so no agent can be added or repointed outside a governance vote. Both agents are registered with admin set to MiscXLayer.PROTOCOL_GUARDIAN (0xD0D1CcB0391aADF1EaD96814ce7ab4008Ebdb336), so a misbehaving agent can be disabled without waiting on a governance cycle; re-enabling requires a vote.
The publishing path is one-way. The RiskOracle accepts writes only from the Router, and the Router accepts only reports delivered by the Chainlink CRE forwarder (0x76c9cf548b4179F8901cda1f8623568b58215E62) for a workflow owned by the Aave CRE organisation multisig. The RiskOracle and the Router are owned by the LlamaRisk admin safe (0x1a0267E9E5929a5914Ae9DbBf23Bc07B14365471); the PTParameterRegistry is owned by the Executor.
Auditing
The Router, RiskOracle, parameter registry and EMA oracle are byte-equivalent deployments of the Certora-audited LlamaGuard periphery running on Ethereum Core, Plasma and Monad. The agent implementations are the stock contracts from the DAO-owned aave-dao/aave-risk-agents, audited by Certora; both are built at that repository’s own settings (solc 0.8.27, optimizer runs 200, shanghai). Note that the hub, range module, pool and oracle are immutables baked into each agent’s runtime, so a raw cross-chain bytecode comparison will not match until those are masked out.