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

USDx Primary Market

Mint USDx from collateral and redeem USDx back to collateral through the Axis primary market.

This is a How-to Guide. For background on why the minting system works this way, see Architecture. For complete function signatures, see Core Contracts Reference.


Minting and redeeming are one market

Minting creates new synthetic dollars and redeeming is the reverse. Both are the same action seen from opposite sides: you are buying or selling USDx in the primary market against the whitelisted collateral assets. Each collateral asset defines a market that can come online or be deprecated over time.

The market is the general case, which is why the core V2 contract is USDxMarket. Participants trade against it through signed orders rather than calling a mint function directly, so one contract settles both directions. Its signed-order, settle-onchain / match-offchain design is inspired by the 0x and CoW Swap style of onchain settlement: settlement happens atomically onchain while order matching happens offchain (RFQ), and participants keep control of their assets until settlement.

The flow is the same on both sides:

  1. An approved counterparty requests a price from the Axis Market API.

  2. The counterparty generates a signed EIP-712 order on those terms.

  3. The protocol server checks the required balances and approvals. It may reject an order but cannot alter it, the terms are pre-approved by the signer and settle exactly as signed, or not at all.

  4. On approval, the order is sent to the chain and settles as an atomic onchain mint (or redeem). Settlement is atomic on chain; matching is off chain (RFQ); users retain control throughout.

Putting reserves to work involves the cost of winding and unwinding positions, so the price a counterparty is quoted reflects that cost; the protocol works to minimize slippage in servicing primary market orders.


How to Mint USDx

Minting converts supported collateral into USDx by settling a signed EIP-712 order on USDxMarket. An approved counterparty, a whitelisted, eligible primary market account, submits an order on the USDx market; when that order is filled, USDx is minted at roughly 1:1 against the incoming collateral, at the asset and amounts specified in the order. An eligible participant signs the order; an authorized operator submits it for settlement. New supply flows only through the market: USDxMarket holds MARKET_ROLE on USDx and is the only supply authority at launch, Axis ships no separate MINTER_ROLE/BURNER_ROLE.

On settlement, the incoming collateral is routed through the market's channels and lanes to a custodian account, from which custody is then transferred out to the exchanges and trading venues that hold the backing portfolio, see Backing, Custody & Transparency. By design, Axis takes no profit from minting or redeeming USDx: mint and redeem settle against the collateral in the order rather than at a spread meant to earn Axis a margin. Yield comes from how the backing is deployed, not from the mint or redeem itself.

Prerequisites

  • The order's accountId must be an approved primary market account, eligible under current access and terms.

  • The signer must be authorized for that account, a direct EOA match, an accepted delegated signer, or an ERC-1271 smart account.

  • The collateral asset and USDx must form an enabled route (routeId), and the settlement path (channelId) must be enabled.

  • The account must have approved USDxMarket to spend the collateral (the order's input asset).

  • An operator holding MINT_OPERATOR_ROLE must submit the order for settlement. Issuance itself is gated by MARKET_ROLE on USDx, held by USDxMarket, there is no standalone minter role.

Step 1: Construct the Order

The V2 order (Order, documented as PrimaryMarketOrder) binds the account, the approved route and channel, the signer, the side, the input/output assets, the receiver, a deadline, a one-time nonce, and the accepted-terms hash.

Step 2: Sign the Order (EIP-712)

The EIP-712 domain name is USDxMarket, version 1.

Step 3: Preview the Settlement

Before an operator settles, preview the order against current policy, routing, nonce, signature, and capacity:

checkMint(order, sig) returns an OrderCheck (valid, code, orderHash, signer, nonceUsed, availableBlockCapacity) for the mint side. The settlementData argument is ignored by the preview; it only feeds the emitted settlement hash at real settlement.

Step 4: Operator Settles the Order

An operator holding MINT_OPERATOR_ROLE submits the signed order. Settlement re-runs every check, routes collateral to the channel's custody, mints USDx to the receiver, marks the nonce used, and records a settlement proof.

Using cast

Why a Settlement Is Rejected

checkMint / checkSettlement surface a bytes32 reason code without reverting, so a rejected order can be diagnosed before submission. Settlement re-runs the same checks. Common codes:

Reason code
Cause

NOT_ELIGIBLE

Account not approved, or access/terms conditions not met

RESTRICTED

Account or receiver blocked by a restriction

ROUTE_DISABLED

The routeId is not an enabled market route

CHANNEL_DISABLED

The channelId settlement path is not enabled

UNAUTHORIZED

Signer is not the account's EOA, accepted delegate, or ERC-1271 approver

CAPACITY_EXCEEDED

Configured CapConfig capacity for the scope is exhausted

PAUSED

Market, token, or the relevant flow is paused

A failed settlement consumes neither the nonce nor the capacity, so a rejected order can be safely retried. Signature expiry (block.timestamp > deadline) and a consumed nonce also block settlement.


How to Redeem USDx

Redemption burns USDx and returns collateral to the receiver, settled by an operator on the primary market, the mirror of mint.

This is the primary market redemption of USDx for collateral. Redeeming staked USDx (sUSDx → USDx) is a separate, asynchronous ERC-7540 flow with a cooldown, see the Stake & Unstake guide and What is sUSDx?.

Redemption pricing

Redemption carries an execution fee. It is not a spread Axis earns: as above, mint and redeem settle against the collateral in the order, and Axis takes no margin on either side. The fee passes through the cost of unwinding backing positions to meet the redemption, which is why it rises with the size and the speed demanded: an instant exit prices above a 7d one, and a larger share of the book prices above a smaller one.

Redemption option
Target fee
Maximum fee

Instant, up to 2% of book per day

10 bps

30 bps

7d, aggregate redemptions ≤10%

10 bps

15 bps

7d, aggregate redemptions >10–50%

10–18 bps

25 bps

7d, aggregate redemptions >50–100%

18–35 bps

50 bps

Target fee is the level the schedule prices to under normal conditions. Maximum fee is the ceiling applied once capacity is constrained.

Prerequisites

  • The accountId must be an approved, eligible primary market account, and the signer authorized for it.

  • USDx and the collateral asset must form an enabled redeem route (routeId), with an enabled settlement channelId.

  • The account must have approved USDxMarket to spend its USDx (the order's input asset).

  • An operator holding REDEEM_OPERATOR_ROLE must submit the order.

  • The market must have sufficient collateral available through the channel.

Step 1: Construct a Redeem Order

Same Order schema as mint, with side = REDEEM and the assets reversed, USDx in, collateral out:

Step 2: Sign and Settle

Sign with the same EIP-712 domain (USDxMarket, version 1). An operator holding REDEEM_OPERATOR_ROLE then settles:

Settlement verifies the order, meters redeem capacity (CapConfig metering USDx input), burns the USDx, and releases collateral to the receiver through the approved channel.


How to Set Up Delegated Signing

Smart contracts cannot produce ECDSA signatures directly. The delegation registry on USDxMarket lets a source account authorize an EOA to sign orders on its behalf (a two-step initiate-then-confirm handshake). ERC-1271 smart-account validation is also supported as a separate path.

Step 1: Source Account Initiates Delegation

Step 2: Signer Confirms

The EOA can now sign orders whose signer is authorized for the source account. Read current status with delegatedSigner(signer, source).

Revoking Delegation


Nonce & Replay Protection

Nonces prevent order replay. Each accountId has an independent nonce space tracked as a bitmap (256 nonces per storage slot). A nonce must be non-zero and is consumed only on successful settlement.

Check Nonce Availability

Nonces do not need to be sequential, any unused non-zero nonce in the uint256 space is valid.

Cancelling an Order

A holder of SETTLEMENT_MANAGER_ROLE can pre-emptively tombstone an order hash with cancelOrder(order), emitting OrderCancelled, so it can never settle. Cancellation does not consume the nonce, the order is invalidated by its tombstone, not by the nonce slot, and does not verify the signature.


Staked USDx (sUSDx) is where yield accrues: the collateral backing USDx is deployed into strategies whose structural edge is cross-venue and cross-asset fragmentation, a durable, market-neutral yield source that does not rely on any single mechanism (funding is one component and can be the larger share in a given period; see the Transparency Dashboard for current attribution), and that yield is passed to stakers through sUSDx. See How Axis Earns Yield. Holding USDx alone earns nothing.

Last updated