Startseite

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:

  1. Fordere die Transaktion an: POST /api/relay oder POST /api/withdraw-now antwortet mit { "transaction": "<base64>" }.
  2. Signiere sie mit der Wallet (nur signieren, nicht senden) und sende sie per POST /api/relay/submit; die Antwort ist ihre Signatur.
  3. 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/relay mit { "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-now mit { "amount": 25 } (und to für eine andere Solana-Wallet), dann signieren und einreichen.
  • Die Abhebungsgebühr (1 USDC, accountFee in der Antwort) wird vom Betrag abgezogen; sie eröffnet auch ein USDC-Konto für ein Ziel, das noch keines hat.
  • Mit network und token gehen die USDC über eine Bridge weiter in ein anderes Netzwerk; POST /api/withdraw/quote sagt 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
// 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.

GET/api/funds

Die Blockchain-Daten, die ein Client braucht

Öffentlich
Anfrage
curl "https://seeryx.com/api/funds"
Antwort
{
  "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.
GET/api/funds/wallet

USDC in deiner Wallet, dein Guthaben im Programm, USDC unterwegs

AngemeldetSolana
FeldTypBeschreibung
freshAbfrageoptional1Den 5-Sekunden-Cache umgehen
Anfrage
curl "https://seeryx.com/api/funds/wallet" \
  -H "X-Auth-Token: $TOKEN"
Antwort
{ "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.
StatusWann
502Solana konnte nicht gelesen werden; nie eine Null
POST/api/funds/refresh

Nach einer Einzahlung oder Abhebung: das Programm jetzt lesen

AngemeldetSolana
Anfrage
curl -X POST "https://seeryx.com/api/funds/refresh" \
  -H "X-Auth-Token: $TOKEN"
Antwort
{ "ok": true }
POST/api/relay

Eine Transaktion von dir zum Signieren durch die Wallet vorbereiten

AngemeldetSolana
FeldTypBeschreibung
actionBodyerforderlichstringdeposit, session, close_session, request_withdraw, cancel_withdraw oder execute_withdraw
amountBodyoptionalnumberdeposit, request_withdraw: USDC
keyBodyoptionalstringsession: der neue Sitzungsschlüssel; close_session: der Sitzungsschlüssel, wenn er statt der Wallet signiert
expiresAtBodyoptionalnumbersession: Unix-Sekunden, höchstens maxSessionTtl ab jetzt
limitBodyoptionalnumbersession: USDC, die sie insgesamt ausgeben darf
maxTradeBodyoptionalnumbersession: USDC, die eine Order ausgeben darf, höchstens limit
toBodyoptionalstringexecute_withdraw: eine andere Solana-Wallet, die ein USDC-Konto hat
Anfrage
curl -X POST "https://seeryx.com/api/relay" \
  -H "X-Auth-Token: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"action":"deposit","amount":10}'
Antwort
{ "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.
StatusWann
400Ein 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
POST/api/relay/submit

Eine vorbereitete Transaktion senden, nachdem deine Wallet sie signiert hat

AngemeldetSolana
FeldTypBeschreibung
transactionBodyerforderlichstringBase64: die Transaktion von /relay oder /withdraw-now mit der Signatur deiner Wallet
Anfrage
curl -X POST "https://seeryx.com/api/relay/submit" \
  -H "X-Auth-Token: $TOKEN"
Antwort
{ "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.
StatusWann
400Keine in den letzten 5 Minuten für dein Konto vorbereitete Transaktion, oder bereits gesendet
409Ihr Blockhash ist abgelaufen, bevor sie Solana erreicht hat: Bereite sie erneut vor
POST/api/withdraw-now

Eine Sofortabhebung, zum Signieren durch die Wallet

AngemeldetSolana
FeldTypBeschreibung
amountBodyerforderlichnumberUSDC, die dein Konto verlassen, inklusive Abhebungsgebühr
toBodyoptionalstringEine andere Solana-Wallet oder eine Adresse in network
networkBodyoptionalstringMit token: in einem anderen Netzwerk zustellen (ein Netzwerk aus /deposit/options mit withdraw true)
tokenBodyoptionalstringUSDC oder USDT
cancelPendingBodyoptionalbooleanEine wartende verzögerte Abhebung ersetzen
Anfrage
curl -X POST "https://seeryx.com/api/withdraw-now" \
  -H "X-Auth-Token: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"amount":25}'
Antwort
{ "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 }.
StatusWann
400Der Betrag liegt nicht über der Gebühr oder ist höher als dein freies Guthaben
409Einer deiner Trades wird noch abgewickelt: Versuche es in ein paar Sekunden erneut oder nutze eine verzögerte Abhebung
POST/api/withdraw/quote

Was eine Abhebung in ein anderes Netzwerk liefert

AngemeldetSolana
FeldTypBeschreibung
amountBodyerforderlichnumberUSDC, die dein Konto verlassen
networkBodyerforderlichstringEin Netzwerk aus /deposit/options
tokenBodyerforderlichstringUSDC oder USDT
toBodyoptionalstringOptionale Zieladresse
Anfrage
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"}'
Antwort
{ "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.
GET/api/deposit/options

Netzwerke und Tokens, aus denen eine Einzahlung kommen kann

ÖffentlichSolana
Anfrage
curl "https://seeryx.com/api/deposit/options"
Antwort
{ "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.
POST/api/deposit/address

Deine eigene Einzahlungsadresse für einen Token in einem Netzwerk

AngemeldetSolana
FeldTypBeschreibung
networkBodyerforderlichstringEin Netzwerk aus /deposit/options
tokenBodyerforderlichstringUSDT oder USDC
Anfrage
curl -X POST "https://seeryx.com/api/deposit/address" \
  -H "X-Auth-Token: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"network":"solana","token":"USDC"}'
Antwort
{ "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.
StatusWann
409Die Route ist nicht verfügbar
502Die Bridge ist nicht erreichbar
POST/api/deposit/recover

Eine Einzahlung finden, die mit einem anderen Token oder in einem anderen Netzwerk gesendet wurde

AngemeldetSolana
Anfrage
curl -X POST "https://seeryx.com/api/deposit/recover" \
  -H "X-Auth-Token: $TOKEN"
Antwort
{ "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.
StatusWann
429Mehr als 2 Aufrufe pro Minute