pagina iniziale

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:

  1. Chiedi la transazione: POST /api/relay o POST /api/withdraw-now risponde { "transaction": "<base64>" }.
  2. Firmala con il wallet (solo firma, non inviarla) e inviala a POST /api/relay/submit; la risposta è la sua firma.
  3. 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/relay con { "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-now con { "amount": 25 } (e to per un altro wallet Solana), poi firma e invia.
  • La commissione di prelievo (1 USDC, accountFee nella risposta) viene detratta dall’importo; apre anche un account USDC per una destinazione che non ne ha uno.
  • Con network e token gli USDC proseguono tramite un bridge verso un’altra rete; POST /api/withdraw/quote indica 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
// 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.

GET/api/funds

I dati della blockchain di cui un client ha bisogno

Pubblico
Richiesta
curl "https://seeryx.com/api/funds"
Risposta
{
  "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.
GET/api/funds/wallet

Gli USDC nel tuo wallet, i tuoi fondi nel programma, gli USDC in arrivo

Con accessoSolana
CampoTipoDescrizione
freshquery stringfacoltativo1Salta la cache di 5 secondi
Richiesta
curl "https://seeryx.com/api/funds/wallet" \
  -H "X-Auth-Token: $TOKEN"
Risposta
{ "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.
StatoQuando
502Non è stato possibile leggere Solana; mai uno zero
POST/api/funds/refresh

Dopo un deposito o un prelievo: rileggi subito il programma

Con accessoSolana
Richiesta
curl -X POST "https://seeryx.com/api/funds/refresh" \
  -H "X-Auth-Token: $TOKEN"
Risposta
{ "ok": true }
POST/api/relay

Prepara una tua transazione da far firmare al wallet

Con accessoSolana
CampoTipoDescrizione
actioncorpoobbligatoriostringdeposit, session, close_session, request_withdraw, cancel_withdraw o execute_withdraw
amountcorpofacoltativonumberdeposit, request_withdraw: USDC
keycorpofacoltativostringsession: la nuova chiave di sessione; close_session: la chiave di sessione, quando firma al posto del wallet
expiresAtcorpofacoltativonumbersession: secondi Unix, al massimo maxSessionTtl da adesso
limitcorpofacoltativonumbersession: gli USDC che può spendere in totale
maxTradecorpofacoltativonumbersession: gli USDC che un singolo ordine può spendere, al massimo pari a limit
tocorpofacoltativostringexecute_withdraw: un altro wallet Solana che ha un account USDC
Richiesta
curl -X POST "https://seeryx.com/api/relay" \
  -H "X-Auth-Token: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"action":"deposit","amount":10}'
Risposta
{ "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.
StatoQuando
400Un 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
POST/api/relay/submit

Invia una transazione preparata dopo che il tuo wallet l’ha firmata

Con accessoSolana
CampoTipoDescrizione
transactioncorpoobbligatoriostringbase64: la transazione di /relay o /withdraw-now con la firma del tuo wallet
Richiesta
curl -X POST "https://seeryx.com/api/relay/submit" \
  -H "X-Auth-Token: $TOKEN"
Risposta
{ "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).
StatoQuando
400Non è una transazione preparata per il tuo conto negli ultimi 5 minuti, oppure è già stata inviata
409Il suo blockhash è scaduto prima che arrivasse a Solana: preparala di nuovo
POST/api/withdraw-now

Un prelievo immediato, da far firmare al wallet

Con accessoSolana
CampoTipoDescrizione
amountcorpoobbligatorionumberGli USDC che escono dal tuo conto, commissione di prelievo inclusa
tocorpofacoltativostringUn altro wallet Solana, o un indirizzo su network
networkcorpofacoltativostringCon token: consegna su un’altra rete (una rete di /deposit/options con withdraw true)
tokencorpofacoltativostringUSDC o USDT
cancelPendingcorpofacoltativobooleanSostituisci un prelievo differito in attesa
Richiesta
curl -X POST "https://seeryx.com/api/withdraw-now" \
  -H "X-Auth-Token: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"amount":25}'
Risposta
{ "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 }.
StatoQuando
400L’importo non supera la commissione, oppure supera i tuoi fondi liberi
409Una delle tue operazioni è ancora in fase di regolamento: riprova tra qualche secondo, oppure usa un prelievo differito
POST/api/withdraw/quote

Cosa consegna un prelievo verso un’altra rete

Con accessoSolana
CampoTipoDescrizione
amountcorpoobbligatorionumberGli USDC che escono dal tuo conto
networkcorpoobbligatoriostringUna rete di /deposit/options
tokencorpoobbligatoriostringUSDC o USDT
tocorpofacoltativostringIndirizzo di destinazione facoltativo
Richiesta
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"}'
Risposta
{ "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.
GET/api/deposit/options

Reti e token da cui può provenire un deposito

PubblicoSolana
Richiesta
curl "https://seeryx.com/api/deposit/options"
Risposta
{ "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ì.
POST/api/deposit/address

Il tuo indirizzo di deposito personale per un token su una rete

Con accessoSolana
CampoTipoDescrizione
networkcorpoobbligatoriostringUna rete di /deposit/options
tokencorpoobbligatoriostringUSDT o USDC
Richiesta
curl -X POST "https://seeryx.com/api/deposit/address" \
  -H "X-Auth-Token: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"network":"solana","token":"USDC"}'
Risposta
{ "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.
StatoQuando
409Il percorso non è disponibile
502Il bridge non è raggiungibile
POST/api/deposit/recover

Ritrova un deposito inviato con un altro token o su un’altra rete

Con accessoSolana
Richiesta
curl -X POST "https://seeryx.com/api/deposit/recover" \
  -H "X-Auth-Token: $TOKEN"
Risposta
{ "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.
StatoQuando
429Più di 2 chiamate al minuto