Deposits & Withdrawals
Fund your Parti account by sending SOL to your personal Solana deposit address, or USDC.s directly on Fogo. Deposits are auto-bridged and credited within 1–5 minutes.
Supported paths: - Solana: Send SOL (min 0.03 SOL) → auto-swapped to USDC via Jupiter → NTT bridged to Fogo → engine credited - Fogo: Send USDC.s to your deposit address → auto-swept to vault → engine credited
Get your deposit address
GET /v1/deposit/bridge-address/{user_fogo_pubkey}
user_fogo_pubkey accepts base58 (standard Solana/Fogo format) or 32-byte hex.
Response:
{
"success": true,
"data": {
"chain": "solana",
"address": "4xR2kF7b8K...",
"instructions": "Send SOL from any Solana wallet...",
"initialized": true,
"usdc_token": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"min_sol_lamports": 30000000,
"max_usdc_per_tx_micro": 10000000000,
"daily_cap_remaining_usdc_micro": 100000000000
}
}
The returned address is deterministic — same input always returns the same address. Safe to cache.
Deposit (Solana)
Send SOL (not USDC) to your deposit address from any Solana wallet (Phantom, Backpack, Solflare).
| Parameter | Value |
|---|---|
| Minimum | 0.03 SOL |
| Token | Native SOL only |
| Swap | Auto via Jupiter (1% max slippage) |
| Bridge | Wormhole NTT (Native Token Transfers) |
| Time | 1–5 minutes end-to-end |
What happens automatically:
- Solana listener detects SOL at your deposit address (~10s polling)
- Jupiter swaps SOL → USDC (0.002 SOL reserved for tx fees)
- USDC transferred to operator, then NTT locked on Solana
- Wormhole guardians sign VAA (~15-30s)
- Sidecar redeems USDC.s on Fogo to your proxy wallet
operator_depositmoves USDC.s from proxy to vault- Engine balance credited
Fees
| Fee | Amount | Who pays |
|---|---|---|
| Jupiter swap slippage | ~0.1% (1% max) | User (deducted from swap output) |
| Solana tx fees | ~$0.001 | Operator |
| Wormhole NTT rent | ~$0.45 | Operator (from deposit reserve) |
| Deposit fee | 0% | — |
Deposit (Fogo direct)
If you already hold USDC.s on Fogo, skip Solana entirely. Send USDC.s to your deposit address on Fogo:
proxy_wallet = PDA([b"proxy", user_fogo_pubkey], oracle_vault_program_id)
ata = ATA(proxy_wallet, FOGO_USDC_MINT)
USDC.s mint on Fogo: uSd2czE61Evaf76RNbq4KPpXnkiL3irdzgLFUMe3NoG
The Fogo listener picks up the balance within ~3 seconds and credits the engine. No bridge fees, no minimums beyond dust (0.01 USDC).
Check deposit progress
GET /v1/deposit/progress/{user_fogo_pubkey}
Returns current deposit stage: detected → bridging → confirming → credited
Check balance
GET /v1/balance/{user_fogo_pubkey}
{
"data": {
"available_usdc": 10000000,
"locked_usdc": 0,
"gas_debt_usdc": 0
}
}
All values in micro-USDC (6 decimals). 1 USDC = 1,000,000.
Withdraw
To Fogo (instant, no fee)
POST /v1/withdraw
{
"fogo_address": "<user fogo pubkey hex>",
"amount": 10000000,
"chain": "fogo",
"recipient_fogo": "<destination fogo pubkey base58>",
"signature": "<ed25519 hex>",
"nonce": 1
}
Atomic 3-instruction transaction — arrives in ~1 second.
To Solana ($0.50 fee)
POST /v1/withdraw
{
"fogo_address": "<user fogo pubkey hex>",
"amount": 10000000,
"chain": "solana",
"recipient_solana": "<solana wallet base58>",
"signature": "<ed25519 hex>",
"nonce": 1
}
Multi-step: vault → proxy → NTT burn → Wormhole → Solana redeem. $0.50 gas fee deducted from withdrawal amount.
Signature format
The wallet signs a human-readable message:
Parti Withdraw
User: <base58 pubkey>
Amount: $10.00 USDC
To: <base58 recipient>
Chain: solana
Nonce: 1
The signature must be Ed25519 over these exact bytes. The engine verifies the signature matches.
Limits
Anti-dust minimums
| Asset | Minimum |
|---|---|
| SOL (Solana deposit) | 0.03 SOL |
| USDC.s (Fogo deposit) | 0.01 USDC |
| Withdrawal | > gas fee ($0.50 for Solana, $0 for Fogo) |
| Max withdrawal | 1,000,000 USDC |
Per-transaction tier caps
| Tier | Max USDC per tx |
|---|---|
| 0 — Retail (default) | 10,000 USDC |
| 1 — LP | 1,000,000 USDC |
| 2 — Institutional | 10,000,000 USDC |
Global daily bridge cap
- Cap: 100,000 USDC across all users
- Reset: 00:00 UTC daily
- Deposits above the cap are queued for retry after reset
Proxy Wallets
Seeds: ["proxy", user_fogo_pubkey]
Program: oracle-vault (Fogo)
Per-user PDA on Fogo. Receives bridge arrivals, holds USDC temporarily, source for withdrawals.
GET /v1/proxy/{user_fogo_pubkey}
{
"data": {
"fogo_address": "abc123...",
"proxy_wallet": "7yQ3mH9a...",
"usdc_balance": 0,
"initialized": true
}
}
FAQ
Why SOL only on Solana? Why not USDC? SOL deposits bring their own gas for the Jupiter swap + NTT bridge transactions. USDC deposits would require the operator to fund the deposit address with SOL first, adding complexity. Deposit USDC directly on Fogo instead.
Is it safe? The operator holds my deposit address key. Yes, transiently. Funds are swept within seconds. After the bridge, they're in the Wormhole NTT system (decentralized), then your proxy wallet (controlled by the vault program). Zero-custody alternative: bridge USDC to Fogo via Portal Bridge and send to your proxy wallet directly.
What if the listener goes down? The deposit address is deterministic from a master seed. Funds are recoverable even if the service is offline — the operator rederives the keypair and manually bridges. No funds lost.
What about EVM / Bitcoin? Bridge to Solana first (via Wormhole, CCTP, or any CEX), then deposit SOL via the Solana flow.