головна сторінка

Посібники

Поповнення й виведення

Переказуйте USDC у Solana на рахунок Seeryx і з нього за допомогою коду: поповнення, адреси для поповнення, миттєве й відкладене виведення та їхня вартість.

Огляд

Ваші кошти — це USDC у мережі Solana на вашому власному рахунку в програмі Seeryx. Поповнення й виведення — це транзакції вашого гаманця, які сервер готує із Seeryx як платником комісії: гаманець підписує, Seeryx додає свій підпис і надсилає транзакцію, тож гаманцю не потрібен SOL. Кожна операція складається з трьох викликів:

  1. Запитайте транзакцію: POST /api/relay або POST /api/withdraw-now відповідає { "transaction": "<base64>" }.
  2. Підпишіть її гаманцем (лише підпишіть, не надсилайте) і передайте через POST /api/relay/submit; у відповіді буде її підпис.
  3. Дочекайтеся, поки Solana її підтвердить, а потім викличте POST /api/funds/refresh: ваші кошти оновляться за лічені секунди.

sendPrepared у chain.ts (send_prepared у chain.py) виконує кроки 2 і 3.

Поповнення з гаманця

  • POST /api/relay з { "action": "deposit", "amount": 10 }, потім підпишіть і передайте транзакцію.
  • Комісію за поповнення (1 USDC) сплачують у тій самій транзакції, а решту зараховують.
  • Перше поповнення відкриває ваш рахунок: після комісії на ньому має залишитися щонайменше 1 USDC. До того торгова сесія відповідає 409 "Deposit first".

Адреса для поповнення

POST /api/deposit/address з { "network": "solana", "token": "USDC" } видає вам власну адресу. USDC, надіслані на неї з біржі або будь-якого гаманця, зараховуються на ваш баланс автоматично (auto: true) за вирахуванням комісії за поповнення. GET /api/deposit/options повертає список інших мереж і токенів (USDT і USDC в Ethereum, BNB Chain, Base, Polygon, Arbitrum тощо), кожен зі своїм мінімумом; вони надходять через міст. GET /api/funds/wallet показує, що перебуває в дорозі (incoming).

Миттєве виведення

  • POST /api/withdraw-now з { "amount": 25 } (і to для іншого гаманця Solana), потім підпишіть і передайте транзакцію.
  • Комісія за виведення (1 USDC, accountFee у відповіді) утримується із суми; вона також відкриває USDC-рахунок для отримувача, якщо його немає.
  • З network і token USDC надходять далі через міст в іншу мережу; POST /api/withdraw/quote заздалегідь показує, скільки надійде.
  • 409, поки одна з ваших угод ще в розрахунку: спробуйте знову за кілька секунд.

Відкладене виведення

Безкоштовно й лише з підписом вашого гаманця: POST /api/relay з { "action": "request_withdraw", "amount": 25 }, зачекайте withdrawDelay секунд з GET /api/funds (60), потім execute_withdraw виплачує суму на ваш гаманець (або на to — гаманець, який уже має USDC-рахунок). cancel_withdraw скасовує запит.

Код

funds.ts
// funds.ts: deposit USDC from the wallet and withdraw it again; the exchange pays every fee. npx tsx funds.ts
import { api, loadWallet, signIn } from './seeryx';
import { sendPrepared, type Funds } from './chain';
import { logValue } from './api-url.mjs';

const wallet = await loadWallet();
await signIn(wallet);
const funds = await api<Funds>('/funds');
if (funds.mode !== 'chain') throw new Error('This server holds no USDC on Solana');

// USDC in the wallet, not deposited yet; `account` is null until the first deposit opens it
console.log({ wallet: await api('/funds/wallet') });

// deposit 10 USDC (the first deposit is at least 1): the server prepares the transaction, the wallet signs it
const deposit = await api<{ transaction: string }>('/relay', {
  method: 'POST', body: { action: 'deposit', amount: 10 },
});
console.log('deposit', logValue(await sendPrepared(funds, wallet, deposit.transaction)));
await api('/funds/refresh', { method: 'POST' }); // read the program now; cash follows within seconds
await new Promise((r) => setTimeout(r, 5000));
console.log({ balance: await api('/balance') });

// withdraw 4 USDC at once to this wallet (or `to`: another Solana wallet), co-signed by the exchange
const withdrawal = await api<{ transaction: string; accountFee: number }>('/withdraw-now', {
  method: 'POST', body: { amount: 4 },
});
const sent = await sendPrepared(funds, wallet, withdrawal.transaction);
console.log('withdrawal', logValue(sent), 'withdrawal fee', Number(withdrawal.accountFee));
await api('/funds/refresh', { method: 'POST' });

Усі комісії в одному місці: «Комісії».

Ендпоінти коштів

Ваші USDC лежать на вашому власному рахунку в програмі Seeryx на Solana. Кожну вашу транзакцію готує сервер, а комісію мережі сплачує Seeryx: ваш гаманець лише підписує.

GET/api/funds

Дані блокчейну, потрібні клієнту

Публічний
Запит
curl "https://seeryx.com/api/funds"
Відповідь
{
  "mode": "chain", "cluster": "mainnet",
  "programId": "2uUbvYHqBH1HDVzABGPcqrjHodoBVcNkq6Nrv6MABaiv", "mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
  "withdrawDelay": 60, "maxSessionTtl": 86400, "instantWithdraw": true, "withdrawFee": 1.0, "depositFee": 1.0,
  "onChainTrading": true, "fees": { "rateBps": 700, "rebateBps": 2000 },
  "relayed": true, "directDeposits": true, "finePrices": true, "budgetBuys": true, ...
}
  • programId: програма Seeryx (від неї похідні акаунти ринків); mint: USDC. onChainTrading: кожен ордер, розділення й об’єднання має бути підписаним. relayed: комісію мережі за ваші транзакції сплачує Seeryx.
  • finePrices: лімітні ціни з кроком 0,1¢ нижче 1¢ і вище 99¢. budgetBuys: ринкові купівлі підписуються за бюджетом (PMO4). maxSessionTtl: найдовша торгова сесія, у секундах; withdrawDelay: очікування відкладеного виведення, у секундах. depositFee і withdrawFee — у USDC.
GET/api/funds/wallet

USDC у вашому гаманці, ваші кошти в програмі й USDC у дорозі

Потрібен вхідSolana
ПолеТипОпис
freshрядок запитунеобов’язкове1Оминути 5-секундний кеш
Запит
curl "https://seeryx.com/api/funds/wallet" \
  -H "X-Auth-Token: $TOKEN"
Відповідь
{ "wallet": 200, "account": null, "sol": 0, "incoming": 0 }
  • wallet: USDC у гаманці, ще не зараховані на рахунок. account: кошти в програмі, null, доки перше поповнення не відкриє рахунок. incoming: USDC, що надійшли на вашу адресу для поповнення й прямують на ваш баланс.
СтатусКоли
502Не вдалося прочитати дані Solana; нуль у такому разі не повертається
POST/api/funds/refresh

Після поповнення чи виведення: негайно прочитати стан програми

Потрібен вхідSolana
Запит
curl -X POST "https://seeryx.com/api/funds/refresh" \
  -H "X-Auth-Token: $TOKEN"
Відповідь
{ "ok": true }
POST/api/relay

Підготувати вашу транзакцію для підпису гаманцем

Потрібен вхідSolana
ПолеТипОпис
actionтілообов’язковеstringdeposit, session, close_session, request_withdraw, cancel_withdraw або execute_withdraw
amountтілонеобов’язковеnumberdeposit, request_withdraw: сума в USDC
keyтілонеобов’язковеstringsession: новий ключ сесії; close_session: ключ сесії, якщо підписує він, а не гаманець
expiresAtтілонеобов’язковеnumbersession: секунди Unix, щонайбільше через maxSessionTtl від цього моменту
limitтілонеобов’язковеnumbersession: скільки USDC вона може витратити загалом
maxTradeтілонеобов’язковеnumbersession: скільки USDC може витратити один ордер, не більше за limit
toтілонеобов’язковеstringexecute_withdraw: інший гаманець Solana, що має USDC-рахунок
Запит
curl -X POST "https://seeryx.com/api/relay" \
  -H "X-Auth-Token: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"action":"deposit","amount":10}'
Відповідь
{ "transaction": "AQAB..." }
  • transaction — транзакція v0 у base64, у якій платником комісії є Seeryx, а всі слоти підписів порожні. Підпишіть її гаманцем (лише підпишіть, не надсилайте), потім надішліть POST-запитом на /api/relay/submit.
  • Кожне поповнення сплачує комісію за поповнення (depositFee з GET /api/funds) у тій самій транзакції; решту зараховують. Після першого поповнення має залишитися щонайменше 1 USDC після комісії: воно відкриває ваш рахунок.
  • close_session скасовує ваші ордери в книзі й одразу зупиняє ключ сесії (його ордери отримують trading_paused) — ще до того, як транзакцію надіслано.
СтатусКоли
400Відсутнє або неправильне поле, поповнення, що не перевищує комісію
409"Deposit first" (рахунку ще немає), немає виведення в очікуванні або воно ще не готове, в отримувача немає USDC-рахунку
POST/api/relay/submit

Надіслати підготовлену транзакцію після підпису гаманцем

Потрібен вхідSolana
ПолеТипОпис
transactionтілообов’язковеstringbase64: транзакція з /relay або /withdraw-now із підписом вашого гаманця
Запит
curl -X POST "https://seeryx.com/api/relay/submit" \
  -H "X-Auth-Token: $TOKEN"
Відповідь
{ "signature": "5VERv8NM..." }
  • Seeryx додає свій підпис, перевіряє всі підписи й надсилає транзакцію в мережу Solana; signature — її ідентифікатор. Чекайте підтвердження через будь-який RPC Solana (getSignatureStatuses).
СтатусКоли
400Це не транзакція, підготовлена для вашого акаунта за останні 5 хвилин, або її вже надіслано
409Її blockhash застарів, перш ніж вона потрапила в Solana: підготуйте її знову
POST/api/withdraw-now

Миттєве виведення для підпису гаманцем

Потрібен вхідSolana
ПолеТипОпис
amountтілообов’язковеnumberUSDC, що списуються з вашого рахунку, разом із комісією за виведення
toтілонеобов’язковеstringІнший гаманець Solana або адреса в мережі network
networkтілонеобов’язковеstringРазом із token: доставка в іншу мережу (мережа з /deposit/options з withdraw true)
tokenтілонеобов’язковеstringUSDC або USDT
cancelPendingтілонеобов’язковеbooleanЗамінити відкладене виведення в очікуванні
Запит
curl -X POST "https://seeryx.com/api/withdraw-now" \
  -H "X-Auth-Token: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"amount":25}'
Відповідь
{ "transaction": "AQAB...", "accountFee": 1 }
  • Підпишіть транзакцію гаманцем і надішліть через /api/relay/submit. accountFee — комісія за виведення, що утримується із суми. З network і token відповідь також містить bridge { receive, fee, seconds }.
СтатусКоли
400Сума не перевищує комісію або більша за ваші вільні кошти
409Одна з ваших угод ще в розрахунку: спробуйте знову за кілька секунд або скористайтеся відкладеним виведенням
POST/api/withdraw/quote

Скільки надійде під час виведення в іншу мережу

Потрібен вхідSolana
ПолеТипОпис
amountтілообов’язковеnumberUSDC, що списуються з вашого рахунку
networkтілообов’язковеstringМережа з /deposit/options
tokenтілообов’язковеstringUSDC або USDT
toтілонеобов’язковеstringНеобов’язкова адреса отримувача
Запит
curl -X POST "https://seeryx.com/api/withdraw/quote" \
  -H "X-Auth-Token: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"amount":20,"network":"base","token":"USDC"}'
Відповідь
{ "receive": 18.89, "fee": 0.11, "networkFee": 0.11, "bridgeFee": 1, "seconds": 1 }
  • bridgeFee — комісія за виведення; networkFee — орієнтовна вартість мосту іншої мережі.
GET/api/deposit/options

Мережі й токени, з яких можна поповнити рахунок

ПублічнийSolana
Запит
curl "https://seeryx.com/api/deposit/options"
Відповідь
{ "routes": [{ "network": "solana", "token": "USDC", "min": 1, "available": true, "reason": null, "direct": true, "auto": true, "withdraw": true },
  { "network": "bsc", "token": "USDT", "min": 3, "available": true, "reason": null, "direct": false, "auto": true, "withdraw": true }, ...] }
  • direct: USDC у мережі Solana, без мосту. auto: те, що надходить на вашу адресу для поповнення, автоматично зараховується на ваш баланс. withdraw: туди можна вивести кошти.
POST/api/deposit/address

Ваша власна адреса для поповнення токеном у певній мережі

Потрібен вхідSolana
ПолеТипОпис
networkтілообов’язковеstringМережа з /deposit/options
tokenтілообов’язковеstringUSDT або USDC
Запит
curl -X POST "https://seeryx.com/api/deposit/address" \
  -H "X-Auth-Token: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"network":"solana","token":"USDC"}'
Відповідь
{ "network": "solana", "token": "USDC", "address": "7xKXtg2C...", "min": 1, "direct": true, "auto": true }
  • Для вашого гаманця й маршруту щоразу та сама адреса. Надсилайте щонайменше min.
СтатусКоли
409Маршрут недоступний
502Міст недоступний
POST/api/deposit/recover

Знайти поповнення, надіслане іншим токеном або в іншій мережі

Потрібен вхідSolana
Запит
curl -X POST "https://seeryx.com/api/deposit/recover" \
  -H "X-Auth-Token: $TOKEN"
Відповідь
{ "found": [{ "address": "0x09a3...", "network": "ethereum", "token": "USDC", "amount": "25000000" }] }
  • Для USDC, надісланих на адресу, показану для USDT, або на адресу в іншій мережі, ніж та, для якої її створено: міст шукає знову й пересилає те, що знайде. amount — у найменших одиницях токена.
СтатусКоли
429Понад 2 виклики на хвилину