Skip to content
Kerne documentation

How kUSD works, and how to check it yourself.

kUSD is a dollar on Base, backed one for one by USDC in three PSM contracts anyone can read. Start here to mint, stake and exit, and to verify every number from chain.

Mint, stake, exit

BaseOn Base, chain 8453
  1. 01
    USDCkUSD

    Mint

    Send USDC to the PSM. Receive kUSD one for one, less the fee.

  2. 02
    kUSDskUSD

    Stake, if you like

    Deposit kUSD in the vault and hold skUSD. The share price carries the yield.

  3. 03
    kUSDUSDC

    Exit

    Redeem kUSD for USDC in one transaction, up to the USDC held in the PSM you redeem from (read live). No lockup or cooldown.

PSM 0xaBDE1138…70569803No oracle sets the mint price. Reserves signed every hour.
All chapters

How kUSD works on Base

kUSD is a dollar on Base, backed one for one by USDC held in three Peg Stability Module contracts. You mint it and redeem it in a single transaction, with no lockup and no cooldown.

PSM fee ladder

Larger tickets pay less. Charged on the way in and on the way out.

USDCUSDC to kUSD, one for one
10 bps
Under 50,000 USDC
8 bps
From 50,000
7 bps
From 250,000
5 bps
From 1,000,000
Concepts: tokens, vaults and reserves

Tokens. kUSD is the dollar, one ERC 20 at 0x5C2EfdF0…f5680AA3 on Base, verified on Sourcify and Basescan. skUSD is the vault share.

Vaults. The PSM at 0xaBDE1138 is the only contract that mints kUSD. The skUSD vault at 0x96F51…c21DfA14 is an ERC 4626 wrapper: stake kUSD, receive skUSD, and the share price carries the yield.

Reserves. The live read is at kerne.fi/api/por, and the hourly signed statement is at kerne.fi/api/por/signed. Every line reproduces from chain with a public RPC, so no custodian attestation is needed to check the backing.

Choose your path

Three things most people come here to do.

Check the reserves yourself

The live unsigned JSON read returns the backing, supply and block. The hourly signed statement is at kerne.fi/api/por/signed.

GETkerne.fi/api/porLive from Base
// Live reserves, read from Base. The hourly signed statement is at /api/por/signed.
const por = await fetch("https://kerne.fi/api/por").then(r => r.json());

{
  "protocol": "Kerne Protocol", "chain": "base", "chainId": 8453,
  "blockNumber": 51010541, "timestamp": "2026-09-07T19:47:10.678Z",
  "reserves": {
    "psmMint":     { "address": "0xaBDE1138aa1Ce88d1dF06422C0c3b05D70569803" },
    "stakedVault": { "address": "0x96F5102C15b839757f811A98CEc3725Ac21DfA14" },
    "multisig":    { "address": "0x52d3E450bA6c299B1B07298F1E87DD74732D4877" },
    "psm":         { "usdcHeld": 1110.888006 }
  },
  "liabilities": { "kUSD": { "address": "0x5C2EfdF0D8D286959b42308966bc2B97f5680AA3",
                            "outstanding": 1109.707154 } },
  "solvency": { "status": "fully-backed", "psmSolvent": true, "psmSolvencyPct": "100.11%" },
  "attestation": { "kind": "rpc-self-attest",
                   "canonicalEndpoint": "https://kerne.fi/api/por" }
}
A read from block 51010541 on Base.Open the endpoint

The contracts

Seven addresses on Base. Each one opens on Basescan.

Browse the chapters

Twenty one chapters in five parts, from the first idea to the risk disclosures.

Kerne’s kUSD is always backed by one real dollar.

© 2026 Kerne Protocol. Built on Base.