inicio

Guías

Depósitos y retiros

Mueve USDC en Solana a y desde una cuenta de Seeryx con código: depósitos, direcciones de depósito, retiros inmediatos y diferidos y lo que cuesta cada uno.

Descripción general

Tu efectivo son USDC en Solana, en tu propia cuenta del programa de Seeryx. Los depósitos y los retiros son transacciones de tu billetera que el servidor prepara con Seeryx como pagador de la comisión: la billetera firma, Seeryx añade su firma y la envía, así que la billetera no necesita SOL. Cada flujo consta de tres llamadas:

  1. Pide la transacción: POST /api/relay o POST /api/withdraw-now responde { "transaction": "<base64>" }.
  2. Fírmala con la billetera (solo firmar, no enviar) y envíala con POST /api/relay/submit; la respuesta es su firma.
  3. Espera a que Solana la confirme y, después, llama a POST /api/funds/refresh: tu efectivo se actualiza en segundos.

sendPrepared en chain.ts (send_prepared en chain.py) hace los pasos 2 y 3.

Depositar desde la billetera

  • POST /api/relay con { "action": "deposit", "amount": 10 }; después, firma y envía.
  • La comisión de depósito (1 USDC) se paga en la misma transacción y el resto se abona.
  • Tu primer depósito abre tu cuenta: debe dejar al menos 1 USDC después de la comisión. Hasta entonces, abrir una sesión de trading responde 409 "Deposit first".

Dirección de depósito

POST /api/deposit/address con { "network": "solana", "token": "USDC" } te da una dirección propia. Los USDC enviados allí desde un exchange o desde cualquier billetera se añaden a tu saldo automáticamente (auto: true), menos la comisión de depósito. GET /api/deposit/options lista las demás redes y tokens (USDT y USDC en Ethereum, BNB Chain, Base, Polygon, Arbitrum y más), cada uno con su mínimo; esos llegan a través de un puente. GET /api/funds/wallet muestra lo que está en camino (incoming).

Retirar al instante

  • POST /api/withdraw-now con { "amount": 25 } (y to para otra billetera de Solana); después, firma y envía.
  • La comisión de retiro (1 USDC, accountFee en la respuesta) se descuenta del importe; también abre una cuenta de USDC para un destino que no la tenga.
  • Con network y token, los USDC siguen a través de un puente hacia otra red; POST /api/withdraw/quote indica antes lo que llega.
  • 409 mientras una de tus operaciones se sigue liquidando: inténtalo de nuevo unos segundos después.

Retiro diferido

Gratis y firmado solo por tu billetera: POST /api/relay con { "action": "request_withdraw", "amount": 25 }, espera los withdrawDelay segundos de GET /api/funds (60) y, después, execute_withdraw paga el importe a tu billetera (o a to, una billetera que ya tenga una cuenta de USDC). cancel_withdraw anula la solicitud.

Código

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' });

Todas las comisiones en un solo lugar: Comisiones.

Endpoints de fondos

Tus USDC están en tu propia cuenta del programa de Seeryx en Solana. El servidor prepara cada transacción tuya con Seeryx pagando la comisión de red: tu billetera solo firma.

GET/api/funds

Los datos de la cadena de bloques que necesita un cliente

Público
Solicitud
curl "https://seeryx.com/api/funds"
Respuesta
{
  "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: el programa de Seeryx (las cuentas de mercado se derivan de él); mint: USDC. onChainTrading: cada orden, división y combinación debe estar firmada. relayed: Seeryx paga la comisión de red de tus transacciones.
  • finePrices: límites en décimas de centavo por debajo de 1¢ y por encima de 99¢. budgetBuys: las compras de mercado se firman por presupuesto (PMO4). maxSessionTtl: la sesión de trading más larga, en segundos; withdrawDelay: la espera de un retiro diferido, en segundos. depositFee y withdrawFee, en USDC.
GET/api/funds/wallet

USDC en tu billetera, tu efectivo en el programa, USDC en camino

Con sesión iniciadaSolana
CampoTipoDescripción
freshconsultaopcional1Omitir la caché de 5 segundos
Solicitud
curl "https://seeryx.com/api/funds/wallet" \
  -H "X-Auth-Token: $TOKEN"
Respuesta
{ "wallet": 200, "account": null, "sol": 0, "incoming": 0 }
  • wallet: USDC en la billetera aún no depositados. account: efectivo en el programa, null hasta que el primer depósito abre la cuenta. incoming: USDC que llegaron a tu dirección de depósito y están en camino a tu saldo.
EstadoCuándo
502No se pudo leer Solana; nunca se devuelve un cero
POST/api/funds/refresh

Tras un depósito o un retiro: leer el programa ahora

Con sesión iniciadaSolana
Solicitud
curl -X POST "https://seeryx.com/api/funds/refresh" \
  -H "X-Auth-Token: $TOKEN"
Respuesta
{ "ok": true }
POST/api/relay

Preparar una transacción tuya para que la firme la billetera

Con sesión iniciadaSolana
CampoTipoDescripción
actioncuerpoobligatoriostringdeposit, session, close_session, request_withdraw, cancel_withdraw o execute_withdraw
amountcuerpoopcionalnumberdeposit, request_withdraw: USDC
keycuerpoopcionalstringsession: la nueva clave de sesión; close_session: la clave de sesión, cuando firma ella en lugar de la billetera
expiresAtcuerpoopcionalnumbersession: segundos Unix, como máximo maxSessionTtl a partir de ahora
limitcuerpoopcionalnumbersession: los USDC que puede gastar en total
maxTradecuerpoopcionalnumbersession: los USDC que puede gastar una orden, como máximo limit
tocuerpoopcionalstringexecute_withdraw: otra billetera de Solana que tenga una cuenta de USDC
Solicitud
curl -X POST "https://seeryx.com/api/relay" \
  -H "X-Auth-Token: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"action":"deposit","amount":10}'
Respuesta
{ "transaction": "AQAB..." }
  • transaction es una transacción v0 en base64 con Seeryx como pagador de la comisión y todos los espacios de firma vacíos. Fírmala con la billetera (solo firmar, sin enviarla) y, después, envíala con POST a /api/relay/submit.
  • Cada depósito paga la comisión de depósito (depositFee de GET /api/funds) en la misma transacción; el resto se abona. Un primer depósito debe dejar al menos 1 USDC después de la comisión: abre tu cuenta.
  • close_session cancela tus órdenes en el libro y detiene la clave de sesión al instante (sus órdenes reciben trading_paused), incluso antes de que se envíe la transacción.
EstadoCuándo
400Un campo ausente o no válido, un depósito que no supera la comisión
409"Deposit first" (aún no hay cuenta), ningún retiro en espera o todavía no disponible, ninguna cuenta de USDC en el destino
POST/api/relay/submit

Enviar una transacción preparada después de que tu billetera la firme

Con sesión iniciadaSolana
CampoTipoDescripción
transactioncuerpoobligatoriostringbase64: la transacción de /relay o /withdraw-now con la firma de tu billetera
Solicitud
curl -X POST "https://seeryx.com/api/relay/submit" \
  -H "X-Auth-Token: $TOKEN"
Respuesta
{ "signature": "5VERv8NM..." }
  • Seeryx añade su propia firma, comprueba todas las firmas y envía la transacción a Solana; signature es su id. Espera la confirmación con cualquier RPC de Solana (getSignatureStatuses).
EstadoCuándo
400No es una transacción preparada para tu cuenta en los últimos 5 minutos, o ya se envió
409Su blockhash venció antes de que llegara a Solana: prepárala de nuevo
POST/api/withdraw-now

Un retiro inmediato, para que lo firme la billetera

Con sesión iniciadaSolana
CampoTipoDescripción
amountcuerpoobligatorionumberLos USDC que salen de tu cuenta, comisión de retiro incluida
tocuerpoopcionalstringOtra billetera de Solana, o una dirección en network
networkcuerpoopcionalstringCon token: entregar en otra red (una red de /deposit/options con withdraw true)
tokencuerpoopcionalstringUSDC o USDT
cancelPendingcuerpoopcionalbooleanReemplazar un retiro diferido en espera
Solicitud
curl -X POST "https://seeryx.com/api/withdraw-now" \
  -H "X-Auth-Token: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"amount":25}'
Respuesta
{ "transaction": "AQAB...", "accountFee": 1 }
  • Firma la transacción con la billetera y envíala a través de /api/relay/submit. accountFee es la comisión de retiro, que se descuenta del importe. Con network y token, la respuesta incluye también bridge { receive, fee, seconds }.
EstadoCuándo
400El importe no supera la comisión o es mayor que tu efectivo libre
409Una de tus operaciones se sigue liquidando: inténtalo de nuevo en unos segundos o usa un retiro diferido
POST/api/withdraw/quote

Lo que entrega un retiro a otra red

Con sesión iniciadaSolana
CampoTipoDescripción
amountcuerpoobligatorionumberLos USDC que salen de tu cuenta
networkcuerpoobligatoriostringUna red de /deposit/options
tokencuerpoobligatoriostringUSDC o USDT
tocuerpoopcionalstringDirección de destino opcional
Solicitud
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"}'
Respuesta
{ "receive": 18.89, "fee": 0.11, "networkFee": 0.11, "bridgeFee": 1, "seconds": 1 }
  • bridgeFee es la comisión de retiro; networkFee, el coste estimado del puente de la otra red.
GET/api/deposit/options

Redes y tokens desde los que puede llegar un depósito

PúblicoSolana
Solicitud
curl "https://seeryx.com/api/deposit/options"
Respuesta
{ "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 en Solana, sin puente. auto: lo que llega a tu dirección de depósito se añade a tu saldo automáticamente. withdraw: un retiro puede entregar allí.
POST/api/deposit/address

Tu propia dirección de depósito para un token en una red

Con sesión iniciadaSolana
CampoTipoDescripción
networkcuerpoobligatoriostringUna red de /deposit/options
tokencuerpoobligatoriostringUSDT o USDC
Solicitud
curl -X POST "https://seeryx.com/api/deposit/address" \
  -H "X-Auth-Token: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"network":"solana","token":"USDC"}'
Respuesta
{ "network": "solana", "token": "USDC", "address": "7xKXtg2C...", "min": 1, "direct": true, "auto": true }
  • Siempre la misma dirección para tu billetera y esa ruta. Envía al menos min.
EstadoCuándo
409La ruta no está disponible
502No se puede contactar con el puente
POST/api/deposit/recover

Encontrar un depósito enviado con otro token o en otra red

Con sesión iniciadaSolana
Solicitud
curl -X POST "https://seeryx.com/api/deposit/recover" \
  -H "X-Auth-Token: $TOKEN"
Respuesta
{ "found": [{ "address": "0x09a3...", "network": "ethereum", "token": "USDC", "amount": "25000000" }] }
  • Para USDC enviados a la dirección mostrada para USDT, o a una dirección en una red distinta de aquella para la que se creó: el puente vuelve a buscar y reenvía lo que encuentra. amount está en las unidades mínimas del token.
EstadoCuándo
429Más de 2 llamadas por minuto