What this guide covers. Depositing WETH (wrap native ETH first) or a Stock Token to the
BridgeVault on mainnet or testnet. The steps are the same for both; only native ETH needs wrapping first. Check that the vault accepts a token (step 3) before depositing it. There is no on-chain USDG deposit path documented for mainnet: deposit USDG through the app. On testnet, to deposit USDG on-chain, see Fund a testnet account.Deposit contract addresses can change
Before you start
- The token on Robinhood Chain, plus a little native ETH for gas. Buy tokens on Arcus spot.
- A subaccount to deposit into (
accountIndex). You don’t need an API key or an order first.
Step 1: Read the current addresses
Read theBridgeVault address, chain ID and token contractId as described in Deposit contract addresses can change. Do this for every deposit.
Step 2: Hold the exact token
Use the token atcontractId on GET /v1/spotAssets. Any other token for the same asset isn’t credited. For ETH that is WETH on Robinhood Chain. Native ETH isn’t accepted, so wrap it first by calling deposit() on the WETH contract.
Step 3: Check the vault accepts the token
Call theBridgeVault’s depositConfig(token) view. It returns (allowed, minAmount):
allowedmust betrue. An asset can appear onGET /v1/spotAssetsbefore the vault accepts it.- Your
amountmust be at leastminAmount, in the token’s smallest unit. Minimums are set per token and can change, so read it before each deposit.
Step 4: Approve and deposit
- Approve the
BridgeVaultto pull the amount from your wallet (approve(BridgeVault, amount)on the token). Token deposits go to theBridgeVaultdirectly, not through a USDG deposit proxy. - Call
initiateDeposit(owner, accountIndex, token, amount)on theBridgeVault.ownermust be the wallet that sends the transaction, andamountis in the token’s smallest unit (read the token’sdecimals()). Keep the returnedinboxIndex; it is also emitted in theDepositInitiatedevent, and you need it to reclaim a deposit that is never credited.
stepSize so you can withdraw the full credited size later. Step 2 of Use Multi-Asset Collateral has the code.
Step 5: Confirm the credit
Arcus credits the token after the transaction is picked up from the chain.- Poll
GET /v1/accountTransferUpdates(or theaccountTransferUpdateschannel) for theDEPOSITrow. It carriesspotAssetIdand the size in token units asamount, and endsAPPLIEDonce the token is credited, or with aREJECTED_*status if Arcus refused it. - Read
GET /v1/account. The token shows inspotPositions, your USDG balance is unchanged, andborrowHeadroomrises by about the token’s value ×ltvInitial. There is no separate “enable as collateral” step. - A credited deposit to a subaccount you have never used activates it:
GET /v1/accountfor thataccountIndexgoes from404to200. A rejected deposit doesn’t.
If a deposit fails
A token deposit has two steps. You send it on-chain, and then Arcus credits it to your account. Either step can fail:Reclaiming a deposit
A token that isn’t credited stays held by theBridgeVault, not lost. To reclaim it, first read BridgeVault.pendingDepositByIndex(index). It returns the pending deposit’s record:
amount: non-zero while the deposit is still reclaimable;0once it has been credited or refunded.expiresAt:cancelDepositsucceeds only after this time. A rejected deposit is expired early, so itsexpiresAthas already passed.cancelRecipient: the address that receives the refund, and the only address that can callcancelDepositfor a deposit made withinitiateDeposit. For a token you deposited withinitiateDepositon theBridgeVault, it is your wallet.
cancelDeposit(index) on the BridgeVault from that wallet. The tokens go back to the wallet, and pendingDepositByIndex(index) returns an amount of 0. Calling cancelDeposit again reverts with PendingDepositNotFound. A deposit routed through a deposit proxy is cancelled through that proxy instead.
Which index to use:
- Rejected deposit (a
REJECTED_*row):rootchainQueueIndexfrom the rejected row. It is the same number as the deposit’sinboxIndex. You can reclaim it right away. - Never-credited deposit (no row): the
inboxIndexfrom step 4. Reclaim it onceexpiresAthas passed.
Next steps
- Use Multi-Asset Collateral: trade on the loan, repay it and withdraw the token, with code.
- Multi-Asset Collateral: eligible assets, LTVs, interest and liquidation.
- Onboarding & deposits: depositing USDG through the app.