Deposits & Withdrawals
Fund your Parti account by sending USDG (6 decimals) to your personal on-chain deposit address on Robinhood Chain (an EVM L2). A watcher sweeps anything that lands there into the vault and credits your Oracle trading balance, usually in under a minute.
Your identity — and the address you fund — is a 0x EVM address. All
deposit, balance and withdraw APIs key off that address, lowercase on the
wire (the EIP-55 checksum is display-only).
Environments
Mainnet (parti.com) |
Testnet (staging) | |
|---|---|---|
| Chain ID | 4663 |
46630 |
| Gas token | ETH | ETH |
| Gateway (REST) | https://oracle-api.parti.com |
https://oracle-gateway.pbcapps.dev |
| Deposit host | https://oracle-deposit.parti.com |
https://deposit-staging.parti-oracle.pbcapps.dev |
PartiVault |
0x9e92EB52229a6aE5361b6e75be4569461ee5BBB9 |
0x400441a9eF70843a356227cf1872dFbA25B8FA71 |
| USDG token (6 dp) | 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 |
0x29ECEE9eA19C638EB5b69f4e5f2C77B794982cd0 |
| RPC | https://rpc.mainnet.chain.robinhood.com |
https://rpc.testnet.chain.robinhood.com |
Trading on mainnet is allowlist-gated during the venue's soft-launch. Validate the full deposit → trade → withdraw path on testnet first.
Get your deposit address
GET /v1/deposit/robinhood-address/{address}
{address} is your lowercase 0x EVM address. The route runs an EIP-55
checksum on the input, so a mixed-case address with a bad checksum returns
derivation_failed; pass it lowercase.
# Mainnet
curl https://oracle-deposit.parti.com/v1/deposit/robinhood-address/<your-lowercase-0x-address>
# Testnet (staging)
curl https://deposit-staging.parti-oracle.pbcapps.dev/v1/deposit/robinhood-address/<your-lowercase-0x-address>
Response:
{
"address": "0x…",
"chain": "robinhood",
"chain_id": 4663,
"token": "USDG",
"token_address": "0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",
"min_usdg_micro": 1000000
}
The returned address is a per-user CREATE2 DepositForwarder derived purely
from your 0x address by the vault's DepositForwarderFactory. It is
deterministic — the same wallet always resolves to the same forwarder
address (chain_id is 46630 on testnet). Safe to cache.
The older
GET /v1/deposit/bridge-address/{pubkey}route is the retired Solana/Fogo path — it returnsinvalid_pubkeyfor a0xaddress. Userobinhood-address.
Deposit
Send USDG on Robinhood Chain (the matching network — mainnet for prod,
testnet for staging) to the returned address.
| Parameter | Value |
|---|---|
| Token | USDG (6 decimals) on Robinhood Chain |
| Minimum | 1 USDG (min_usdg_micro = 1000000) |
| Cost | Robinhood Chain gas only (ETH) |
| Time | Usually under a minute |
Only USDG on the matching Robinhood Chain credits. Other tokens, or USDG on any other network, are lost — there is no cross-chain bridge in this path.
What happens automatically
- The deposit watcher detects USDG landing in your forwarder address.
- It deploys-and-sweeps the
DepositForwarder, moving the USDG into the vault. - Your Oracle engine balance is credited — usually under a minute.
There are no deposit fees.
Check balance
Keyed to your lowercase 0x address:
GET /v1/balance/{address}
{
"available": 10000000,
"locked": 0,
"total": 10000000
}
All values are in micro-USDG (6 decimals); 1000000 = $1.00. locked =
funds held by open orders. The off-chain engine balance is separate from your
on-chain USDG — orders consume the credited engine balance, not on-chain USDG
directly.
Withdraw
Withdraw any time with POST /v1/withdraw-signed, passing chain: "robinhood"
and an EIP-712 Withdraw signature from your EVM key. The operator executes
the on-chain transfer for you — you pay no gas.
POST /v1/withdraw-signed
{
"user": "<your lowercase 0x address>",
"recipient": "<destination 0x address>",
"amount": "10000000",
"chain": "robinhood",
"nonce": 0,
"deadline": 1799000000,
"signature": "<65-byte EIP-712 Withdraw signature>"
}
amount is USDG micro (6 decimals) as an integer string. USDG is transferred to
recipient on Robinhood Chain.
Signed struct (EIP-712)
The signature is over the Withdraw typed struct under the PartiVault domain:
domain = { name: "PartiVault", version: "1", chainId, verifyingContract } // verifyingContract = PartiVault address
Withdraw {
address user; // lowercase 0x
address recipient; // lowercase 0x
uint256 amount; // USDG micro (6 dp)
uint256 nonce; // SEQUENTIAL — vault.nonces(user), NOT a timestamp
uint256 deadline; // unix seconds; the vault reverts past it
}
⚠️ 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 requiresnonce == 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 withBadNonce("future nonce") and the funds never move. Readvault.nonces(user)over RPC first (see the RPC column in the environments table), sign theWithdrawstruct with that nonce (0for a first withdraw), then submit.
The vault
Custody is the PartiVault Solidity contract on Robinhood Chain (addresses
in the environments table). It holds USDG, exposes an operator withdraw gated by
the EIP-712 Withdraw signature above, anchors the settlement root, and
publishes solvency getters so anyone can verify backing on Blockscout. Pricing
is handled off-chain (Pyth / OpticOdds) — there is no on-chain price feed in the
vault.
FAQ
What token do I deposit? USDG (6 decimals) on Robinhood Chain. Nothing else credits on this path.
Is my deposit address custodial?
It is a deterministic CREATE2 DepositForwarder tied to your 0x wallet. The
watcher deploys-and-sweeps it into the vault; it never leaves Robinhood Chain.
What if the watcher is offline?
The forwarder address is deterministic from your 0x wallet, so deposited USDG
sits at a recoverable on-chain address. Nothing is lost — sweeping resumes when
the watcher comes back.
Why does my balance still show 0 after sending?
Confirm you sent USDG on the matching Robinhood Chain (mainnet 4663 /
testnet 46630), to the exact address from robinhood-address, and that the
amount is ≥ 1 USDG. Other tokens/networks do not credit.