Both rails are 1:1 with USD in the sandbox, so
total reads as a dollar
figure.
Reading balances
Confidential balances and wallet type
The cAROUSD contract stores balances as encrypted handles. Whether AroPay can show you the plaintext depends on who controls the key:Custodial wallets
The sandbox holds the wallet key, so it can sign the decryption request and
return the plaintext amount.
confidential.amount is a decimal string and
encrypted is false.External wallets
The sandbox cannot decrypt a balance it doesn’t own.
confidential.amount
is null, encrypted is true, and only the raw handle is reported;
total.amount is null too.A zero confidential balance is detectable without decryption (the handle is
the zero handle), so brand-new wallets show
"amount": "0" immediately.Gas balances
Confidential reads are comparatively heavy; they involve FHE decryption through the relayer. When all you need is gas visibility (dashboards, health checks, alerts), use the dedicated endpoint instead of/balances:
GET /gas performs no token or FHE reads, making it safe to poll; it’s
what backs the dashboard’s gas indicator and Gas Station page. If a wallet’s
RPC read fails, its balance is reported as zero rather than failing the whole
request.
Amount format
Everywhere in the API, amounts are decimal strings in human units:"125.50" means 125.5 tokens (or ETH). You never deal in wei or base units,
with one exception: GET /gas also returns a wei string for precision-
sensitive tooling.