Skip to content

Repository files navigation

NoFrame

Solidity Foundry License: MIT

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.

How it works

  • 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 OracleRouter that 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.

Architecture

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

Repository layout

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

Build & test

Requires Foundry.

git clone --recurse-submodules <repo-url>
cd noframe-core
forge build

Run the unit suite (self-contained, no external services):

forge test

The 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/*"

Deployments

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/.

Security

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.

License

Released under the MIT License. Portions derive from Liquity and Prisma Finance; third-party interfaces retain their upstream licenses.

About

No description, website, or topics provided.

Resources

Security policy

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages