What BSKUSD is
BSKUSD is an ERC-20 token with 18 decimals issued by a single smart contract — the pool. The pool holds a basket of dollar stablecoins: today USDC, USDT, DAI and PYUSD, up to six slots in total. Each BSKUSD is a claim on a share of that basket.
The pool has one goal: every BSKUSD in circulation stays backed by at least one dollar of stablecoins. Everything below — the curve, the limits, the delays — exists to serve that goal.
2. Core concepts
3. Using the pool
claim(token, to), to any address you choose.4. Fees
| Operation | Fee now | Ceiling |
|---|---|---|
| Deposit | 0.00% | 0.06% |
| Swap | 0.01% | 0.06% |
| Withdraw | 0.02% | 0.06% |
The contract requires a swap to cost strictly less than a deposit plus a withdrawal, so no route around the swap fee is cheaper. Fees go to the System Revenue address fixed at launch; once a staking vault is connected, part of them goes to stakers.
5. How backing is kept
- Minting only against reserves. New BSKUSD equals the value a deposit adds to D, minus the fee.
- Rebalancing by arbitrage. An overweight coin gets cheaper inside the pool, so traders profit by bringing the scarce ones in.
- Share cap and slot floor. A failing coin cannot take over the basket, and no healthy coin can be drained out of it.
- Instant pause. Deposits and swaps into a failing coin stop in one transaction; withdrawals keep working.
- Rotation. A coin paused for at least 7 days can be replaced, after a further 7-day notice, by a new coin paid in full up front.
- Backing check. A change of the curve is refused if it would leave backing under 100%, and it ramps in over 3 days.
6. Governance and delays
| Action | Who | Notice | Window to apply |
|---|---|---|---|
| Pause a coin | Admin or pauser | instant | — |
| Unpause a coin | Admin | after 7 days paused | — |
| Change fees | Admin | 7 days | 14 days |
| Add a coin | Admin | 7 days | 14 days |
| Replace a paused coin | Admin | 7 days | 14 days |
| Change the fee split | Admin | 7 days | 14 days |
| Change amplification | Admin | 24 hours, then a 3-day ramp | 48 hours |
| Connect the staking vault | Admin | once, cannot be changed | — |
| System Revenue address | — | fixed at launch forever | — |
Every pending change is visible in the app under Announced Changes from the moment it is scheduled. A change not applied inside its window expires and must be announced again.
7. For developers
The pool exposes the read and swap interface of a Curve StableSwap pool, so existing routers and bots can quote and trade it without custom code. Indices are int128, balances are in each coin's own units.
| Function | What it does |
|---|---|
exchange(i, j, dx, min_dy) | Swap coin i for coin j |
get_dy(i, j, dx) | Quote a swap, fee included |
mint(i, amount, min_out) | Deposit one coin for BSKUSD |
mint_proportional(amounts[6], min_out) | Deposit the whole basket |
burn(i, bsk, min_out) | Withdraw one coin |
burn_proportional(bsk, min_out[6]) | Withdraw the whole basket |
quote_mint_net, quote_burn, quote_burn_each | Quotes that revert exactly where the operation would |
claim(token, to) | Collect a queued payout |
coins(i), balances(i), N_COINS() | Basket composition |
A(), A_precise(), fee() | Curve parameters in Curve units |
get_virtual_price() | D ÷ supply — the backing ratio, a lower bound of BSKUSD value at par prices |
8. Error codes
A refused call reverts with Err(uint256). The codes you are most likely to meet: