Руководства
Пополнения и выводы
USDC в Solana на счёт Seeryx и обратно из кода: пополнения, адреса для пополнения, мгновенный и отложенный вывод и их стоимость.
Обзор
Ваши средства — это USDC в Solana на вашем собственном счёте в программе Seeryx. Пополнения и выводы — это транзакции вашего кошелька, которые сервер готовит с Seeryx в качестве плательщика комиссии: кошелёк подписывает, Seeryx добавляет свою подпись и отправляет транзакцию, поэтому SOL на кошельке не нужен. Каждая операция — это три вызова:
- Запросите транзакцию:
POST /api/relayилиPOST /api/withdraw-nowвозвращает{ "transaction": "<base64>" }. - Подпишите её кошельком (только подпись, без отправки) и передайте в
POST /api/relay/submit; в ответе будет её подпись. - Дождитесь подтверждения в 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иtokenUSDC уходят дальше через мост в другую сеть;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: 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: кошелёк только подписывает.
/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.
/api/funds/walletUSDC в вашем кошельке, ваши средства в программе, USDC в пути
| Поле | Тип | Описание |
|---|---|---|
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; ноль в этом случае не возвращается |
/api/funds/refreshПосле пополнения или вывода: прочитать программу сейчас
curl -X POST "https://seeryx.com/api/funds/refresh" \
-H "X-Auth-Token: $TOKEN"{ "ok": true }/api/relayПодготовить вашу транзакцию для подписи кошельком
| Поле | Тип | Описание |
|---|---|---|
action | string | deposit, session, close_session, request_withdraw, cancel_withdraw или execute_withdraw |
amount | number | deposit, request_withdraw: сумма в USDC |
key | string | session: новый ключ сессии; close_session: ключ сессии, если подписывает он, а не кошелёк |
expiresAt | number | session: секунды Unix, не позднее чем через maxSessionTtl от текущего момента |
limit | number | session: общая сумма в USDC, которую можно потратить |
maxTrade | number | session: сумма в USDC, которую может потратить один ордер, не больше limit |
to | string | execute_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-счёта |
/api/relay/submitОтправить подготовленную транзакцию после подписи кошельком
| Поле | Тип | Описание |
|---|---|---|
transaction | string | base64: транзакция из /relay или /withdraw-now с подписью вашего кошелька |
curl -X POST "https://seeryx.com/api/relay/submit" \
-H "X-Auth-Token: $TOKEN"{ "signature": "5VERv8NM..." }- Seeryx добавляет свою подпись, проверяет все подписи и отправляет транзакцию в Solana; signature — её id. Дождитесь подтверждения через любой Solana RPC (getSignatureStatuses).
| Статус | Когда |
|---|---|
| 400 | Это не транзакция, подготовленная для вашего аккаунта за последние 5 минут, или она уже отправлена |
| 409 | Её blockhash истёк до того, как она попала в Solana: подготовьте её заново |
/api/withdraw-nowМгновенный вывод для подписи кошельком
| Поле | Тип | Описание |
|---|---|---|
amount | number | USDC, списываемые с вашего счёта, включая комиссию за вывод |
to | string | Другой кошелёк Solana или адрес в сети network |
network | string | Вместе с token: доставка в другую сеть (сеть из /deposit/options с withdraw true) |
token | string | USDC или 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 | Одна из ваших сделок ещё проходит расчёт: повторите через несколько секунд или используйте отложенный вывод |
/api/withdraw/quoteСколько доставит вывод в другую сеть
| Поле | Тип | Описание |
|---|---|---|
amount | number | USDC, списываемые с вашего счёта |
network | string | Сеть из /deposit/options |
token | string | USDC или 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 — оценка стоимости моста в другой сети.
/api/deposit/optionsСети и токены, из которых можно пополнить счёт
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: туда можно вывести средства.
/api/deposit/addressВаш собственный адрес для пополнения токеном в выбранной сети
| Поле | Тип | Описание |
|---|---|---|
network | string | Сеть из /deposit/options |
token | string | USDT или 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 | Мост недоступен |
/api/deposit/recoverНайти пополнение, отправленное другим токеном или в другой сети
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 вызовов в минуту |