Skip to content

50% OFF your first payment. Limited time!

Claim your 50% Discount

Arc-native data

The data plane Arc actually needs.

USDC is the gas token and the product. These four APIs exist because the movement of that token on Arc does not look like an ERC-20 transfer on Ethereum, and the difference lands in somebody's ledger.

Decimal-safe balances

One balance, both interfaces, no truncation

Native USDC is 18 decimals and the ERC-20 interface is 6. They are the same balance. A single response carries both plus the display string, and a truncation flag when the ERC-20 view is lossy for that account.

http
POST /v1/$KEY
{"method":"arcrpc_getUsdcBalance","params":["0xa1b2…","latest"]}

{
  "native18":  "1250000000000000000",
  "erc20_6":   "1250000",
  "display":   "1.25 USDC",
  "truncated": false
}

Settlement proofs

The commit certificate, cached and verifiable offline

Arc finalises on commit. arc_getCertificate returns the signed BFT certificate that proves it. We cache every certificate, index it by transaction hash as well as height, and ship a verifier that needs no network access, which is the artefact an auditor actually asks for.

http
GET /v1/$KEY/proof/0x91c4…7fe

{
  "height": 5185952,
  "round": 0,
  "blockHash": "0x4f21…a0c",
  "signatures": [{ "validator": "0x…", "sig": "0x…" }],
  "quorum": "9/11 voting power"
}

npx @arcrpc/verify proof.json   # offline, no network

Transfer feed

Every USDC movement once, not twice

An ERC-20 transfer emits a 6 decimal log from the token contract and an 18 decimal EIP-7708 log from the system emitter. A native send emits only the second. The feed merges both, de-duplicates, and attaches the Memo reference, blocklist changes and the matching CCTP leg.

http
wss://stream.arcrpc.com/v1/$KEY?feed=usdc.transfers

{
  "block": 5185952,
  "logIndex": 3,
  "from": "0x8f…",
  "to": "0x2c…",
  "native18": "250000000000000000000",
  "display": "250.00 USDC",
  "path": "erc20",
  "memo": "INV-40192",
  "cctp": null,
  "final": true
}

Compliance pre-flight

Ask before you burn the gas

On Arc a transfer reverts on a blocklisted counterparty, the zero address, a burn, a destructed account or a precompile target, and the revert still consumes gas. Pre-flight answers whether it will revert and which rule fires, against live blocklist state.

http
POST {"method":"arcrpc_simulateTransfer","params":[{
  "from":"0x8f…","to":"0x2c…","value":"250000000" }]}

{
  "willRevert": true,
  "reason": "recipient blocklisted",
  "rule": "usdc.blocklist",
  "gasWouldBurn": "21000"
}

Event sources

The contracts the feed reads.

Published so you can verify the feed against the chain yourself, or index the same addresses directly.

SourceAddressDecimals
Native USDC, EIP-7708 system emitter0xffffFFFfFFffffffffffffffFfFFFfffFFFfFFfE18
USDC ERC-20 interface0x36000000000000000000000000000000000000006
EURC0x89B50855Aa3bE2F677cD6303Cec089B5F319D72a6
Memo0x5294E9927c3306DcBaDb03fe70b92e01cCede505n/a
CCTP TokenMessengerV20x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAAn/a
CCTP MessageTransmitterV20xE737e5cEBEEBa77EFE34D4aa090756590b1CE275n/a

Reconcile a day of Arc USDC against your ledger.

Backfill the feed over any range and compare it with what you have. The gap report tells you whether anything is missing.