CONTRACTSource of Truth
Four contracts define the complete state of the NEXUS protocol on Arbitrum Sepolia. Every value the API returns is derived from these. Every receipt records outcomes computed from them. They are not a reference — they are the ground truth.
Contracts define. API reads. Receipts prove.
This page is not a directory. It is the base layer of the verification chain. Understanding what each contract holds — and what the engine reads from it — is prerequisite to verifying any API response or audit receipt independently.
/api/status and /api/vaults is derived from a direct eth_call to one of these contracts on each cache miss. The mapping is documented below and in API Docs →From contract call to API field
Every value in the API has a direct on-chain source. The table below maps each API field to the contract call that produces it. You can reproduce any response by calling these methods directly at the relevant block number.
Four contracts. All state.
ERC-20 representing total protocol debt. Mint and burn are restricted exclusively to VaultManager via MINTER_ROLE and BURNER_ROLE — no external mint is possible. totalSupply() is the authoritative source of total outstanding NXUSD.
totalSupply() → total_debt_nxusd in all API responses
0x515844Dd91956C749e33521B4f171dac4e04FE07The primary state contract. Tracks every vault's collateral and debt, enforces protocol thresholds, and controls pause state. Every collateral ratio in any API response is derived from this contract's state. Min CR: 150%. Liquidation threshold: 130%.
collateralOf() + debtOf() via multicall for all vault owners → vault CR. minCollateralRatioBps() + liquidationRatioBps() → protocol thresholds. paused() → vault_paused.
0xF09AAD220C6c4d805cF6cE5561B546f51ADFBb03Executes controlled liquidations when vault CR falls below the 130% threshold. 5% collateral bonus incentivizes keepers. KEEPER_ROLE is enforced — unauthorized calls revert. The API does not call isLiquidatable() on-chain to avoid oracle revert; status is computed server-side from CR thresholds.
paused() → liquidation_engine_paused. closeFactorBps() → max debt repayable per liquidation call.
0xF333d9ae2D70305758E714ecBeA938e9377a9f9DChainlink ETH/USD feed wrapper with a freshness window enforced by maxDelay(). Reverts if the feed has not been updated within the allowed window. On revert, the engine falls back directly to the Chainlink aggregator. On Arbitrum Sepolia testnet, the feed does not update at the required frequency — OracleModule consistently reverts and oracle_stale is set to true across all API responses.
getPrice() → eth_price_usd (primary). On revert: Chainlink.latestRoundData() → eth_price_usd (fallback). Revert → oracle_stale: true in all API responses.
0xa1BD5AF1174140caB018e46eBCFEf1d005c3df84You don't need this API.
Every read function listed above is callable via eth_call on any Arbitrum Sepolia RPC endpoint. No wallet, no authentication, no dependency on this interface. If the API returns a value you want to verify, call the contract directly at the same block number. The numbers must match.
API responses are derived from them. Receipts record what they returned. Verification requires nothing beyond an RPC endpoint and these addresses.