Anleitungen
Einzahlungen und Abhebungen
USDC auf Solana per Code einzahlen und abheben: Einzahlungen, Einzahlungsadressen, sofortige und verzögerte Abhebungen und was sie jeweils kosten.
Überblick
Dein Guthaben sind USDC auf Solana auf deinem eigenen Konto im Seeryx-Programm. Einzahlungen und Abhebungen sind Transaktionen deiner Wallet, die der Server mit Seeryx als Gebührenzahler vorbereitet: Die Wallet signiert, Seeryx fügt seine Signatur hinzu und sendet sie, daher braucht die Wallet kein SOL. Jeder Ablauf besteht aus drei Aufrufen:
- Fordere die Transaktion an:
POST /api/relayoderPOST /api/withdraw-nowantwortet mit{ "transaction": "<base64>" }. - Signiere sie mit der Wallet (nur signieren, nicht senden) und sende sie per
POST /api/relay/submit; die Antwort ist ihre Signatur. - Warte, bis Solana sie bestätigt, dann
POST /api/funds/refresh: Dein Guthaben folgt innerhalb von Sekunden.
sendPrepared in chain.ts (send_prepared in chain.py) erledigt die Schritte 2 und 3.
Aus der Wallet einzahlen
POST /api/relaymit{ "action": "deposit", "amount": 10 }, dann signieren und einreichen.- Die Einzahlungsgebühr (1 USDC) wird in derselben Transaktion bezahlt, und der Rest wird gutgeschrieben.
- Deine erste Einzahlung eröffnet dein Konto: Nach der Gebühr muss mindestens 1 USDC übrig bleiben. Bis dahin antwortet eine Handelssitzung mit 409 „Deposit first“.
Einzahlungsadresse
POST /api/deposit/address mit { "network": "solana", "token": "USDC" } gibt dir eine eigene Adresse. USDC, die von einer Börse oder einer beliebigen Wallet dorthin gesendet werden, werden deinem Guthaben automatisch gutgeschrieben (auto: true), abzüglich der Einzahlungsgebühr. GET /api/deposit/options listet die anderen Netzwerke und Tokens auf (USDT und USDC auf Ethereum, BNB Chain, Base, Polygon, Arbitrum und weiteren), jeweils mit ihrem Minimum; diese kommen über eine Bridge an. GET /api/funds/wallet zeigt, was incoming ist.
Sofort abheben
POST /api/withdraw-nowmit{ "amount": 25 }(undtofür eine andere Solana-Wallet), dann signieren und einreichen.- Die Abhebungsgebühr (1 USDC,
accountFeein der Antwort) wird vom Betrag abgezogen; sie eröffnet auch ein USDC-Konto für ein Ziel, das noch keines hat. - Mit
networkundtokengehen die USDC über eine Bridge weiter in ein anderes Netzwerk;POST /api/withdraw/quotesagt vorher, was ankommt. - 409, solange einer deiner Trades noch abgewickelt wird: Versuche es ein paar Sekunden später erneut.
Verzögerte Abhebung
Kostenlos und nur von deiner Wallet signiert: POST /api/relay mit { "action": "request_withdraw", "amount": 25 }, warte withdrawDelay Sekunden von GET /api/funds (60), dann überweist execute_withdraw den Betrag an deine Wallet (oder an to, eine Wallet, die bereits ein USDC-Konto hat). cancel_withdraw verwirft den Antrag.
Code
// 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' });Alle Gebühren an einem Ort: Gebühren.
Guthaben-Endpunkte
Deine USDC liegen auf deinem eigenen Konto im Seeryx-Programm auf Solana. Jede deiner Transaktionen wird vom Server vorbereitet, wobei Seeryx die Netzwerkgebühr zahlt: Deine Wallet signiert nur.
/api/fundsDie Blockchain-Daten, die ein Client braucht
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: das Seeryx-Programm (Marktkonten werden davon abgeleitet); mint: USDC. onChainTrading: Jede Order, Aufteilung und Zusammenlegung muss signiert sein. relayed: Seeryx zahlt die Netzwerkgebühr deiner Transaktionen.
- finePrices: Limits in Zehntelcent unter 1¢ und über 99¢. budgetBuys: Market-Käufe werden per Budget signiert (PMO4). maxSessionTtl: die längste Handelssitzung in Sekunden; withdrawDelay: die Wartezeit einer verzögerten Abhebung in Sekunden. depositFee und withdrawFee in USDC.
/api/funds/walletUSDC in deiner Wallet, dein Guthaben im Programm, USDC unterwegs
| Feld | Typ | Beschreibung |
|---|---|---|
fresh | 1 | Den 5-Sekunden-Cache umgehen |
curl "https://seeryx.com/api/funds/wallet" \
-H "X-Auth-Token: $TOKEN"{ "wallet": 200, "account": null, "sol": 0, "incoming": 0 }- wallet: USDC in der Wallet, noch nicht eingezahlt. account: Guthaben im Programm, null, bis die erste Einzahlung das Konto eröffnet. incoming: USDC, die deine Einzahlungsadresse erreicht haben und auf dem Weg zu deinem Guthaben sind.
| Status | Wann |
|---|---|
| 502 | Solana konnte nicht gelesen werden; nie eine Null |
/api/funds/refreshNach einer Einzahlung oder Abhebung: das Programm jetzt lesen
curl -X POST "https://seeryx.com/api/funds/refresh" \
-H "X-Auth-Token: $TOKEN"{ "ok": true }/api/relayEine Transaktion von dir zum Signieren durch die Wallet vorbereiten
| Feld | Typ | Beschreibung |
|---|---|---|
action | string | deposit, session, close_session, request_withdraw, cancel_withdraw oder execute_withdraw |
amount | number | deposit, request_withdraw: USDC |
key | string | session: der neue Sitzungsschlüssel; close_session: der Sitzungsschlüssel, wenn er statt der Wallet signiert |
expiresAt | number | session: Unix-Sekunden, höchstens maxSessionTtl ab jetzt |
limit | number | session: USDC, die sie insgesamt ausgeben darf |
maxTrade | number | session: USDC, die eine Order ausgeben darf, höchstens limit |
to | string | execute_withdraw: eine andere Solana-Wallet, die ein USDC-Konto hat |
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 ist eine Base64-v0-Transaktion mit Seeryx als Gebührenzahler und lauter leeren Signaturplätzen. Signiere sie mit der Wallet (nur signieren, nicht senden) und sende sie dann per POST an /api/relay/submit.
- Jede Einzahlung zahlt die Einzahlungsgebühr (depositFee von GET /api/funds) in derselben Transaktion; der Rest wird gutgeschrieben. Eine erste Einzahlung muss nach der Gebühr mindestens 1 USDC übrig lassen: Sie eröffnet dein Konto.
- close_session storniert deine Orders im Orderbuch und stoppt den Sitzungsschlüssel sofort (seine Orders erhalten trading_paused), noch bevor die Transaktion gesendet ist.
| Status | Wann |
|---|---|
| 400 | Ein fehlendes oder ungültiges Feld, eine Einzahlung, die nicht über der Gebühr liegt |
| 409 | „Deposit first“ (noch kein Konto), keine wartende oder noch nicht bereite Abhebung, kein USDC-Konto am Ziel |
/api/relay/submitEine vorbereitete Transaktion senden, nachdem deine Wallet sie signiert hat
| Feld | Typ | Beschreibung |
|---|---|---|
transaction | string | Base64: die Transaktion von /relay oder /withdraw-now mit der Signatur deiner Wallet |
curl -X POST "https://seeryx.com/api/relay/submit" \
-H "X-Auth-Token: $TOKEN"{ "signature": "5VERv8NM..." }- Seeryx fügt seine eigene Signatur hinzu, prüft jede Signatur und sendet die Transaktion an Solana; signature ist ihre ID. Warte mit einem beliebigen Solana-RPC (getSignatureStatuses) auf die Bestätigung.
| Status | Wann |
|---|---|
| 400 | Keine in den letzten 5 Minuten für dein Konto vorbereitete Transaktion, oder bereits gesendet |
| 409 | Ihr Blockhash ist abgelaufen, bevor sie Solana erreicht hat: Bereite sie erneut vor |
/api/withdraw-nowEine Sofortabhebung, zum Signieren durch die Wallet
| Feld | Typ | Beschreibung |
|---|---|---|
amount | number | USDC, die dein Konto verlassen, inklusive Abhebungsgebühr |
to | string | Eine andere Solana-Wallet oder eine Adresse in network |
network | string | Mit token: in einem anderen Netzwerk zustellen (ein Netzwerk aus /deposit/options mit withdraw true) |
token | string | USDC oder USDT |
cancelPending | boolean | Eine wartende verzögerte Abhebung ersetzen |
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 }- Signiere die Transaktion mit der Wallet und sende sie über /api/relay/submit. accountFee ist die Abhebungsgebühr, vom Betrag abgezogen. Mit network und token enthält die Antwort außerdem bridge { receive, fee, seconds }.
| Status | Wann |
|---|---|
| 400 | Der Betrag liegt nicht über der Gebühr oder ist höher als dein freies Guthaben |
| 409 | Einer deiner Trades wird noch abgewickelt: Versuche es in ein paar Sekunden erneut oder nutze eine verzögerte Abhebung |
/api/withdraw/quoteWas eine Abhebung in ein anderes Netzwerk liefert
| Feld | Typ | Beschreibung |
|---|---|---|
amount | number | USDC, die dein Konto verlassen |
network | string | Ein Netzwerk aus /deposit/options |
token | string | USDC oder USDT |
to | string | Optionale Zieladresse |
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 ist die Abhebungsgebühr; networkFee die Kosten der Bridge im anderen Netzwerk, eine Schätzung.
/api/deposit/optionsNetzwerke und Tokens, aus denen eine Einzahlung kommen kann
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 auf Solana, ohne Bridge. auto: Was an deiner Einzahlungsadresse ankommt, wird deinem Guthaben automatisch gutgeschrieben. withdraw: Eine Abhebung kann dorthin liefern.
/api/deposit/addressDeine eigene Einzahlungsadresse für einen Token in einem Netzwerk
| Feld | Typ | Beschreibung |
|---|---|---|
network | string | Ein Netzwerk aus /deposit/options |
token | string | USDT oder 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 }- Für deine Wallet und Route jedes Mal dieselbe Adresse. Sende mindestens min.
| Status | Wann |
|---|---|
| 409 | Die Route ist nicht verfügbar |
| 502 | Die Bridge ist nicht erreichbar |
/api/deposit/recoverEine Einzahlung finden, die mit einem anderen Token oder in einem anderen Netzwerk gesendet wurde
curl -X POST "https://seeryx.com/api/deposit/recover" \
-H "X-Auth-Token: $TOKEN"{ "found": [{ "address": "0x09a3...", "network": "ethereum", "token": "USDC", "amount": "25000000" }] }- Für USDC, die an die für USDT angezeigte Adresse gesendet wurden oder an eine Adresse in einem anderen Netzwerk als dem, für das sie erstellt wurde: Die Bridge sucht erneut und leitet weiter, was sie findet. amount ist in den kleinsten Einheiten des Tokens.
| Status | Wann |
|---|---|
| 429 | Mehr als 2 Aufrufe pro Minute |