PYUSDx Overview
PYUSDx is a yield-bearing digital dollar built on M0 infrastructure. Partners don't offer PYUSDx to users directly. Instead, they launch a custom token on top of it: their own name and symbol, backed 1:1 by PYUSDx, with the yield on that backing routed to a treasury they choose. M0 operates the shared layer: the base token, the swap infrastructure, the cross-chain bridge, and yield enablement for each custom token.
This page explains the model. The Quick Guide describes the launch sequence, and the technical documentation covers each contract in depth.
Key facts
| Property | Detail |
|---|---|
| Base token | PYUSDx is an upgradeable, non-rebasing ERC-20 with 6 decimals, matching PYUSD. |
| Yield | Accrues continuously on the PYUSDx that backs your token. Yield is added to a balance only when claimed, so holder balances don't change on their own. |
| Custom token templates | YieldToOne routes all yield to one treasury. MultiMint does the same and also accepts approved alternative stablecoins as backing. |
| Wrap and unwrap | 1:1 through SwapFacility. No spread and no liquidity pool to fund. |
| Cross-chain | Portal uses burn-and-mint with pluggable bridge adapters. LayerZero is the first adapter. |
| Supported chains | Ethereum, Arbitrum, and Monad. Testnets: Ethereum Sepolia, Arbitrum Sepolia, and Monad Testnet. |
| Compliance controls | Account freezing, forced transfer from frozen accounts, and pausing. |
| Upgrade model | Core contracts are deployed behind transparent proxies that M0 operates. Custom tokens are deployed behind beacon proxies: they follow M0's latest audited implementation by default, and you can pin a version. |
| Mainnet launch | June 2, 2026, on Ethereum and Arbitrum; Monad followed on August 12, 2026. |
How it works
PYUSDx is the shared base
Every custom token is backed 1:1 by PYUSDx, the reserve asset that all partners share. Because the reserve is shared, conversions are exact and liquidity is available immediately. You don't need to bootstrap a separate market for your token.
You launch a custom token
Your token is a wrapper around PYUSDx, deployed in a single transaction through M0's ExtensionFactory. Two audited templates are available:
YieldToOneroutes all yield to a single treasury address. M0 recommends this template for most partners.MultiMintroutes yield the same way and also accepts approved alternative stablecoins as backing, each under a per-asset cap. Unwrapping always returns PYUSDx.
You choose the name, symbol, yield recipient, and the address that holds each administrative role. For details, see Scope with M0 in the Quick Guide.
Users wrap and unwrap at 1:1
SwapFacility is the only entry and exit point for every custom token. swapIn converts PYUSDx into your token, swapOut converts it back, and swapExtensions converts directly between two custom tokens. Amounts are exact: the custom tokens minted or the PYUSDx returned always equal the amount supplied. Permit-based approvals support gasless swaps.
The backing earns yield while holder balances stay fixed
PYUSDx is non-rebasing. A balance never changes on its own; yield accrues in the background and is added only when claimed. Your custom token's contract is registered as an earner on PYUSDx, so the PYUSDx it holds accrues yield continuously. When your yield manager calls claimYield, the accrued amount (the contract's PYUSDx balance minus your token's total supply) is minted as new custom tokens to your yield recipient. Holder balances don't change. The yield recipient receives the claimed yield.
Tokens move across chains
Portal bridges PYUSDx and custom tokens between supported chains using burn-and-mint: tokens are burned on the source chain and minted on the destination chain, so total supply stays consistent across chains. When a user bridges a custom token, Portal unwraps it to PYUSDx, sends the message, and wraps it again on arrival. Bridge providers are abstracted behind an adapter interface. LayerZero is the first adapter, and M0 can add others without changing Portal.
Compliance controls are built in
Your custom token inherits freeze and pause controls, held by roles you assign. Frozen accounts can't send, receive, or claim yield. A pause stops all transfers. Forced transfers, which move funds out of a frozen account under legal process, operate at the PYUSDx layer. Freezing an earning account claims its pending yield and stops earning first, so the full balance is available for a forced transfer.
Architecture
| Contract | Description |
|---|---|
PYUSDX | Core ERC-20 with per-account yield. M0 operates it. |
IssuerGateway | Time-delayed mint and burn gateway for PYUSDx supply. M0 operates it. |
SwapFacility | 1:1 router between PYUSDx and custom tokens. M0 operates it. |
ExtensionFactory | Deploys and registers custom tokens at deterministic addresses. M0 operates it; you call it once per chain. |
ExtensionBeacon | Per-template registry of audited implementations. M0 operates it. |
YieldToOne / MultiMint | Your custom token. You hold its roles. |
Portal and adapters | Cross-chain bridge and provider adapters. M0 operates them. |
Integration notes
- Balances are stable. Custom tokens behave like any ERC-20. No rebasing math is required.
- Yield appears as minted supply at claim time. Your token's total supply grows by the claimed amount and the contract emits
YieldClaimed. Base treasury reporting on claim events, not on block time. - Addresses are deterministic. The same deployer and the same deployment name produce the same token address on every supported chain.
- Decimals are 6. PYUSDx and every custom token use 6 decimals, matching PYUSD.