Guide
Depositi e prelievi
Sposta USDC su Solana dentro e fuori da un conto Seeryx dal codice: depositi, indirizzi di deposito, prelievi immediati e differiti e i loro costi.
Panoramica
I tuoi fondi sono USDC su Solana in un account tutto tuo del programma Seeryx. Depositi e prelievi sono transazioni del tuo wallet che il server prepara con Seeryx come pagatore delle commissioni: il wallet firma, Seeryx aggiunge la propria firma e la trasmette, quindi al wallet non servono SOL. Ogni flusso si compone di tre chiamate:
- Chiedi la transazione:
POST /api/relayoPOST /api/withdraw-nowrisponde{ "transaction": "<base64>" }. - Firmala con il wallet (solo firma, non inviarla) e inviala a
POST /api/relay/submit; la risposta è la sua firma. - Attendi che Solana la confermi, poi chiama
POST /api/funds/refresh: i tuoi fondi si aggiornano entro pochi secondi.
sendPrepared in chain.ts (send_prepared in chain.py) esegue i passaggi 2 e 3.
Deposito dal wallet
POST /api/relaycon{ "action": "deposit", "amount": 10 }, poi firma e invia.- La commissione di deposito (1 USDC) viene pagata nella stessa transazione e il resto viene accreditato.
- Il tuo primo deposito apre il tuo conto: dopo la commissione deve restare almeno 1 USDC. Fino ad allora una sessione di trading risponde 409 "Deposit first".
Indirizzo di deposito
POST /api/deposit/address con { "network": "solana", "token": "USDC" } ti fornisce un indirizzo personale. Gli USDC inviati lì da un exchange o da qualsiasi wallet vengono aggiunti automaticamente al tuo saldo (auto: true), al netto della commissione di deposito. GET /api/deposit/options elenca le altre reti e gli altri token (USDT e USDC su Ethereum, BNB Chain, Base, Polygon, Arbitrum e altre), ciascuno con il suo minimo; questi arrivano tramite un bridge. GET /api/funds/wallet mostra ciò che è in arrivo in incoming.
Prelievo immediato
POST /api/withdraw-nowcon{ "amount": 25 }(etoper un altro wallet Solana), poi firma e invia.- La commissione di prelievo (1 USDC,
accountFeenella risposta) viene detratta dall’importo; apre anche un account USDC per una destinazione che non ne ha uno. - Con
networketokengli USDC proseguono tramite un bridge verso un’altra rete;POST /api/withdraw/quoteindica prima cosa arriverà. - 409 mentre una delle tue operazioni è ancora in fase di regolamento: riprova qualche secondo dopo.
Prelievo differito
Gratuito e firmato solo dal tuo wallet: POST /api/relay con { "action": "request_withdraw", "amount": 25 }, attendi i withdrawDelay secondi di GET /api/funds (60), poi execute_withdraw versa l’importo al tuo wallet (o a to, un wallet che ha già un account USDC). cancel_withdraw annulla la richiesta.
Codice
// 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' });Tutte le commissioni in un unico posto: Commissioni.
Endpoint dei fondi
I tuoi USDC si trovano in un account tutto tuo del programma Seeryx su Solana. Ogni tua transazione viene preparata dal server con Seeryx che paga la commissione di rete: il tuo wallet si limita a firmare.
/api/fundsI dati della blockchain di cui un client ha bisogno
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: il programma Seeryx (gli account dei mercati derivano da esso); mint: USDC. onChainTrading: ogni ordine, divisione e unione deve essere firmato. relayed: Seeryx paga la commissione di rete delle tue transazioni.
- finePrices: limiti in decimi di centesimo sotto 1¢ e sopra 99¢. budgetBuys: gli acquisti a mercato sono firmati con budget (PMO4). maxSessionTtl: la durata massima di una sessione di trading, in secondi; withdrawDelay: l’attesa di un prelievo differito, in secondi. depositFee e withdrawFee in USDC.
/api/funds/walletGli USDC nel tuo wallet, i tuoi fondi nel programma, gli USDC in arrivo
| Campo | Tipo | Descrizione |
|---|---|---|
fresh | 1 | Salta la cache di 5 secondi |
curl "https://seeryx.com/api/funds/wallet" \
-H "X-Auth-Token: $TOKEN"{ "wallet": 200, "account": null, "sol": 0, "incoming": 0 }- wallet: USDC nel wallet non ancora depositati. account: fondi nel programma, null finché il primo deposito non apre l’account. incoming: USDC arrivati al tuo indirizzo di deposito e in viaggio verso il tuo saldo.
| Stato | Quando |
|---|---|
| 502 | Non è stato possibile leggere Solana; mai uno zero |
/api/funds/refreshDopo un deposito o un prelievo: rileggi subito il programma
curl -X POST "https://seeryx.com/api/funds/refresh" \
-H "X-Auth-Token: $TOKEN"{ "ok": true }/api/relayPrepara una tua transazione da far firmare al wallet
| Campo | Tipo | Descrizione |
|---|---|---|
action | string | deposit, session, close_session, request_withdraw, cancel_withdraw o execute_withdraw |
amount | number | deposit, request_withdraw: USDC |
key | string | session: la nuova chiave di sessione; close_session: la chiave di sessione, quando firma al posto del wallet |
expiresAt | number | session: secondi Unix, al massimo maxSessionTtl da adesso |
limit | number | session: gli USDC che può spendere in totale |
maxTrade | number | session: gli USDC che un singolo ordine può spendere, al massimo pari a limit |
to | string | execute_withdraw: un altro wallet Solana che ha un account 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 è una transazione v0 in base64 con Seeryx come pagatore delle commissioni e tutti gli slot di firma vuoti. Firmala con il wallet (solo firma, non inviarla), poi inviala con POST a /api/relay/submit.
- Ogni deposito paga la commissione di deposito (depositFee di GET /api/funds) nella stessa transazione; il resto viene accreditato. Un primo deposito deve lasciare almeno 1 USDC dopo la commissione: è quello che apre il tuo conto.
- close_session annulla i tuoi ordini in attesa e disattiva subito la chiave di sessione (i suoi ordini ricevono trading_paused), anche prima che la transazione venga inviata.
| Stato | Quando |
|---|---|
| 400 | Un campo mancante o non valido, un deposito non superiore alla commissione |
| 409 | "Deposit first" (nessun conto ancora), nessun prelievo in attesa o non ancora pronto, nessun account USDC alla destinazione |
/api/relay/submitInvia una transazione preparata dopo che il tuo wallet l’ha firmata
| Campo | Tipo | Descrizione |
|---|---|---|
transaction | string | base64: la transazione di /relay o /withdraw-now con la firma del tuo wallet |
curl -X POST "https://seeryx.com/api/relay/submit" \
-H "X-Auth-Token: $TOKEN"{ "signature": "5VERv8NM..." }- Seeryx aggiunge la propria firma, verifica tutte le firme e invia la transazione a Solana; signature è il suo id. Attendi la conferma con qualsiasi RPC Solana (getSignatureStatuses).
| Stato | Quando |
|---|---|
| 400 | Non è una transazione preparata per il tuo conto negli ultimi 5 minuti, oppure è già stata inviata |
| 409 | Il suo blockhash è scaduto prima che arrivasse a Solana: preparala di nuovo |
/api/withdraw-nowUn prelievo immediato, da far firmare al wallet
| Campo | Tipo | Descrizione |
|---|---|---|
amount | number | Gli USDC che escono dal tuo conto, commissione di prelievo inclusa |
to | string | Un altro wallet Solana, o un indirizzo su network |
network | string | Con token: consegna su un’altra rete (una rete di /deposit/options con withdraw true) |
token | string | USDC o USDT |
cancelPending | boolean | Sostituisci un prelievo differito in attesa |
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 }- Firma la transazione con il wallet e inviala tramite /api/relay/submit. accountFee è la commissione di prelievo, trattenuta dall’importo. Con network e token la risposta contiene anche bridge { receive, fee, seconds }.
| Stato | Quando |
|---|---|
| 400 | L’importo non supera la commissione, oppure supera i tuoi fondi liberi |
| 409 | Una delle tue operazioni è ancora in fase di regolamento: riprova tra qualche secondo, oppure usa un prelievo differito |
/api/withdraw/quoteCosa consegna un prelievo verso un’altra rete
| Campo | Tipo | Descrizione |
|---|---|---|
amount | number | Gli USDC che escono dal tuo conto |
network | string | Una rete di /deposit/options |
token | string | USDC o USDT |
to | string | Indirizzo di destinazione facoltativo |
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 è la commissione di prelievo; networkFee il costo del bridge dell’altra rete, una stima.
/api/deposit/optionsReti e token da cui può provenire un deposito
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 su Solana, senza bridge. auto: ciò che arriva al tuo indirizzo di deposito viene aggiunto automaticamente al tuo saldo. withdraw: un prelievo può essere consegnato lì.
/api/deposit/addressIl tuo indirizzo di deposito personale per un token su una rete
| Campo | Tipo | Descrizione |
|---|---|---|
network | string | Una rete di /deposit/options |
token | string | USDT o 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 }- Sempre lo stesso indirizzo per il tuo wallet e il tuo percorso. Invia almeno min.
| Stato | Quando |
|---|---|
| 409 | Il percorso non è disponibile |
| 502 | Il bridge non è raggiungibile |
/api/deposit/recoverRitrova un deposito inviato con un altro token o su un’altra rete
curl -X POST "https://seeryx.com/api/deposit/recover" \
-H "X-Auth-Token: $TOKEN"{ "found": [{ "address": "0x09a3...", "network": "ethereum", "token": "USDC", "amount": "25000000" }] }- Per USDC inviati all’indirizzo mostrato per USDT, o a un indirizzo su una rete diversa da quella per cui era stato creato: il bridge ricontrolla e inoltra ciò che trova. amount è espresso nelle unità più piccole del token.
| Stato | Quando |
|---|---|
| 429 | Più di 2 chiamate al minuto |