USCSTABLECOIN PROTOCOL

The stablecoin trilemma,
solved.

A revenue-generating, dual-collateral stablecoin that holds all three properties at once — decentralised, stable, and capital-efficient — spanning a dedicated Cosmos EVM chain and Ethereum, with an internal credit module, bond market, AMM, and an autonomous cross-chain peg engine.

DecentralisedReal ETH on Ethereum, all logic on its own chain — no off-chain custodian.
Stable80/20 basket at oracle prices; an autonomous loop defends the peg on-chain.
Capital-EfficientBacking earns staking yield & fees → 4–7% APR to USC that locks.
⚠ Testnet Version ● v2 Live — Cosmos 9000 + Sepolia 17 contracts Core July 11 · P2P ramp Aug 1, 2026

01What USC Protocol Is

USC is a $1 stablecoin backed by a dual-collateral basket — 80% mETH (synthetic ETH, 1:1 backed by real ETH locked on Ethereum) and 20% WCAPE (the wrapped native token of the protocol's own chain). Every part of the system feeds one loop: real fee revenue is harvested, converted to backing, and paid out as yield to USC holders who lock their coins.

Fully collateralised

Every USC is minted against mETH + WCAPE at live oracle prices. Redeemable at any time for the underlying basket.

Revenue from day one

Bridge fees (0.1% in / 0.2% out), mint & redeem fees (0.1%), AMM swap fees (0.3%), and staking yield on bridged ETH (3.5% APR, simulated on testnet).

Internal credit market

The Treasury Credit Module (TCM) pays 4–7% APR on 90-day locked USC — the rate tracks the support ratio, is fixed the day you deposit (grandfathered), and is funded entirely by the protocol's own fees.

Dual-chain

Real ETH lives on Ethereum (Sepolia). All protocol logic runs on a dedicated Cosmos EVM chain (ID 9000, native token CAPE) with 1-second blocks.

CAPE demand engine

The 20% WCAPE backing requirement means every USC minted creates structural buy pressure for CAPE — absorbing supply distributed by the LPBonder's emissions budget.

Self-defending peg

An autonomous liquidity loop borrows against staked ETH when support falls below 1.02 and repays automatically above 1.30 — sized smoothly by the live deficit, no human trigger.

Testnet status This is the testnet build. ETH staking yield is simulated (3.5% APR accounting, no real staking), the bridge is operated by a single relayer, prices come from CoinGecko/Chainlink via one updater, and the chain runs a single validator. The production roadmap (audits, decentralised relaying, real staking via Lido/EigenLayer) is in §9 Roadmap.

02Architecture

Two chains, one relayer, ten contracts. Ethereum holds the real ETH; the Cosmos EVM chain runs everything else.

ETHEREUM SEPOLIA Chain 11155111 · real ETH Merchant.sol Locks real ETH · bridge fees 30% reserve / 70% staked Chainlink ETH/USD price source RELAYER watches events both ways pushes prices every 60 s triggers revenue harvest 24 h COSMOS EVM CHAIN Chain 9000 · native CAPE · 1 s blocks MerchantBridge mints / burns mETH PriceOracle ETH + CAPE USD Treasury mints/redeems USC · 80% mETH / 20% WCAPE · harvests fees CapePool mETH/WCAPE AMM TCM 90 d · 4–7% grandfathered LPBonder bond CLP · 5% disc · 5 d Tokens USC · mETH · WCAPE
High-level topology — the relayer is the only component that spans both chains.

Infrastructure

ComponentDetail
Cosmos EVM nodeEvmos v19, chain ID 9000 (usc_9000-1), native denom acape, 1 s blocks. Runs as evmosd systemd service with auto-recovery wrapper (height-mismatch auto-reset + auto-redeploy + auto-funding).
Ethereum sideReal Sepolia via Alchemy RPC. Merchant contract holds bridged ETH.
RelayerNode.js service (usc-relayer). Watches ETHDeposited (Sepolia → mint mETH), RedemptionRequested (Cosmos → release ETH), ProtocolRevenueReady (Sepolia → mint revenue mETH). Pushes ETH/USD + CAPE/USD to PriceOracle every 60 s.
DeterminismContract addresses are deterministic (deployer + nonce) — chain resets always redeploy to identical addresses.

03The Five Tokens

TokenTypeWhat it isSupply mechanics
USCERC-20The $1 stablecoin. The product.Minted/burned only by Treasury against the 80/20 basket at oracle prices.
mETHERC-20Synthetic ETH on the Cosmos chain. Always 1:1 with real ETH locked in Merchant on Sepolia.Minted by MerchantBridge on deposit, burned on redemption. Also minted for verified protocol revenue.
CAPENativeGas token of the Cosmos chain. The protocol's equity-like asset.Fixed genesis supply. Distributed via the LPBonder's emissions budget; demanded via the 20% backing rule.
WCAPEERC-20Wrapped CAPE (WETH9 pattern). What contracts actually hold.1:1 wrap/unwrap of native CAPE — no privileged minting; total supply always equals CAPE locked in the wrapper.
CLPERC-20CapePool LP share (mETH/WCAPE). The bondable asset — and, once bonded, permanent Treasury backing.Minted/burned by permissionless add/removeLiquidity (Uniswap-V2 share math). Appreciates from the 0.3% swap fee.
Why the 20% WCAPE leg exists It is a deliberate demand engine, not just diversification. Every USC minted forces the minter to acquire CAPE worth 20% of the mint — structural buy pressure that absorbs the CAPE distributed through bonding. The Treasury becomes the largest CAPE holder over time, and rising USC demand mechanically bids CAPE.

04Contract Reference

Nine contracts on the Cosmos chain, one on Sepolia. All verified line-by-line against the deployed source.

Treasury — the mint

Issues and redeems USC against the 80/20 basket, accumulates protocol revenue as mETH, and harvests it into TCM rewards. Roles: DEFAULT_ADMIN_ROLE (deployer), OPERATOR_ROLE (deployer + MerchantBridge).

FunctionAccessBehaviour
buyUSC(meth, cape, applyFee)publicPulls mETH + WCAPE (must be 80/20 by USD value ±2%), mints USC = deposit value. 0.1% fee on the mETH side when applyFee (fee → protocolMethBalance). The bonder route passes false.
sellUSC(usc)publicBurns USC, returns mETH (80%) + WCAPE (20%) at current prices. 0.1% fee: mETH-equivalent moves to revenue pool; the CAPE share of the fee stays as excess backing.
harvestToTCM()public (permissionless)Swaps 20% of protocolMethBalance for WCAPE via CapePool, adds all to backing, mints USC of equal value straight into TCM's rewards pool.
receiveBacking(meth, cape)OPERATORInjects collateral without minting USC — used by the emergency liquidity loop.
receiveProtocolRevenue(meth)OPERATORAccepts bridged revenue mETH into protocolMethBalance.
calcUscSupport()viewBacking USD ÷ active supply (TCM-held USC excluded). Backing = mETH + WCAPE + CLP at fair value. Returns uint256.max when active supply is zero.
registerLpAndMint(lp) v2OPERATOR (LPBonder)Pulls CLP as permanent backing, mints equal-value USC straight into the TCM rewards pool. Fair pricing: P_lp = 2·√(methUsd·capeUsd)/S — manipulation-resistant (uses oracle prices + pool invariant, not raw reserves).
harvestLpFees() v2public (relayer, daily)Converts swap-fee growth on Treasury-held CLP into USC → TCM. Fee isolation via √k-per-share: grows only from fees, immune to price moves and proportional add/remove. Support-neutral by construction.
releaseBacking(meth, cape) v2OPERATOR (bridge)Controlled outflow for loop repayment. Hard guard: reverts unless post-release support ≥ 1.20.
previewBuy / previewSell / fairLpPrice / activeUscSupplyviewQuote + metric helpers for frontends and the loop controller.

TreasuryCreditModule (TCM) v2 — the savings bank

Lock USC for 90 days at a grandfathered APR: the rate in force the day you deposit is written into your deposit and never changes for its duration. The rate offered to new deposits is a smooth linear function of the support ratio — 7% at support ≤ 1.00, 4% at ≥ 1.50 (rate = 7% − 3%·(s−1.0)/0.5). Weak peg → higher rate → more locking → active supply shrinks → peg recovers: the deposit rate is itself a peg-defense instrument. Interest remains capped by the rewards pool (solvency), and locked USC is excluded from the support denominator.

FunctionBehaviour
deposit(amount)Locks USC; snapshots aprAtDeposit = rateFromSupport(now) into the deposit.
withdraw(id)After 90 days: principal + amount × aprAtDeposit × elapsed/year, capped by rewards pool.
allocateRewards(amount)Open — Treasury feeds the rewards pool (harvests, LP registrations, LP fees).
currentAPR() / currentDepositAPR()The rate NEW deposits would lock in right now.
setTreasury(addr)One-time wiring (owner) — lets the rate curve read the live support ratio.

LPBonder v2 — the CAPE distributor (replaced CapeBonder)

Bond CLP tokens (not the raw basket) at a 5% discount, fixed on the deposit day — CAPE price moves during the 5-day lock change nothing. The CLP flows to the Treasury as permanent backing; equal-value USC is minted into TCM rewards. Because the deposited liquidity stays inside the pool, every bond deepens the market that must later absorb its own payout — and keeps earning the 0.3% swap fee for the protocol forever.

Payouts come from a 1,000,000 WCAPE emissions budget endowed at deploy (contracts cannot mint native CAPE — it's the gas token; the hard-capped genesis endowment is the on-chain equivalent of thin-air emissions, with the cap visible as capeReserve). Owed CAPE is reserved at purchase time, so the bonder can never over-promise.

// payout for lpAmount of CLP at CAPE = $P (both frozen at deposit block) usdValue = lpAmount × fairLpPrice capeOwed = usdValue / (P × 0.95) // ≈ +5.26% bonus, fixed forever
FunctionBehaviour
buyBond(lpAmount)Pulls CLP, freezes capeOwed, routes CLP → Treasury.registerLpAndMint() → USC → TCM.
claimBond(id)After 5 days: transfers the reserved WCAPE (unwrap to native anytime).
previewBond(lp)Quote: USD value + CAPE owed right now.
topUpReserve(amount)Anyone can extend the emissions budget.

CapePool v2 — the AMM, now with LP tokens

Constant-product (x·y=k) pool for mETH/WCAPE with a 0.30% fee that stays in reserves (k grows → CLP appreciates). Now issues ERC-20 LP shares ("CLP") with Uniswap-V2 share math, and liquidity is permissionless. Triple duty: price discovery, harvest venue, open market — plus it now mints the asset the LPBonder runs on.

FunctionBehaviour
addLiquidity(meth, cape) v2Permissionless; mints CLP (first mint: √(m·c) − 1000 locked; later: proportional). Use quoteAddLiquidity() to size the WCAPE side.
removeLiquidity(lp) v2Burns CLP for proportional reserves.
swapMethForCape / swapCapeForMethStandard x·y=k swaps, 0.30% fee.
getCapePrice / getCapeOut / getMethOutPrice + quotes (unchanged interfaces).
sqrtKPerShare() v2√k per CLP (grows only from fees) — the Treasury's fee-isolation metric.

MerchantBridge (Cosmos) & Merchant (Sepolia) — the bridge pair

Merchant (Sepolia) locks real ETH: depositETH() takes 0.1% in-fee, splits net 30% reserve / 70% staked (simulated 3.5% APR), and emits ETHDeposited. releaseETH() (relayer-only) pays out redemptions minus 0.2% out-fee. harvestRevenue() (permissionless) bundles accrued fees + simulated yield and emits ProtocolRevenueReady.

MerchantBridge v2 (Cosmos) is the mirror: mintBridge() (relayer-only) mints mETH 1:1 on deposits; redeemBridge() burns user mETH and signals the relayer; mintProtocolRevenue() (relayer-only) mints revenue mETH into the Treasury. The liquidity loop is now a fully autonomous, permissionless controller: executeLiquidityLoop() fires only when support < 1.02, sized smoothly to lift it to exactly 1.05 (over-collateralised model: debt ≤ 70% of pledged staked ETH — a fixed constant, like real lending terms; loan proceeds re-join staking so staged capacity converges to ~2.33× real staked); repayLiquidityLoop() fires when support > 1.30 and retires debt down to a 1.20 floor, hard-guarded by Treasury.releaseBacking(). Both have 1-hour cooldowns; the relayer checks every 5 minutes. Loop mETH is never added to totalLocked — synthetic supply can never enlarge the bridge-out allowance. The pool-seed mETH is also minted directly (not via the bridge), so bridge counters reflect only real Sepolia deposits.

Supporting contracts

ContractPurpose
USCTokenERC-20, mint/burn restricted to Treasury via roles.
MerchantETHERC-20 mETH, mint/burn restricted to MerchantBridge via roles. No rebase, no yield — staking yield flows to TCM as USC instead.
WCAPEWETH9-style wrapper for native CAPE. deposit() / withdraw(), always 1:1 backed.
PriceOracleStores ETH/USD and CAPE/USD (18-decimal). Only the relayer (updater) or owner can push. Exposes isStale() (2 h threshold) — advisory, does not revert reads.

05System Flows

① Bridge in: ETH → mETH

User calls Merchant.depositETH() on Sepolia with real ETH.
0.1% bridge fee is retained; net amount is split 30% reserve / 70% staked (accounting). ETHDeposited(user, net) fires.
Relayer sees the event (3 confirmations) and calls MerchantBridge.mintBridge(user, net) on Cosmos.
User receives mETH 1:1 on the Cosmos chain — usually within a couple of minutes.

② Mint USC

User holds mETH and WCAPE (wrap native CAPE, or buy WCAPE from CapePool with mETH — this purchase is the CAPE demand mechanism).
User approves both tokens and calls Treasury.buyUSC(meth, cape, true). Value ratio must be 80/20 (±2%).
0.1% fee (mETH side) accrues to the revenue pool. USC equal to the net deposit value is minted to the user.

③ The revenue loop (automatic, ~24 h)

harvestRevenue() fees + 3.5% yield · Sepolia Relayer ProtocolRevenueReady mintProtocolRevenue mETH minted → protocolMethBalance harvestToTCM() 20% → WCAPE swap mint USC vs backing TCM rewards depositor yield
Real fees become depositor yield — no external capital involved. Mint/redeem fees and bond flushes feed the same pool.

④ Bond LP tokens

User adds mETH + WCAPE to CapePool (permissionless) → receives CLP shares.
User calls LPBonder.buyBond(lpAmount). Value and CAPE owed are frozen at this block: value ÷ (CAPE price × 0.95) — a 5.26% bonus, immune to later price moves. Reserved from the emissions budget immediately.
CLP flows to the Treasury as permanent backing; equal-value USC is minted straight into TCM rewards — bonds fund depositor yield and deepen the pool at once.
After 5 days, claimBond(id) pays out the WCAPE (unwrap to native CAPE anytime).

⑤ Autonomous liquidity loop (v2)

The relayer checks support every 5 minutes. Below 1.02, executeLiquidityLoop() fires (permissionless — anyone may call).
Loan size = exactly the deficit to reach 1.05 support, capped by stage capacity (debt ≤ 70% of pledged staked ETH). mETH is minted as over-collateralised loan proceeds.
80% goes to Treasury backing; 20% buys WCAPE from CapePool (supporting CAPE in stress); both enter via receiveBacking()no new USC minted. Fresh loan ETH re-joins staking, raising next-stage capacity while the deficit persists.
Recovery: above 1.30 support, repayLiquidityLoop() automatically pulls backing (guarded ≥ 1.20 post-release), converts the WCAPE leg back, and burns the recovered mETH — the loan is repaid, collateral freed.

⑥ Bridge out: mETH → ETH

User calls MerchantBridge.redeemBridge(amount) — mETH is burned, RedemptionRequested fires.
Relayer calls Merchant.releaseETH(user, amount) on Sepolia; 0.2% out-fee retained; net real ETH sent to the user.

06Economic Design

The support ratio

activeSupply = totalEmittedUsc − usc.balanceOf(TCM) backing = totalMeth × ETH_price + totalCape × CAPE_price + totalLp × fairLpPrice // v2: CLP counts as backing supportRatio = backing / activeSupply // loop bands: < 1.02 borrow → 1.05 · idle · > 1.30 repay → 1.20 floor

USC locked in the TCM (deposits + rewards pool) is off the market — it cannot create redemption pressure — so it is excluded from the denominator. This has an elegant consequence: USC minted by harvestToTCM() goes straight into the TCM, so harvests raise backing while leaving active supply flat. Every harvest strictly improves the ratio.

Revenue sources

SourceRateDestination
Bridge deposit fee0.1% (inflow — cheap on purpose)All accumulate as mETH in protocolMethBalanceharvestToTCM() → TCM depositor yield
Bridge redemption fee0.2% (outflow — costlier)
Mint / redeem fee0.1% each side
ETH staking yield3.5% APR on 70% of bridged ETH (simulated on testnet)
AMM swap fee0.3%Accrues into CLP value; the Treasury's CLP share is converted to USC → TCM rewards by the daily harvestLpFees()
Bond (LP route)100% of bonded CLP valueCLP → permanent Treasury backing; USC minted → directly to TCM rewards

Cost of capital

The protocol "borrows" from its own TCM depositors at ≤6% APR, funded entirely by internal fee revenue — no dependency on external capital markets. This is the foundation of the Phase 2 credit facility: lend TCM capacity at 9–12% against a 6% internal cost, keeping a 3–6% spread.

CAPE flywheel — design intent and current gap

Intent: the LPBonder distributes CAPE into the market; the 20% backing rule makes every USC mint buy it back. More USC demand → more CAPE locked in Treasury → scarcer float. The v2 LP design also helps structurally: bonded liquidity deepens the very pool that must absorb bond-exit sells.

Known gap (testnet finding) Per $100 bonded, the bonder locks $20 of CAPE but releases ~$105 of reserve CAPE after 5 days — net +$85 circulating CAPE per bond, and bond buyers are natural sellers of the 5% arb. Mint demand must outpace bond emission or CAPE price sags, which thins the 20% backing leg. Candidate fixes on the roadmap: vested/auto-staked bond payouts, veCAPE utility (APR boost, fee rebates, credit priority), revenue share to CAPE stakers, revenue-funded buyback-and-lock, and a dynamic bond discount that throttles when CAPE weakens.

Locked design decisions

DecisionRationale
TCM-held USC excluded from support denominatorLocked USC cannot run on the Treasury.
Fee only on the mETH side of buyUSCWCAPE enters untouched — avoids double-penalising the CAPE leg.
Credit USC = regular USC (no separate cUSC)Accounting-only separation; credit-line protocols are blocked from sellUSC(), ordinary holders always redeemable.
No flash loans; no external yield on TCM fundsExternal smart-contract risk not worth it at this stage.
One bonder type active at a timePrevents stacked WCAPE sell pressure.
Governance tokens as credit-line conditionAccumulate influence in borrower protocols without a separate bonder.

07Parameter Sheet

ParameterValueWhere
Collateral ratio80% mETH / 20% WCAPE (±2% tolerance)Treasury
Mint / redeem fee0.10%Treasury FEE_BPS
Bridge fees0.10% deposit · 0.20% redeemMerchant
Staking APR (simulated)3.50% on staked ETHMerchant
Bridge ETH split30% reserved / 70% stakedMerchant + MerchantBridge
TCM lock / APR90 days / 4–7% (support-linked, grandfathered per deposit)TCM v2
Bond discount / lock5% fixed at deposit day / 5 daysLPBonder
LPBonder emissions budget1,000,000 WCAPE (genesis endowment, hard-capped)LPBonder
Loop bandsborrow < 1.02 → target 1.05 · repay > 1.30 → floor 1.20MerchantBridge v2
Loop borrow LTV / cooldown70% of pledged stakedEth (fixed constant) / 1 hMerchantBridge v2
AMM swap fee0.30%CapePool
Oracle push cadence / staleness~60 s / 2 h advisoryRelayer + PriceOracle
Harvest cadence~24 h (relayer timer)Relayer

08P2P Fiat Ramp v2 — deployed, closed

A peer-to-peer route into USC for people who cannot use a centralised exchange. Seven contracts, live on chain 9000 since 1 August 2026, and deliberately switched off until a juror pool exists.

The ramp is CLOSED and cannot trade. briberyCap is 0, so MakerPot.maxTrade() returns 0 and every openSellTrade / openBuyTrade reverts. The contracts are live; no value can move through them. Opening the ramp is a separate, deliberate transaction that refuses to run unless a staked juror pool justifies the trade cap.

The rule everything derives from

Whoever can press "decline" must have something at stake. When a maker sells USC he holds that button, so his collateral headroom is the stake and the fiat buyer posts nothing at all — no deposit, no gas token, no verification, no reputation minimum. When a maker buys USC the button moves to the seller, because only the recipient of a bank transfer can know whether it arrived; so that seller escrows 120%.

The asymmetry that forces this is simple: a claim that money moved can be machine-checked against amount, timestamp, currency and rail format. A claim that money did not arrive cannot — no oracle sees an absence. Where the software gate is unavailable, capital is the only gate left.

How a trade resolves

Confirmed

The party who can verify receipt releases the escrow. Seconds. 0.1% fee on the USC leg, on successful completion only.

Silence

Escrow auto-releases to the counterparty. Inaction must never be how someone keeps both the fiat and the coins.

Declined, uncontested

Instant revert. A decline is not a dispute — it is a unilateral cancel, and it records nothing against anyone.

Declined, contested

The only path that reaches a jury, and only after clearing an automatic admissibility check.

Why griefing does not scale

Three properties do the work. Audits examine makers, not cases — a million fabricated complaints against one maker produce exactly one investigation of his whole history. The daily audit budget is an absolute number derived from bonded-maker count, never a percentage of volume, so attack volume cannot inflate the workload. And contested declines rank a maker in a priority queue, they never trigger an audit — a hard trigger would let the attacker decide how much work the system does.

Worked example: an attacker spins up 10,000 wallets against a single maker. Every trade times out or is declined, reverting instantly with no score recorded. The complaints collapse into one audit, cleared in a single pass. Platform-wide latency stays at a few days regardless of attack size — attack volume does not appear in the formula at all. To lengthen the queue the attacker must become a bonded maker himself, which costs real capital locked for a month.

What the machine check does and does not do. Gate 2 verifies a payment claim is well-formed and internally consistent — exact amount, matching currency, timestamp inside the window, reference matching the declared rail's format, sender name matching the declared name. It does not verify money moved; there is no oracle into bank rails. It is a junk filter, not a truth oracle. Document uploads are deliberately never accepted as the gate — any file is forgeable at zero cost. Forms gate, documents inform.

The juror system

Disputes that survive the gates go to a randomly drawn, stake-weighted panel voting under commit–reveal. Panels escalate 3 → 7 → 15 → 31 → plenary, with the trade's value setting a floor the panel can never go below and randomisation extending only upward — an attacker can know the minimum but never where a case will stop.

Every level settles against the final verdict, not its own panel's majority. A juror outvoted locally but vindicated at the end is paid, not slashed. This moves the Schelling point from "what will these two say" to "what will the largest panel conclude", which is much closer to the truth.

The bound that sizes everything

Bribing a panel becomes profitable above a hard limit, so the maximum single trade is derived from the live juror pool:

max_trade  ≈  slash_fraction × (pool − top_holder_stake) ÷ 2

Sized off pool minus the largest holder, never the headline total — plenary is stake-weighted, so a single holder above half the pool would decide every case alone with no bribery required. A consequence worth stating plainly: a whale cannot buy a higher trade ceiling. Adding a 90,000 USC juror alongside ten 1,000 USC jurors moves the cap from 1,800 to 2,000, not to 20,000.

Jurors stakedPoolMax single tradeAppeal depth available
000 — ramp cannot open
1010,000 USC~1,800 USC3 → 7
2222,000 USC~4,200 USC3 → 7 → 15
500500,000 USC~100,000 USCfull ladder
Not production-ready — two known shortcuts. Randomness comes from block.prevrandao, which on a single-validator chain is proposer-influenceable, and it is load-bearing in both juror selection and the escalation ceiling; a VRF is the real version. And the audit verdict itself is still a human call under single-EOA admin. Neither matters while the ramp is closed; both must be fixed before it opens to anyone.
Honestly unsolved. Chargebacks on reversible payment rails are outside the protocol entirely — a reversal after settlement is invisible on-chain, so the mitigation is restricting to irreversible rails. Reputation farming via self-dealing is cheap and not yet addressed. Partial, late and name-mismatched payments need an explicit deterministic rule rather than auditor discretion. Storing bank identifiers, even hashed, is GDPR exposure. And the bootstrap problem is untouched: someone has to be the first maker and the first juror, and at zero volume neither earns anything.

09Current Deployment (Testnet)

Cosmos EVM — chain 9000

ContractAddress
WCAPE0xC5dfeab583C6bD8A5E536b17Fc35E6D1ED6680F1
MerchantETH (mETH)0x208293e3D6720FDE6b8367463C4773b98C5707DD
USCToken0xcC4f9d2C7Db111bF3ac915440508E57e9c66E09e
PriceOracle0x5073C4C6FE8a53c93cEBD5eE9Ddc821464C65e58
CapePool0x61b716980210717A5c0ea5B9DA6A6Be0671e1Cba
Treasury0x8fcf5027Bb28fd5a1afb567D37F3EaE2cBd3c4F3
TreasuryCreditModule0xc82dD71f4132a701f1c1919C41cD463E6A633D63
LPBonder0x7Ae15e88D0b3805720877E5F973bE9c199FA2B7A
MerchantBridge0x9CB908fB84078844e0f295e73Fc9Bf42B6229cb1

P2P ramp v2 — chain 9000 (deployed 1 Aug 2026, closed)

ContractAddress
MakerPot0xD895522F0663fA3Edf2BEF40c636839b2F5E5599
RampEscrowV20x2e77562b0627c61Be44854018Fdcd37C203061ba
Gate2Validator0x261569676cD5BD3F56595604d30D52e004b097E5
JurorStaking0xA94cCb263361352Aaf09B08a69D0a364b3F312a5
Arbitration0x36FB986a372E42781e609BE23C05b1596C5E62cd
JurorFund0xFa5FB0277342bCe28913E934Bc2c6fD02dE4Ae9D
AuditQueue0x34D12827f97115C5A8795690807e4F6294351e81

Compiled solc 0.8.24, evm target paris. The v1 ramp pair — RampEscrow 0x419a…5636 and JurorArbitration 0x6816…93b2 — remain deployed but are superseded and unreferenced. See §08 for why the ramp is closed.

Ethereum Sepolia — chain 11155111

ContractAddress
Merchant (bridge entry)0xea222799c04CEfDe1579D7750ADDdd7245833037
Addresses are NOT permanent — corrected July 2026. Cosmos addresses are deterministic in deployer + nonce, so a clean chain reset reproduces them. A contract upgrade does not: Treasury, LPBonder and MerchantBridge all moved on 2026-07-27 when the support ratio was extended to exclude locked collateral. Treasury cannot be upgraded alone — LPBonder and MerchantBridge hold it as an immutable constructor argument with no setter, so all three move together, and because MerchantBridge inherits BridgeGuard, its redeploy also resets the signer registry and changes the EIP-712 domain (invalidating previously-issued attestations). Frontends, the relayer, co-signers, the monitor and the claim service must all be repointed after any such migration. Use scripts/migrate-core-support.js, which pre-flights every required permission and aborts before deploying rather than half-migrating.
Resilience (Sessions 6–9) The node self-heals: evmosd-wrapper.sh auto-detects height mismatches after ungraceful reboots and resets the chain; usc-autosetup redeploys contracts and refunds wallets automatically; the relayer retries on connection loss, persists processed bridge events (no double-mints/double-releases across restarts), and runs the loop manager + daily harvests. The ETH leg was migrated from local Anvil to real Sepolia (July 2026).
Manual deploy rule (Session 9 lesson) Never run a manual deploy while usc-autosetup can fire — it races the deploy with the same key and scrambles the deterministic addresses. systemctl disable does NOT prevent it (evmosd's hook starts it explicitly) and mask fails (unit lives in /etc). Working method: sudo sed -i '1a exit 0 # TEMP-DISABLED-FOR-DEPLOY' /home/micha/usc-autosetup.sh before, remove the line after — and verify the removal, because while it is disabled nothing self-heals. Corrected Aug 2026: the "deployer nonce must be 0x0" rule applies only to a full chain-reset redeploy, where addresses must reproduce deterministically. For an additive deploy the nonce is simply whatever it is (85 when the ramp shipped) — note the value first so you can tell whether anything else moved it mid-deploy. Autosetup also restarts services unprompted: on 1 Aug 2026 evmosd read inactive and then active two minutes later with nobody having started it. Full runbook in UPGRADE_NOTES.md.

10Roadmap — The DeFi Central Bank

The stablecoin is the foundation. The endgame is a full-stack monetary system: currency, savings rate, credit facility, deposit insurance, and settlement.

Phase 2a — LPBonder ✅ SHIPPED (v2, July 2026)

LP tokens as Treasury backing — live. Three revenue streams per bond: discount, USC to TCM, perpetual swap fees harvested daily. Deeper pool → less harvest slippage → better yields.

Phase 2 — CreditFacility + CreditAdapter

Lend TCM capacity to whitelisted protocols at 9–12% (6% internal cost). Enforcement stack: algorithmic credit score, destination whitelisting, RevenueInterceptor (auto-repayment from borrower fee income), governance-token deposits, quarterly maintenance fee.

Phase 3 — InsurancePool (DeFi FDIC)

Protocols pay 0.5–2% annual premiums on TVL → "USC Insured" badge. Depositors covered up to 80% (max 10,000 USC). Claims paid from accumulated reserves — never from new USC. TCM backstops catastrophic events.

Endgame — Settlement layer

USC liquidity on mainnet (Curve/Uniswap), sUSC as a composable yield token, USC as the unit of account for inter-protocol credit and insurance.

Production hardening checklist

ItemReplaces
Real ETH staking (Lido / EigenLayer)Simulated 3.5% APR
Multi-source oracle + deviation circuit breakersSingle relayer pushing CoinGecko prices
Threshold-signature / multi-relayer bridge, mint caps, on-chain proof-of-reservesSingle relayer key
Multisig + timelock on all admin rolesDeployer EOA
Keeper-automated liquidity loopManual owner trigger
Validator set / shared securitySingle validator
Audits + bug bounty