docs: Arc Relay Bridge — CCTP V2 infrastructure tools reference#202
Open
osr21 wants to merge 1 commit into
Open
docs: Arc Relay Bridge — CCTP V2 infrastructure tools reference#202osr21 wants to merge 1 commit into
osr21 wants to merge 1 commit into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a reference document for the Arc Relay Bridge — a cross-chain USDC relay bridge built on Circle's CCTP V2, deployable to Arc Testnet. The document covers six infrastructure tools, key CCTP V2 ABI findings from on-chain decoding, and Arc Testnet developer gotchas discovered during development.
Bridge repository: https://github.com/osr21/arc-relay-bridge
Tools documented
Tool A — USDC Transfer Indexer + REST API
Real-time background worker indexing all native USDC transfer events on Arc Testnet via the native USDC emitter (
0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE). Exposes a paginated REST API with filtering by address, type, and tx hash.Key finding: the native USDC emitter fires two logs per Transfer (native + ERC-20 mirror) — indexing both causes double-counting. Index only
isNativeLog = trueentries.Tool B — Transaction Memo Indexer
Indexes
Memoevents from Arc's on-chain memo contract with UTF-8 decoding of raw payloads.Tool C — The Graph Subgraph
AssemblyScript subgraph mapping for the same Arc events — decentralised alternative to the centralised indexer.
Tool D — Contract Compatibility Linter
CLI linter running 9 static bytecode checks for Arc Testnet compatibility:
evmVersion: paris0x60c0init) silently reverts — useconstantnonReentrantonvalidatePaymasterUserOp— violates ERC-7562depositForBurnselector — use V2 7-paramonlyEntryPointguard on paymaster functionseth_estimateGasreliance for complex callswallet_switchEthereumChainrace conditionTool E — CCTP Bridge Analytics (indexer + dashboard)
Indexes CCTP V2
DepositForBurnandMintAndWithdrawevents with attestation status tracking, plus a React 19 + Recharts analytics dashboard showing real-time bridge activity across all CCTP domains.CCTP V2 ABI facts confirmed from on-chain decoding (Arc-specific):
DepositForBurntopic:0x0c8c1cbdc5190613ebd485511d4e2812cfa45eecb79d845893331fedad5130a5burnTokenis the 1st indexed param on Arc (differs from Circle standard where nonce is 1st indexed)depositForBurnaddsuint32 minFinalityThresholdandbytes hookDataparamsDepositForBurn(address,uint256,address,bytes32,uint32,bytes32,bytes32,uint256,uint32,bytes)MintAndWithdraw(notMessageReceived) is the correct event for indexing mints on ArcminFinalityThreshold: Arc=2000 (finalized), Sepolia/Base Sepolia/Fuji=0 (fast testnet)Tool G — APS SDK
TypeScript typed stubs for the Arc Privacy Sector — ready for integration when APS goes live.
Arc Testnet developer gotchas
Several non-obvious behaviours discovered during development that may not yet be in the official docs:
eth_getLogsrpc.testnet.arc.networkreturns −32011; usearc-testnet.drpc.orgfor indexer log fetchingbatchMaxCount: 1on ethers.js provider0x6fd3504e) silently reverts; always use V2 7-param (0x8e0250ee)blockNumbernottimestampas ordering key — no reorgsevmVersion >= shanghai; compile withevmVersion: "paris"0x60c0init bytecode silently reverts on Arc; keep second variable asconstantnotimmutablehttps://testnet.arcscan.app— previous URLs (explorer.testnet.arc.network,explorer.arc.io) are deadFiles changed
docs/arc-relay-bridge-tools.md— full reference for all six tools, CCTP V2 ABI details, REST API schemas, contract addresses, and Arc Testnet gotchas