Documentation

Contracts

Every deployed address on X Layer testnet.

Addresses come from the app's own registry

This page reads the same configuration the interface uses, so it cannot drift out of sync with what is actually deployed.

What each contract does#

ContractRole
HaltControllerThe five-state machine. Reads the oracle's pause flag and gates everything else.
MarketCollateral, debt, LTV, liquidations, interest and fixed-term loans. Never holds lender cash.
LenderVaultERC-4626 vault holding the USDG. Halt-gated, settlement-aware redemptions.
InterestRateModelKinked utilization curve. Stateless, so every market shares one.
SwapModuleOracle-priced swap standing in for a DEX. Halt-gated.
LeverageZapStateless leverage and multiply. Takes the market as a parameter.
MultisigPropose, confirm, execute. Threshold-based.
TimelockOpenZeppelin TimelockController. Owns the risk-bearing contracts.
FaucetPermissionless collateral faucet, one claim per address.

Shared across all markets#

Markets#

Each market is a fully isolated stack with its own collateral token, faucet, oracle, halt controller, vault, market and swap module. That isolation is the point: halting one leaves the other four trading.

NVIDIA (wNVDAx)

Tesla (wTSLAx)

Apple (wAAPLx)

Microsoft (wMSFTx)

S&P 500 ETF (wSPYx)

Ownership#

ContractOwner
MarketTimelock
LenderVaultTimelock
HaltControllerTimelock
InterestRateModelTimelock
OracleMultisig
SwapModuleMultisig
LeverageZapNo owner, stateless
FaucetNo owner, permissionless

See Governance for why the split runs this way.

Verifying for yourself#

Every address above links to OKLink. The parameters on Risk parameters are all public getters, so maxLTV(), fixedMaxLTV(), settlementBounty() and the rest can be read directly rather than taken on trust.

Addresses change on core upgrades

The contracts are not proxied. A change to Market or LenderVault logic means a new address for both, since each holds an immutable reference to the other. Check here rather than relying on a copy made earlier.