kUSD / USDC market on Euler (Base): a redeemability-verifiable synthetic dollar

Summary

We are Kerne. We are building kUSD, a delta-neutral synthetic dollar on Base, and we would like to open an isolated Euler v2 market with kUSD as collateral and USDC borrowable. We are posting here because Euler is the one lending surface designed to onboard new stablecoins and their yield-bearing derivatives in isolated, risk-contained markets, and because we think kUSD brings something specific to that surface: a dollar whose backing you can verify yourself, on-chain, right now.

We are early and we will say so plainly throughout this post.

What kUSD is

kUSD is a synthetic dollar backed by a delta-neutral basis position: spot ETH collateral on Base, hedged with a short ETH perpetual on Hyperliquid, plus an on-chain Peg Stability Module. kUSD mints and redeems against USDC through that PSM, so the peg is enforced by redeemability, not by secondary-market depth.

  • kUSD v2 (Base): 0x5C2EfdF0D8D286959b42308966bc2B97f5680AA3 (verified on BaseScan and Sourcify)
  • skUSD, the ERC-4626 staked wrapper: 0xdEd74F7E06efc76455C07418b8b74Cc2bc009DB4
  • USDC (Base): 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
  • Governance: 2-of-3 Gnosis Safe 0x52d3E450bA6c299B1B07298F1E87DD74732D4877; core vault logic is immutable and the deployer key is renounced.

Note on the ticker: kUSD here is the Kerne Synthetic Dollar at the Base address above. Please match on that address, not the symbol string, since “kUSD” is used by other projects on other chains.

Honest stage

We are genuinely at genesis. Outstanding kUSD supply is on the order of a hundred tokens and total collateral is in the low hundreds of dollars. We have not completed an external audit yet (an audit engagement is in progress). We are not going to dress that up. We are asking for a small, conservative market, not a large one.

Why we think kUSD is a good fit for an isolated Euler market

  1. The backing is verifiable. We publish an hourly EIP-191 signed proof-of-reserve at kerne.fi/api/por/signed that binds the PSM USDC reserve and the outstanding kUSD liability to a signature you can recover yourself. Anyone can verify it in-browser with no key at Verify any signed attestation, in your browser | Kerne. Most stablecoins ask you to trust an attestation; here you can re-derive the solvency ratio from public inputs.
  2. There is a live precedent to underwrite against. We already run a permissionless Morpho Blue market on Base with kUSD as collateral and USDC as the loan asset, at a 62.5% liquidation LTV (market id 0xdc6a28b2941b3d32affc71cdeeb10e9779ff2a8ba1dcabc258e7b61f9a11beb3). An Euler market would give kUSD a second, looping venue and, on Frontier, a distribution surface it does not have today.
  3. It puts anchor capital to work. Right now kUSD can only sit in a self-seeded Aerodrome pool. As Euler collateral it can be borrowed against and looped, which is the difference between a deposit sitting flat and the same deposit generating real borrow-side activity.

Oracle

This is the part we care most about getting right, because kUSD is thinly traded and a naive market-price oracle would be a bad-debt vector.

kUSD’s only DEX venue is an Aerodrome stable pool of roughly 240 USD depth. A price read off that pool is trivially manipulable, so we do not use it as a price input. We propose one of two oracle configurations:

  • Baseline: a FixedRateOracle(kUSD, USDC, 1_000_000) (1 kUSD = 1.000000 USDC) chained to USD through the Chainlink USDC/USD adapter. This matches how Frontier prices other pegged stablecoins. It is depeg-blind by design and bounded by the conservative LTV below.
  • Preferred: a custom IPriceOracle adapter we fund and deploy that prices kUSD from the on-chain PSM reserve over outstanding-liability ratio, capped at the peg, using the thin pool only as a fail-closed tripwire. It marks kUSD down in real time if the backing is ever impaired, while staying unmovable by a few hundred dollars of pool flow.

For skUSD as collateral, the EulerRouter can price it natively with govSetResolvedVault(skUSD, true), which resolves shares via convertToAssets on top of the kUSD/USD adapter. We have written the full feed spec and can share it.

Proposed risk parameters

Conservative, sized to a genesis asset. We would rather open small and raise on clean utilization.

Parameter Proposed
Collateral kUSD (and optionally skUSD)
Borrowable USDC
Borrow LTV 60%
Liquidation LTV 65%
Supply cap (launch) 50,000 kUSD, raise to 250,000 on clean utilization
Borrow cap (launch) 40,000 USDC, raise to 200,000 with the supply cap
IRM adaptive / kink, target utilization 90%, base rate 0%, approximately 5 to 8% APY at kink

The 65% liquidation LTV caps a recursive loop at about 2.86x and matches the LTV we already run on the live Morpho market, so there is a public data series to underwrite against. We are happy to defer final caps and curve constants to Euler Labs or a risk reviewer.

What we are asking for

Guidance on the cleanest path to a kUSD market on Euler v2 (Base): whether to self-deploy an ungoverned EVK vault and request Frontier inclusion, or to run this as a managed market with a risk reviewer setting parameters. We are ready to deploy the oracle adapter and the vaults, and to iterate on parameters.

Links:

Thanks for reading. Happy to answer anything, including the parts that are still early.

Quick update to keep this current. Three things have moved since we posted.

First, the book: outstanding kUSD is now about 1,114.74 (it was on the order of a hundred at posting), backed by a combined 1,115.85 USDC across the two PSM contracts, roughly 100.10% on the PSM leg. This is still founder-seeded genesis capital and concentrated, we are not implying organic demand, but flagging the corrected figure so any review is against live numbers.

Second, two housekeeping corrections to the original post. On addresses: the staked-vault (skUSD) address predates a July 3 redeploy that reset the vault share-price accounting to par, so the live staked vault is now 0x96F5102C15b839757f811A98CEc3725Ac21DfA14 (kUSD itself is unchanged at 0x5C2EfdF0D8D286959b42308966bc2B97f5680AA3, and the old staked-vault address is retired). On governance: the original post said the deployer key is renounced, which is not yet accurate for the redeployed staking vault; it is currently deployer-controlled with rotation to the 2-of-3 Safe pending, and the live custody state is always at skUSD Admin Status | Kerne Protocol.

Third, a security audit is underway, with fieldwork started this week, which was the main open gap when we posted. kUSD’s protocol page is also live on DefiLlama now, and their maintainers merged our price feed fix this month, so the TVL can be read off-site rather than only on our endpoints.

Everything remains verifiable at kerne.fi/api/por/signed. Still asking for the same small, conservative market, and happy to hand a risk reviewer the full parameter sheet and the oracle feed spec whenever useful.

On the Morpho: the proposal describes “a live precedent to underwrite against” and “a public data series,” but the linked market currently shows $0 supplied, $0 borrowed, no transaction history, and carries Morpho’s "Market is not listed’ warning, with a fixed 1:1 oracle. Can you clarify what data series a reviewer should underwrite against, or should this argument be set aside until the market has activity?

You are right to press on this, and the short answer is yes, set the data-series argument aside. Let me be precise about what the Morpho link supports.

The market is real and on-chain: it exists at the id in the post, kUSD collateral against USDC, roughly 62.5% liquidation LTV, 1:1 oracle. It has no usage yet. Supply and borrow are zero and there are no liquidations to study. The “Market is not listed” banner is a separate matter: it means the market was created permissionlessly and is not curated or whitelisted, which is true regardless of activity. So “a public data series to underwrite against” was the wrong claim and I withdraw it. There is no history of borrows, repayments, or liquidations to fit anything to until the market has flow. Thanks for catching it.

What that deployment shows is narrower. We committed the same conservative liquidation LTV we are proposing here to a live, immutable market, and that parameter is fixed on-chain and cannot be edited. It speaks to the parameters only. It says nothing about demand, and I should have scoped it that way in the post.

On the real question, what a reviewer can evaluate for a market this early, there are two things that do not depend on a utilization history.

First, the backing, read directly on-chain. kUSD mints and redeems 1:1 against USDC through the PSM, so the peg is a redeemability property, not a liquidity one. The live mint module holds the kUSD MINTER_ROLE and the retired instances have it revoked, which you can read in one call each. The USDC reserve behind outstanding kUSD is published hourly as an EIP-191 signed statement at kerne.fi/api/por/signed and is re-derivable in-browser with no key. For a market where kUSD is the collateral, that solvency read is what you underwrite, and it holds whether or not the Morpho market ever sees a deposit. Right now it is about 1,115.85 USDC of reserve against about 1,114.74 kUSD outstanding, roughly 100.1 percent.

Second, the stage. That outstanding kUSD, the ~1,114.74 above, is founder-seeded and concentrated, with no organic demand yet. I will not dress that up as traction. It is why we asked for a small market sized to genesis and offered to defer final caps and the curve to a risk reviewer.

One process update relevant to a reviewer, since this thread went quiet: our first external review, by Hexens, delivered its initial report on July 20 and remediation is underway. I will not call the code audited until the final report is public, but the engagement is well past the fieldwork stage.

To put a concrete ask on it: underwrite the genesis market on the verifiable backing and the conservative parameters, since there is no demand history to use. If it helps, I can hand a reviewer the full oracle feed spec and the parameter sheet so caps get sized against the reserve, which is the number we can actually verify.