psXDC rate oracle
For money markets and other integrators that want to price bridged psXDC on Base, Arbitrum, BNB Chain, or HyperEVM. psXDC is a yield-bearing vault share: its fair value is XDC price × the psXDC/XDC exchange rate, published cross-chain by this oracle.
For money markets and other integrators that want to price bridged psXDC on
Base, Arbitrum, BNB Chain, or HyperEVM. psXDC is a yield-bearing vault share: its fair
value is XDC price × psXDC/XDC exchange rate. This oracle publishes that
exchange rate cross-chain from XDC so you can price psXDC exactly like a
wstETH/rETH rate provider.
Interface
PsxdcRateOracle implements the Chainlink AggregatorV3Interface:
function decimals() external view returns (uint8); // 18
function latestRoundData() external view returns (
uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound
);
function isStale() external view returns (bool); // true past the staleness windowanswer = XDC redeemable per 1e18 psXDC (18 decimals). Compose it with your
existing XDC/USD feed:
psXDC/USD = latestRoundData().answer * (XDC/USD) / 1e18Safety guarantees
The rate can only be written by the wired XDC publisher (LayerZero peer auth, 2 required DVNs). Each update is additionally guarded on the destination:
- Monotonic — the rate cannot decrease (share price only grows). A rare validator-loss writedown requires an explicit, one-shot owner override, so a spurious downward push is rejected by default.
- Step-capped — each update may rise by at most
maxStepBps(default 1%), blunting a bad or manipulated push. - Staleness —
updatedAtplusisStale()let you reject data older than the configured window: 8 days on all four chains (raised from 2 days on 2 Oct 2026). StakeXDC pushes the rate whenever it changes (the vault's rate moves in roughly monthly reward steps) and refreshes it at least weekly; the push is permissionless so it cannot be censored.
If pushes lapse long enough that legitimate cumulative growth would exceed the
per-update step cap, the bridged update is rejected and the feed goes stale
(safe: integrators see isStale() and pause) rather than jumping. The owner
restores liveness with a break-glass adminSetRate, which still enforces
non-zero and (unless explicitly armed) monotonicity — so it can never silently
mark psXDC down.
Recommended usage
Treat the oracle as the exchange-rate leg only; keep your own market
XDC/USD feed for the base asset. For collateral, apply your standard
loan-to-value and liquidation parameters to the composed psXDC/USD price, and
reject updates when isStale() is true.
Addresses
Per-chain oracle addresses are in Deployed Contracts & Addresses. Reach out at [email protected] for listing support.
Vault architecture (V3.2)
psXDC is a fully non-custodial ERC-4626 tokenized vault: share-based pricing, direct masternode integration, self-service withdrawals with a ring-fenced queue budget, and time-locked governance.
Smart contract reference
Technical reference for PrimeStakedXDC_V3_2, the live psXDC vault: user functions, read-only helpers, operator and risk functions, delayed governance, the permanent-ledger model and the events worth indexing.