Skip to content

Deposits & Withdrawals

Fund a Parti account by sending USDG to your personal deposit address on Robinhood Chain. USDG on the matching Robinhood Chain (mainnet for prod, testnet for staging) is credited to your Oracle engine balance, usually under a minute.

Your identity — and the address you fund — is your EVM 0x address. All deposit/withdraw APIs key off that address, passed lowercase.

Mainnet Testnet (staging)
EVM chain id 4663 46630
Deposit host https://oracle-deposit.parti.com https://deposit-staging.parti-oracle.pbcapps.dev
USDG token (6 dp) 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 0x29ECEE9eA19C638EB5b69f4e5f2C77B794982cd0

Orders consume your engine balance (the off-chain credit ledger), not on-chain USDG directly. You deposit USDG to a per-account forwarder and the deposit watcher credits your engine balance.

Get your deposit address

The address is a CREATE2 DepositForwarder derived purely from your 0x address by the vault's DepositForwarderFactory. Pass your address lowercase — the route runs an EIP-55 checksum on the input, so a mixed-case address with a bad checksum returns derivation_failed:

# Prod
curl https://oracle-deposit.parti.com/v1/deposit/robinhood-address/<your-lowercase-0x-address>

# Staging
curl https://deposit-staging.parti-oracle.pbcapps.dev/v1/deposit/robinhood-address/<your-lowercase-0x-address>

Response:

{
  "address": "0x…",          // your deposit forwarder — send USDG here
  "chain": "robinhood",
  "chain_id": 4663,           // 46630 on staging
  "token": "USDG",
  "token_address": "0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",
  "min_usdg_micro": 1000000
}

The address is deterministic — the same 0x input always returns the same forwarder.

Note: the older /v1/deposit/bridge-address/<pubkey> route is the retired Solana/Fogo path — it returns invalid_pubkey for a 0x address. Use robinhood-address.


Send USDG on Robinhood Chain

Send USDG on Robinhood Chain (the matching network — mainnet for prod, testnet for staging) to the returned address.

Parameter Value
Token USDG on Robinhood Chain only
Minimum 1 USDG (1000000 micro)
Time usually under a minute

Only USDG on that chain credits; other tokens or other networks are lost. The watcher deploys-and-sweeps the forwarder and credits your engine balance.


Check balance

Balance is served by the gateway, keyed to your lowercase 0x address:

GET {GATEWAY_URL}/v1/balance/<your-lowercase-0x-address>
{
  "data": {
    "available_usdc": 10000000,
    "locked_usdc": 0,
    "gas_debt_usdc": 0
  }
}

All values are in micro-dollars (6 decimals): 1000000 = $1.00. The settled token is USDG; the usdc-suffixed keys are the engine's chain-agnostic ledger field names and are unchanged across the cutover.


Withdraw

Withdraw any time via POST /v1/withdraw-signed with chain:'robinhood' and a signed EIP-712 Withdraw{user,recipient,amount,nonce,deadline}:

POST {GATEWAY_URL}/v1/withdraw-signed
{
  "user": "<lowercase 0x address>",
  "recipient": "<destination lowercase 0x address>",
  "amount": "10000000",          // USDG micro, integer string
  "nonce": 0,
  "deadline": 1799000000,        // unix seconds; vault reverts past it
  "signature": "<65-byte EIP-712 Withdraw signature>",
  "chain": "robinhood"
}

⚠️ Withdraws use the SEQUENTIAL on-chain vault nonce — NOT the order timestamp nonce. Orders carry a monotonic timestamp nonce checked off-chain. A withdraw is verified on-chain by PartiVault, which requires nonce == vault.nonces(user) — a per-user counter that starts at 0 and increments by 1 per confirmed withdraw. Signing a timestamp nonce for a withdraw reverts on-chain with BadNonce and the funds never move. Read vault.nonces(user) over RPC first (mainnet https://rpc.mainnet.chain.robinhood.com, testnet https://rpc.testnet.chain.robinhood.com), sign the Withdraw struct with that nonce (0 for a first withdraw), then submit.

Signature

Sign the EIP-712 Withdraw{user,recipient,amount,nonce,deadline} struct under the PartiVault domain. amount is in USDG micro (6 dp). The vault verifies the signature recovers to the user's 0x address and that deadline has not passed.


Limits

Minimums: - Deposit: 1 USDG (1000000 micro) - Max withdrawal: 1,000,000 USDG

Per-tx caps (tier-based):

Tier Max per tx Upgrade
0 — Retail 10,000 USDG Default
1 — LP 1,000,000 USDG Contact team
2 — Institutional 10,000,000 USDG Contact team

Daily deposit cap: 100,000 USDG aggregate (resets 00:00 UTC)


FAQ

What token do I deposit? USDG on Robinhood Chain — the matching network for your environment (mainnet 4663 for prod, testnet 46630 for staging). Other tokens or networks don't credit.

Is the deposit address custodial? It's a CREATE2 DepositForwarder derived from your 0x address. The watcher deploys-and-sweeps it into the vault and credits your engine balance.

derivation_failed on the deposit route? You passed a mixed-case 0x address with a bad EIP-55 checksum. Pass it lowercase. (invalid_address means it wasn't a 0x + 40-hex string.)

Fees? - Direct USDG send: just Robinhood Chain gas. - Withdrawal: the operator executes on-chain.