Начало работы
Основные понятия
Как устроены рынки Seeryx: slug-и раундов и событий, длительности, состояния раундов, зеркальный стакан, цены, разделение, расчёт и выплаты.
Рынки и раунды
Криптовалютный рынок — это актив и длительность раунда: BTC 5m, ETH 1h, BNB 1d. Он идёт цепочкой раундов, каждый из которых — отдельный вопрос со своим стаканом, своими долями и своим исходом. GET /api/markets возвращает список рынков.
| tf | Длительность | Начало | Торгуются заранее |
|---|---|---|---|
5m | 5 минут | Каждый момент, кратный 300 с (UTC) | Текущий раунд и следующие 10 |
15m | 15 минут | Каждый момент, кратный 900 с | Текущий раунд и следующие 10 |
1h | 1 час | Каждый полный час | Текущий раунд и следующий |
1d | 24 часа | 12:00 по нью-йоркскому времени | Текущий раунд и следующий |
Раунды, которые ещё не начались, тоже торгуются: их цена открытия всё равно будет ценой на границе раунда, так что ордер, размещённый заранее, — это позиция на более поздний интервал.
Slug раундов
Раунд называется {asset}-updown-{tf}-{start}: актив в нижнем регистре, длительность и начало в секундах Unix. Раунд заканчивается в start + length.
const LENGTH = { '5m': 300, '15m': 900, '1h': 3600, '1d': 86_400 } as const;
// the live round's slug comes from GET /api/markets/{asset}/{tf}/current; the ones after it follow on
const live = await api<{ slug: string; end: number }>('/markets/BTC/15m/current');
const next = (k: number) => `btc-updown-15m-${live.end + (k - 1) * LENGTH['15m']}`; // k = 1..10Суточный раунд начинается в 12:00 по нью-йоркскому времени (16:00 UTC летом, 17:00 зимой) и всегда длится 24 часа, поэтому в те два дня, когда Нью-Йорк переводит часы, раунды перекрываются или между ними остаётся промежуток в час: берите начало раунда следующего дня из GET /api/rounds/:slug или из текущего раунда, когда он появится в списке, а не прибавляйте 86 400.
Событийные рынки
Событийный рынок — это один исход вопроса («Снизит ли ФРС ставку в декабре?»). Его slug начинается с ev-. Он торгуется как один длинный раунд: тот же стакан, ордера, WebSocket и комиссии, где up означает «Да», а down — «Нет». Торги останавливаются в closesAt, после чего рынок разрешает Optimistic Oracle от UMA. GET /api/events возвращает их список, GET /api/event-groups группирует их в вопросы.
Состояния раунда
| status | Что означает | Торгуется |
|---|---|---|
upcoming | До начала | Да, если он входит в число раундов, торгующихся заранее |
live | Между началом и концом | Да, пока до конца больше 5 секунд (затем «Round is closing») |
live | После конца, outcome ещё null: сохраняется цена закрытия | Нет |
settled | outcome равен up или down | Нет; выигрышные доли выплачиваются |
У событийных рынков есть состояния open, closed (торги завершены, ожидается ответ UMA) и resolved с outcome yes или no.
Один стакан, две стороны
«Вверх» и «Вниз» — это один стакан. Бид на «Вверх» по цене p — это аск на «Вниз» по цене 100 − p, поэтому ?side=up и ?side=down показывают одни и те же ордера с разных сторон. Два покупателя могут торговать друг с другом: покупатель «Вверх» по 60¢ и покупатель «Вниз» по 40¢ вместе платят 1,00 $, и выпускается одна доля «Вверх» и одна доля «Вниз». Точно так же продавец «Вверх» и продавец «Вниз» объединяют свои доли обратно в доллары.
Цены и размеры
| Правило | Значение |
|---|---|
| Цены | Целые центы от 1 до 99; с шагом 0,1¢ от 0,1 до 0,9 и от 99,1 до 99,9, если включён finePrices в GET /api/funds (на seeryx.com включён). Любая другая цена: 400 «Invalid limit» |
| Доли | До 4 знаков после запятой; при цене между целыми центами — с шагом 0,001 |
| Минимальный ордер | 5 долей (minOrderShares из GET /api/fees): для лимитного ордера — столько долей, для рыночной покупки — сумма, на которую их можно купить по лучшей цене продажи, для продажи — столько долей или все ваши свободные доли. Меньше: 400 below_minimum |
| Сведение ордеров | Сначала лучшая цена, затем самый ранний ордер; исполнение проходит по цене ордера, стоящего в стакане |
Разделение и объединение
POST /api/split превращает USDC в одинаковое число долей «Вверх» и «Вниз», 1,00 $ за пару; POST /api/merge превращает пары обратно в 1,00 $ за каждую. Обе операции бесплатны, минимум — 5 пар. В конце пара всегда приносит ровно 1,00 $, поэтому маркет-мейкер, держащий обе стороны, может объединить их и сразу освободить средства.
Расчёт в Solana
Ордер сопоставляется сразу, и ваши средства и позиции меняются в тот же момент. Затем каждое исполнение проходит расчёт в программе Seeryx отдельной транзакцией Solana, обычно за несколько секунд. Эта транзакция видна в вашей активности:
| txStatus | Что означает |
|---|---|
pending | Отправлена в Solana, ещё не подтверждена |
confirmed | Расчёт проведён в блокчейне |
failed | Программа её отклонила: сделка отменена на вашем счёте |
Транзакция, которая не попала в блокчейн вовремя, отправляется повторно. Если программа отклоняет расчёт (истёк срок подписи, сессия превысила лимит), сделка отменяется на вашем счёте и отображается с типом revert. Новые ордера не принимаются за 5 секунд до закрытия раунда, чтобы каждое исполнение успело пройти расчёт до него.
Выплаты и аннулирование
- Выплаты автоматические. Когда раунд или событие разрешается, каждая выигрышная доля приносит 1,00 $ на ваши средства (тип активности
settle). Ничего запрашивать не нужно. - Криптораунды разрешаются по цене Binance в секунду границы раунда. Если результат не поступил в Solana в течение 15 минут после закрытия, раунд аннулируется, и каждая доля приносит 50¢.
- Событийные рынки разрешаются через UMA после закрытия торгов. Рынок, по которому UMA не утвердил ответ через 30 дней после закрытия, аннулируется, и каждая доля приносит 50¢.