For the complete documentation index, see llms.txt. This page is also available as Markdown.

Unwind and Peg Module

Unwinds close unsafe accounts by selling collateral and burning rwaUSD to extinguish liability.

Unsafe condition

An account is unsafe if:

  • collateralValue < currentLiability * safetyFactor

Using risk-adjusted prices (haircut included) and freshness policy.

Who can trigger

Anyone can trigger an unwind. This is deliberate. The system does not depend on a privileged actor for solvency.

Unwind Engine (UnwindEngine)

Responsibilities

  • verify unsafe condition via Ledger + PriceRouter

  • freeze account operations

  • determine amount of collateral to seize (enough to target full settlement + penalty, using conservative price)

  • initiate auction(s)

Interfaces

function trigger(uint256 accountId, bytes32 profileId) external returns (uint256 auctionId);
function getStatus(uint256 accountId) external view returns (...);

Incentives for callers (keepers)

To avoid relying on altruism, add a keeper reward:

  • fixed “call fee” paid from reserve buffer (bounded), and/or

  • percentage of recovered value (capped)

Reward must be parameterized per profile and capped to prevent griefing.


Auction system

Auction House (AuctionHouse)

Sells seized collateral for rwaUSD (or for a reference stablecoin that is immediately converted and burned, implementation choice). Preferred mechanism here is descending-price sale with partial fills.Why:

  • fast convergence

  • simple keeper strategy

  • handles volatile conditions better than thin order books

1. Auction parameters (per profile)

Stored in RiskRegistry:

  • startPremium: multiplier on reference price at start (e.g., 1.05×)

  • decayCurve: price decay function over time

  • duration: max auction time

  • lotSize: collateral per lot (or debt target per lot)

  • minFill: minimum purchase size

  • restartThreshold: if auction runs too long or price too low, allow restart

2. Auction lifecycle

  1. Kick

    • Unwind Engine calls AuctionHouse.kick(...)

    • collateral is transferred from adapter to auction custody

    • auction state created:

      • collateralRemaining

      • debtTarget (liability + penalty)

      • startTime

      • startPrice

  2. Take (purchase)

    • bidder calls take(auctionId, collateralAmtWanted, maxPrice)

    • contract computes current price

    • bidder pays cost = collateralAmtWanted * price

    • rwaUSD is transferred from bidder and burned via Ledger

    • collateral transferred to bidder

    • debt target reduced accordingly

  3. Settle

    • if debt target is fully covered:

      • remaining collateral returned to original account owner (or kept to cover fees; policy)

      • Ledger marks the account cleared for that profile

    • if auction expires with remaining debt:

      • record deficit

      • resolve via buffer/recap

3. Restricted collateral holders (allowlists)

If a tokenized RWA requires allowlisted holders:

  • Auction House must be an eligible holder

  • Bidders must be eligible holders or

  • Auction transfers a receipt/wrapper token representing claim on the collateral, redeemable through an eligible channel

v1 avoids “receipt complexity” unless unavoidable; it introduces a second custody layer.


Peg anchoring rails

A peg rail provides a deterministic conversion between rwaUSD and a reference stablecoin to tighten market price.

1. Peg Rail (PegRail)

Concept

  • swap reference stablecoin ↔ rwaUSD near 1:1 with a fee spread

Functions

Rules

  • swapIn mints rwaUSD and holds stable in reserves (or routes to buffer)

  • swapOut burns rwaUSD and releases stable from reserves

Safeguards

  • per-day outflow limits

  • depeg breakers: if reference stable price < threshold, disable swapOut

  • governance-controlled fee bands within caps

The peg rail is not a substitute for solvency. It is a market tool.

Last updated