Depositing to Oracle
Every Oracle user — retail bettor, LP, market maker — funds their account the same way: send USDC (or any SPL token, soon) to a static per-user Solana address. A listener auto-bridges it to Fogo and credits your in-app balance within 1-5 minutes.
No separate "LP deposit" or "trader deposit" — one flow for everyone.
Get your deposit address
GET https://api.parti-oracle.pbcapps.dev/v1/deposit/bridge-address/{your_fogo_pubkey}
Response:
{
"success": true,
"data": {
"chain": "solana",
"address": "4xR2kF7b8K...",
"instructions": "Send USDC (SPL token) or SOL from any Solana wallet ...",
"initialized": true,
"usdc_token": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"min_usdc_micro": 1000000,
"min_sol_lamports": 50000000,
"max_usdc_per_tx_micro": 10000000000,
"daily_cap_remaining_usdc_micro": 100000000000
}
}
Your Fogo pubkey can be passed as base58 (standard Solana/Fogo format) or 32-byte hex. The returned address is deterministic — the same input always produces the same output, so you can save it and reuse it across sessions.
Limits
The backend enforces anti-dust minimums (below which bridge fees exceed deposit value), per-transaction caps, and a global daily aggregate cap.
Anti-dust minimums (all tiers):
- USDC: 1 USDC (1,000,000 micro-USDC)
- SOL: 0.05 SOL (50,000,000 lamports)
Per-tx caps are tier-based. Default = retail. Market makers and institutional desks: see Market Makers → Operations for the full tier table and upgrade flow.
Daily bridge cap: a global 100,000 USDC aggregate across all bridge deposits, rolling at 00:00 UTC. daily_cap_remaining_usdc_micro in the deposit-address response is live.
Send USDC
From any Solana wallet (Phantom, Backpack, Solflare, CLI), send SPL USDC to the address you received. Use the Solana mainnet USDC mint:
EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
Example via Solana CLI:
spl-token transfer --url https://api.mainnet-beta.solana.com \
EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v \
100 \
4xR2kF7b8K... # your Oracle deposit address
Already on Fogo?
If your users hold USDC on Fogo already (e.g. they bridged through Portal or came from another Fogo app), skip the Solana bridge entirely. Send USDC directly to the user's proxy wallet USDC ATA on Fogo and the listener credits their in-app balance on the next slot.
Derive the proxy wallet:
proxy_wallet = PDA([b"proxy", user_fogo_pubkey], oracle_vault_program_id)
ata = ATA(proxy_wallet, fogo_usdc_mint)
The bridge daily cap and per-tx tier caps do not apply to native Fogo deposits — those limits only gate the cross-chain bridge path.
What happens next (automatic)
- Oracle's listener detects the SPL transfer within ~10 seconds
- If you sent USDC, it's bridged directly via Wormhole to Fogo
- If you sent a non-USDC SPL token (SOL, BONK, etc — coming soon), it's routed through Jupiter to USDC first, then bridged
- Wormhole guardians sign the VAA (~30 seconds)
- Operator submits
complete_transfer_wrappedon Fogo — USDC lands in your proxy wallet ATA operator_depositcredits your in-app USDC balance
Total: 1-5 minutes end-to-end in normal conditions.
Check balance
GET https://api.parti-oracle.pbcapps.dev/v1/balance/{your_fogo_pubkey}
{
"usdc_balance": 100000000, // micro-USDC (6 decimals) — 100.000000 USDC
"locked_balance": 0,
"available": 100000000
}
Withdraw
Symmetric to deposit:
POST https://api.parti-oracle.pbcapps.dev/v1/withdraw
{
"fogo_address": "<your_fogo_pubkey>",
"amount": 50000000, // micro-USDC
"recipient_solana": "<your_solana_wallet>" // optional; defaults to bridge address
}
- Oracle burns your balance on Fogo via
transfer_wrapped - Wormhole emits a VAA
- Someone (you or a relayer — TBD) calls
complete_transfer_nativeon Solana → USDC released to your Solana wallet
FAQ
Why do I need a special deposit address? Why not just send to my proxy wallet? The proxy_wallet on Fogo is the final destination. To get funds from Solana → Fogo, someone has to run the Wormhole bridge transaction. The deposit address is an operator-controlled wallet that does that bridging automatically. It's functionally identical to how Polymarket, Hyperliquid, or any cross-chain exchange works.
Is it safe? You control the private key to my deposit address. Yes, transiently. The listener picks up the deposit within seconds and bridges it. Funds are custodied by the operator for ~10-60 seconds while the swap+bridge tx confirms. After that they're in the Wormhole bridge (decentralized), and then in your own proxy_wallet on Fogo (also your custody via the vault program). If you want zero-custody, use Portal Bridge directly and set the recipient yourself.
What if the listener goes down and my USDC sits in the deposit address? The deposit address is deterministic; if we need to, we recover funds from it by re-deriving the keypair from the master seed. Your funds are safe even if the service is offline.
What SPL tokens are supported? Today: USDC only. Coming: all Jupiter-supported tokens (SOL, BONK, WIF, WBTC, ETH, etc.) via an auto-swap before bridging.
What about EVM / Bitcoin / other chains? Planned via relay.link integration once they add Fogo as a destination chain. Timeline: TBD. For now, bridge to Solana first (via Wormhole, CCTP, or a CEX) then deposit via the Solana flow above.
Fees? - Solana tx fees (~$0.001) — paid by the operator out of your deposit, no separate charge - Wormhole relay fee (~$0) — Oracle operator covers - Slippage on non-USDC swaps (Jupiter) — maximum 1% slippage, you pay this - No Oracle-side deposit fee