Guides
Dépôts et retraits
Déposer et retirer des USDC sur Solana d’un compte Seeryx par le code : dépôts, adresses de dépôt, retraits immédiats et différés, et leur coût.
Vue d’ensemble
Vos liquidités sont des USDC sur Solana, sur votre propre compte dans le programme Seeryx. Les dépôts et les retraits sont des transactions de votre portefeuille que le serveur prépare avec Seeryx comme payeur des frais : le portefeuille signe, Seeryx ajoute sa signature et envoie la transaction ; le portefeuille n’a donc pas besoin de SOL. Chaque opération se fait en trois appels :
- Demandez la transaction :
POST /api/relayouPOST /api/withdraw-nowrépond{ "transaction": "<base64>" }. - Signez-la avec le portefeuille (signer uniquement, sans envoyer) et transmettez-la à
POST /api/relay/submit; la réponse est sa signature. - Attendez que Solana la confirme, puis appelez
POST /api/funds/refresh: vos liquidités sont mises à jour en quelques secondes.
sendPrepared dans chain.ts (send_prepared dans chain.py) effectue les étapes 2 et 3.
Dépôt depuis le portefeuille
POST /api/relayavec{ "action": "deposit", "amount": 10 }, puis signez et transmettez.- Les frais de dépôt (1 USDC) sont payés dans la même transaction et le reste est crédité.
- Votre premier dépôt ouvre votre compte : il doit laisser au moins 1 USDC après les frais. D’ici là, une session de trading répond 409 "Deposit first".
Adresse de dépôt
POST /api/deposit/address avec { "network": "solana", "token": "USDC" } vous donne une adresse qui vous est propre. Les USDC qui y sont envoyés depuis une plateforme d’échange ou n’importe quel portefeuille sont ajoutés automatiquement à votre solde (auto: true), déduction faite des frais de dépôt. GET /api/deposit/options liste les autres réseaux et jetons (USDT et USDC sur Ethereum, BNB Chain, Base, Polygon, Arbitrum et d’autres), chacun avec son minimum ; ceux-ci arrivent par un pont. GET /api/funds/wallet indique ce qui est incoming.
Retrait immédiat
POST /api/withdraw-nowavec{ "amount": 25 }(ettopour un autre portefeuille Solana), puis signez et transmettez.- Les frais de retrait (1 USDC,
accountFeedans la réponse) sont prélevés sur le montant ; ils ouvrent aussi un compte USDC pour une destination qui n’en a pas. - Avec
networkettoken, les USDC poursuivent leur route par un pont vers un autre réseau ;POST /api/withdraw/quoteindique d’abord ce qui arrivera. - 409 tant que l’une de vos opérations est encore en cours de règlement : réessayez quelques secondes plus tard.
Retrait différé
Gratuit, et signé par votre seul portefeuille : POST /api/relay avec { "action": "request_withdraw", "amount": 25 }, attendez le nombre de secondes indiqué par withdrawDelay de GET /api/funds (60), puis execute_withdraw verse le montant sur votre portefeuille (ou sur to, un portefeuille qui a déjà un compte USDC). cancel_withdraw annule la demande.
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' });Tous les frais au même endroit : Frais.
Endpoints des fonds
Vos USDC se trouvent sur votre propre compte dans le programme Seeryx sur Solana. Chacune de vos transactions est préparée par le serveur, Seeryx payant les frais de réseau : votre portefeuille se contente de signer.
/api/fundsLes informations de la blockchain dont un client a besoin
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 : le programme Seeryx (les comptes des marchés en sont dérivés) ; mint : USDC. onChainTrading : chaque ordre, scission et fusion doit être signé. relayed : Seeryx paie les frais de réseau de vos transactions.
- finePrices : limites en dixièmes de cent en dessous de 1¢ et au-dessus de 99¢. budgetBuys : les achats au marché sont signés par budget (PMO4). maxSessionTtl : la durée maximale d’une session de trading, en secondes ; withdrawDelay : l’attente d’un retrait différé, en secondes. depositFee et withdrawFee en USDC.
/api/funds/walletLes USDC de votre portefeuille, vos liquidités dans le programme, les USDC en cours d’arrivée
| Champ | Type | Description |
|---|---|---|
fresh | 1 | Ignorer le cache de 5 secondes |
curl "https://seeryx.com/api/funds/wallet" \
-H "X-Auth-Token: $TOKEN"{ "wallet": 200, "account": null, "sol": 0, "incoming": 0 }- wallet : USDC du portefeuille pas encore déposés. account : liquidités dans le programme, null jusqu’à ce que le premier dépôt ouvre le compte. incoming : USDC arrivés à votre adresse de dépôt et en route vers votre solde.
| Statut | Cas |
|---|---|
| 502 | Solana n’a pas pu être lu ; la réponse n’est jamais un zéro |
/api/funds/refreshAprès un dépôt ou un retrait : relire le programme immédiatement
curl -X POST "https://seeryx.com/api/funds/refresh" \
-H "X-Auth-Token: $TOKEN"{ "ok": true }/api/relayPréparer une de vos transactions pour que le portefeuille la signe
| Champ | Type | Description |
|---|---|---|
action | string | deposit, session, close_session, request_withdraw, cancel_withdraw ou execute_withdraw |
amount | number | deposit, request_withdraw : USDC |
key | string | session : la nouvelle clé de session ; close_session : la clé de session lorsqu’elle signe à la place du portefeuille |
expiresAt | number | session : secondes Unix, au plus maxSessionTtl à partir de maintenant |
limit | number | session : USDC qu’elle peut dépenser au total |
maxTrade | number | session : USDC qu’un ordre peut dépenser, au plus limit |
to | string | execute_withdraw : un autre portefeuille Solana qui a un compte 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 est une transaction v0 en base64 dont Seeryx est le payeur des frais et dont tous les emplacements de signature sont vides. Signez-la avec le portefeuille (signer uniquement, sans l’envoyer), puis envoyez-la par POST à /api/relay/submit.
- Chaque dépôt paie les frais de dépôt (depositFee de GET /api/funds) dans la même transaction ; le reste est crédité. Un premier dépôt doit laisser au moins 1 USDC après les frais : il ouvre votre compte.
- close_session annule vos ordres en attente et arrête aussitôt la clé de session (ses ordres reçoivent trading_paused), avant même l’envoi de la transaction.
| Statut | Cas |
|---|---|
| 400 | Un champ manquant ou invalide, un dépôt qui ne dépasse pas les frais |
| 409 | "Deposit first" (pas encore de compte), aucun retrait en attente ou retrait pas encore prêt, pas de compte USDC à la destination |
/api/relay/submitEnvoyer une transaction préparée après sa signature par votre portefeuille
| Champ | Type | Description |
|---|---|---|
transaction | string | base64 : la transaction de /relay ou de /withdraw-now avec la signature de votre portefeuille |
curl -X POST "https://seeryx.com/api/relay/submit" \
-H "X-Auth-Token: $TOKEN"{ "signature": "5VERv8NM..." }- Seeryx ajoute sa propre signature, vérifie toutes les signatures et envoie la transaction à Solana ; signature en est l’identifiant. Attendez la confirmation avec n’importe quel RPC Solana (getSignatureStatuses).
| Statut | Cas |
|---|---|
| 400 | Pas une transaction préparée pour votre compte au cours des 5 dernières minutes, ou déjà envoyée |
| 409 | Son blockhash a expiré avant qu’elle n’atteigne Solana : préparez-la de nouveau |
/api/withdraw-nowUn retrait immédiat, à signer par le portefeuille
| Champ | Type | Description |
|---|---|---|
amount | number | USDC qui quittent votre compte, frais de retrait compris |
to | string | Un autre portefeuille Solana, ou une adresse sur network |
network | string | Avec token : livrer sur un autre réseau (un réseau de /deposit/options avec withdraw true) |
token | string | USDC ou USDT |
cancelPending | boolean | Remplacer un retrait différé en attente |
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 }- Signez la transaction avec le portefeuille et envoyez-la via /api/relay/submit. accountFee correspond aux frais de retrait, prélevés sur le montant. Avec network et token, la réponse contient aussi bridge { receive, fee, seconds }.
| Statut | Cas |
|---|---|
| 400 | Le montant ne dépasse pas les frais, ou dépasse vos liquidités libres |
| 409 | L’une de vos opérations est encore en cours de règlement : réessayez dans quelques secondes, ou utilisez un retrait différé |
/api/withdraw/quoteCe que livre un retrait vers un autre réseau
| Champ | Type | Description |
|---|---|---|
amount | number | USDC qui quittent votre compte |
network | string | Un réseau de /deposit/options |
token | string | USDC ou USDT |
to | string | Adresse de destination facultative |
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 correspond aux frais de retrait ; networkFee, au coût du pont de l’autre réseau, à titre estimatif.
/api/deposit/optionsRéseaux et jetons depuis lesquels un dépôt peut arriver
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 sur Solana, sans pont. auto : ce qui arrive à votre adresse de dépôt est ajouté automatiquement à votre solde. withdraw : un retrait peut y être livré.
/api/deposit/addressVotre propre adresse de dépôt pour un jeton sur un réseau
| Champ | Type | Description |
|---|---|---|
network | string | Un réseau de /deposit/options |
token | string | USDT ou 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 }- La même adresse à chaque fois pour votre portefeuille et votre itinéraire. Envoyez au moins min.
| Statut | Cas |
|---|---|
| 409 | L’itinéraire n’est pas disponible |
| 502 | Le pont est injoignable |
/api/deposit/recoverRetrouver un dépôt envoyé avec un autre jeton ou sur un autre réseau
curl -X POST "https://seeryx.com/api/deposit/recover" \
-H "X-Auth-Token: $TOKEN"{ "found": [{ "address": "0x09a3...", "network": "ethereum", "token": "USDC", "amount": "25000000" }] }- Pour des USDC envoyés à l’adresse affichée pour l’USDT, ou à une adresse sur un autre réseau que celui pour lequel elle a été créée : le pont cherche de nouveau et transfère ce qu’il trouve. amount est exprimé dans les plus petites unités du jeton.
| Statut | Cas |
|---|---|
| 429 | Plus de 2 appels par minute |