Skip to content

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:

  1. Solana listener detects SOL at your deposit address (~10s polling)
  2. Jupiter swaps SOL → USDC (0.002 SOL reserved for tx fees)
  3. USDC transferred to operator, then NTT locked on Solana
  4. Wormhole guardians sign VAA (~15-30s)
  5. Sidecar redeems USDC.s on Fogo to your proxy wallet
  6. operator_deposit moves USDC.s from proxy to vault
  7. 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: detectedbridgingconfirmingcredited


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.