BSKUSD
Open AppОткрыть приложение
DOCUMENTATION

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

SlotOne coin in the basket. Balances are normalised to 18 decimals, so 1 USDC and 1 DAI count the same.
Invariant DThe dollar value of the basket measured by the curve. Backing = D ÷ BSKUSD supply, and the contract keeps it at or above 100%.
Share capThe most one slot may hold: min(2 ÷ n, 60%). With four coins that is 50%. Deposits that would exceed it are refused.
Slot floorThe least a slot must keep: 0.5% of D ÷ n. Single-coin withdrawals stop before a slot is drained.
Amplification (ann)How flat the curve is. Higher means prices stay closer to 1:1; lower means the pool reacts sooner to imbalance. A multiple of 60, between 120 and 999,960.
No oracleThe contract counts every coin as one dollar and prices only through the curve. It reads no outside price feed.

3. Using the pool

SwapExchange one coin in the basket for another. You set a minimum to receive; if the price moves past your slippage, the transaction reverts instead of filling badly.
Deposit — one tokenBring a single coin and receive BSKUSD equal to the value it adds to the pool. Limited by the share cap of that coin.
Deposit — whole basketBring every coin in the pool's current proportion. No slippage and no cap, because no share changes.
Withdraw — one tokenBurn BSKUSD and receive one coin of your choice. Limited by that slot's floor; the app shows the maximum before you sign.
Withdraw — whole basketBurn BSKUSD and receive your share of every coin. No limit, no slippage, and you set a minimum per coin. It works even while a coin is paused.
ClaimsIf a coin refuses a transfer to you — for example your address is on its blacklist — your amount is recorded as a claim instead of being lost. Collect it later with claim(token, to), to any address you choose.

4. Fees

OperationFee nowCeiling
Deposit0.00%0.06%
Swap0.01%0.06%
Withdraw0.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

  1. Minting only against reserves. New BSKUSD equals the value a deposit adds to D, minus the fee.
  2. Rebalancing by arbitrage. An overweight coin gets cheaper inside the pool, so traders profit by bringing the scarce ones in.
  3. Share cap and slot floor. A failing coin cannot take over the basket, and no healthy coin can be drained out of it.
  4. Instant pause. Deposits and swaps into a failing coin stop in one transaction; withdrawals keep working.
  5. 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.
  6. 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

ActionWhoNoticeWindow to apply
Pause a coinAdmin or pauserinstant—
Unpause a coinAdminafter 7 days paused—
Change feesAdmin7 days14 days
Add a coinAdmin7 days14 days
Replace a paused coinAdmin7 days14 days
Change the fee splitAdmin7 days14 days
Change amplificationAdmin24 hours, then a 3-day ramp48 hours
Connect the staking vaultAdminonce, 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.

FunctionWhat 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_eachQuotes 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:

12Token transfer failed — check approval and balance
15Share cap would be exceeded
16Slot would fall below its floor
21Pool is not launched yet
60Basket withdrawal would deliver under 99% of what is owed
72A coin came out below your minimum
10Only the administrator may call this
66Swap fee must be below deposit plus withdrawal fee
74Amplification must be a multiple of 60

9. Addresses

BSKUSD pool · Ethereum…
System Revenue[SYSTEM REVENUE ADDRESS]
Source code and audits[LINK]
ДОКУМЕНТАЦИЯ

Что такое BSKUSD

BSKUSD — токен ERC-20 с 18 знаками, который выпускает один смарт-контракт — пул. Пул хранит корзину долларовых стейблкоинов: сейчас USDC, USDT, DAI и PYUSD, всего до шести слотов. Каждый BSKUSD — право на долю этой корзины.

У пула одна цель: каждый BSKUSD в обращении обеспечен не меньше чем одним долларом в стейблкоинах. Всё описанное ниже — кривая, лимиты, задержки — служит этой цели.

2. Основные понятия

СлотОдна монета в корзине. Балансы приводятся к 18 знакам, поэтому 1 USDC и 1 DAI учитываются одинаково.
Инвариант DДолларовая стоимость корзины по кривой. Обеспечение = D ÷ выпуск BSKUSD, и контракт держит его не ниже 100%.
Потолок долиМаксимум, который может занимать один слот: min(2 ÷ n, 60%). При четырёх монетах это 50%. Вход сверх потолка отклоняется.
Минимум слотаМинимум, который слот обязан сохранять: 0,5% от D ÷ n. Вывод одной монетой останавливается раньше, чем слот опустеет.
Амплификация (ann)Насколько плоская кривая. Выше — цены ближе к 1:1; ниже — пул раньше реагирует на перекос. Кратна 60, от 120 до 999 960.
Без оракулаКонтракт считает каждую монету за доллар и цены задаёт только кривой. Внешних источников цен он не читает.

3. Операции

ОбменОбмен одной монеты корзины на другую. Вы задаёте минимум к получению: если цена уйдёт дальше допуска, транзакция откатится, а не исполнится по плохой цене.
Вход — одной монетойВносите одну монету и получаете BSKUSD на ту стоимость, которую она добавила пулу. Ограничено потолком доли этой монеты.
Вход — всей корзинойВносите все монеты в текущей пропорции пула. Без проскальзывания и без потолка: ни одна доля не меняется.
Выход — одной монетойСжигаете BSKUSD и получаете одну монету на выбор. Ограничено минимумом слота; приложение показывает максимум до подписи.
Выход — всей корзинойСжигаете BSKUSD и получаете свою долю каждой монеты. Без лимита и проскальзывания, минимум задаётся по каждой монете. Работает, даже когда монета на паузе.
Очередь выплатЕсли монета отказывается переводить вам средства — например, ваш адрес в её чёрном списке, — сумма не теряется, а записывается в очередь. Заберите её позже через claim(token, to) на любой адрес по вашему выбору.

4. Комиссии

ОперацияСейчасПотолок
Вход0.00%0.06%
Обмен0.01%0.06%
Выход0.02%0.06%

Контракт требует, чтобы обмен стоил строго меньше входа плюс выхода, поэтому обойти комиссию обмена дешевле не получится. Комиссии идут на адрес System Revenue, заданный при запуске; после подключения хранилища стейкинга часть уходит стейкерам.

5. Как удерживается обеспечение

  1. Выпуск только под резервы. Новый BSKUSD равен стоимости, которую вход добавил к D, за вычетом комиссии.
  2. Балансировка арбитражем. Избыточная монета внутри пула дешевеет, и трейдерам выгодно приносить дефицитные.
  3. Потолок доли и минимум слота. Падающая монета не захватит корзину, а здоровую нельзя из неё вычерпать.
  4. Мгновенная пауза. Вход и обмен в падающую монету останавливаются одной транзакцией; вывод продолжает работать.
  5. Ротация. Монету, простоявшую на паузе не меньше 7 дней, можно заменить новой после ещё 7 дней объявления; новая монета вносится полностью заранее.
  6. Проверка обеспечения. Изменение кривой отклоняется, если обеспечение упадёт ниже 100%, и вводится постепенно за 3 дня.

6. Управление и задержки

ДействиеКтоОбъявлениеОкно применения
Пауза монетыАдмин или pauserмгновенно—
Снять паузуАдминпосле 7 дней на паузе—
Изменить комиссииАдмин7 дней14 дней
Добавить монетуАдмин7 дней14 дней
Заменить монету на паузеАдмин7 дней14 дней
Изменить распределение доходаАдмин7 дней14 дней
Изменить амплификациюАдмин24 часа, затем переход за 3 дня48 часов
Подключить хранилище стейкингаАдминодин раз, без смены—
Адрес System Revenue—задаётся при запуске навсегда—

Каждое ожидающее изменение видно в приложении в блоке «Объявленные изменения» с момента объявления. Изменение, не применённое в своё окно, сгорает, и его нужно объявлять заново.

7. Для разработчиков

Пул поддерживает интерфейс чтения и обмена пула Curve StableSwap, поэтому существующие роутеры и боты котируют и торгуют его без доработок. Индексы — int128, балансы — в собственных единицах каждой монеты.

ФункцияЧто делает
exchange(i, j, dx, min_dy)Обмен монеты i на монету j
get_dy(i, j, dx)Котировка обмена с учётом комиссии
mint(i, amount, min_out)Внести одну монету за BSKUSD
mint_proportional(amounts[6], min_out)Внести всю корзину
burn(i, bsk, min_out)Вывести одну монету
burn_proportional(bsk, min_out[6])Вывести всю корзину
quote_mint_net, quote_burn, quote_burn_eachКотировки, которые откатываются ровно там же, где операция
claim(token, to)Забрать выплату из очереди
coins(i), balances(i), N_COINS()Состав корзины
A(), A_precise(), fee()Параметры кривой в единицах Curve
get_virtual_price()D ÷ выпуск — коэффициент обеспечения, нижняя граница стоимости BSKUSD при номинальных ценах

8. Коды ошибок

Отклонённый вызов откатывается с Err(uint256). Чаще всего встречаются:

12Перевод токена не прошёл — проверьте approve и баланс
15Будет превышен потолок доли
16Слот опустится ниже минимума
21Пул ещё не запущен
60Вывод корзиной доставит меньше 99% причитающегося
72Одна из монет ниже заданного минимума
10Вызвать может только администратор
66Комиссия обмена должна быть меньше входа плюс выхода
74Амплификация должна быть кратна 60

9. Адреса

Пул BSKUSD · Ethereum…
System Revenue[АДРЕС SYSTEM REVENUE]
Исходный код и аудиты[ССЫЛКА]