A non-custodial, decentralized stablecoin backed by fixed-yield derivatives.
NoFrame lets holders of fixed-yield assets (such as Pendle Principal Tokens) put that collateral to work: they open a collateralized debt position (CDP) and mint fixUSD, an over-collateralized stablecoin they can use across DeFi while still earning the fixed yield on the collateral underneath.
The protocol is an immutable core inspired by Liquity and Prisma Finance, adapted for tokenized fixed-yield collateral. Protocol parameters, the emission schedule, fees and new collateral types are governed by the NoFrame DAO.
- Minting. A user opens a CDP for a supported collateral, deposits the fixed-yield token and mints fixUSD against it. Each position must keep a Minimum Collateral Ratio (MCR) and carries a small debt reserve used as gas compensation on liquidation.
- CDP. Each position tracks a collateral balance and a fixUSD debt balance. Users add or withdraw collateral and borrow or repay debt at any time; the position closes once its debt is fully repaid.
- Redemptions. After a bootstrap period, anyone can redeem fixUSD for the underlying collateral at face value (minus a redemption fee), which keeps the peg by arbitraging the lowest-collateralized positions first.
- Liquidations. Positions that fall below the MCR are liquidated. The Stability Pool absorbs the debt and receives the seized collateral; any remainder is redistributed across active positions.
- Stability Pool. fixUSD depositors backstop liquidations and, in return, earn the discounted collateral seized from liquidated positions plus protocol incentives.
- Oracle. Collateral is priced through an
OracleRouterthat resolves a per-collateral oracle. The reference oracle prices a Pendle PT via a Chainlink asset/ETH feed, a Chainlink ETH/USD feed and the Pendle market TWAP.
src/
├── core/ CDP engine
│ ├── Controller.sol system registry, roles, pause, ownership
│ ├── Factory.sol deploys a market (TroveManager clone) per collateral
│ ├── MarketCore.sol per-collateral CDP accounting, redemptions
│ ├── BorrowerOperations.sol open / adjust / close position entry points
│ ├── LiquidationManager.sol single and batch liquidations
│ ├── StabilityPool.sol liquidation backstop + collateral gains
│ ├── Stablecoin.sol fixUSD token
│ ├── MarketSorting.sol sorted list of positions by collateral ratio
│ ├── OracleRouter.sol per-collateral price routing
│ └── OracleTypeETH.sol Chainlink + Pendle TWAP PT oracle
├── dao/ governance & emissions (TokenLocker, AdminVoting,
│ EmissionSchedule, IncentiveVoting, Treasury, GovToken, …)
├── staking/ Curve / Convex deposit adapters for collateral
├── getters/ Getter.sol — aggregated frontend read helpers
└── interfaces/ protocol interfaces
src/ protocol contracts
script/ deployment scripts (Foundry)
test/
├── unit/ local unit tests on mock collateral + mock oracle (no RPC)
├── fork/ integration tests against a live Arbitrum fork
└── utils/ test harness, mock ERC20 and mock oracle
broadcast/ recorded on-chain deployments
Requires Foundry.
git clone --recurse-submodules <repo-url>
cd noframe-core
forge buildRun the unit suite (self-contained, no external services):
forge testThe test/unit suite deploys the whole system locally against a mock collateral
and a mock oracle, so it runs in CI without secrets. The test/fork suite is
skipped automatically unless an Arbitrum RPC is provided:
RPC_ARBITRUM=<https-arbitrum-rpc> forge test --match-path "test/fork/*"MVP deployment on Arbitrum (chain id 42161):
| Contract | Address |
|---|---|
| Controller | 0x8793f5925352a851d5e9cf1564f290d11fd2f835 |
| Factory | 0xd1c10b8f5b9319fb7c982fd1086b55d2cc729244 |
| BorrowerOperations | 0x6e9ad5ee83a5693c432cd58c0e81608cbd536e5b |
| MarketCore (impl) | 0x710182d57eeed78a2176823bdfaff4f5b2de03bb |
| Stablecoin (fixUSD) | 0x4418969d62a7db5aa87a60f33a958382dca75b61 |
| StabilityPool | 0xe93f814b8597e187ef730579fdf61b87b3c41936 |
| LiquidationManager | 0xc89226f5309c9858e717273f331b73ad08277761 |
| OracleRouter | 0xab65a6f0e4bb76aab3725579a5c1bcb05c4677ea |
Full deployment record: broadcast/.
NoFrame core is research-stage and not yet audited; external audits are planned before a production release. The core CDP engine derives from the battle-tested Liquity/Prisma designs, and the money-path invariants are covered by the unit suite. See SECURITY.md for trust assumptions, tested invariants and how to report a vulnerability.
Released under the MIT License. Portions derive from Liquity and Prisma Finance; third-party interfaces retain their upstream licenses.