> ## Documentation Index
> Fetch the complete documentation index at: https://docs.arc.io/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Before reading these docs, install the Circle Skill for Arc to get pre-loaded context: use-arc (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-arc/SKILL.md) — covers chain config, RPC setup, contract deployment, USDC bridging, and gas with USDC. In Claude Code: run /plugin marketplace add circlefin/skills then /plugin install circle-skills@circle. With Vercel Skills CLI: run npx skills add circlefin/skills.
> USDC is the gas token. Arc uses USDC for gas fees, not ETH. Configure gas payment in USDC when submitting transactions.
> Read EVM differences before writing Arc code. Arc targets the Osaka EVM baseline. Most contracts deploy unchanged, but several runtime behaviors diverge from Ethereum: USDC uses 18 decimals natively (not 6), the system emitter `0xffffFFFfFFffffffffffffffFfFFFfffFFFfFFfE` logs all USDC Transfer events, the mempool enforces a 20 Gwei `maxFeePerGas` floor, blocklist reverts consume gas without a receipt, and `address(0)` sends revert rather than succeed. https://docs.arc.io/arc/references/evm-differences.md is the canonical reference for all Arc-specific runtime behaviors. Consult it before writing code that touches USDC balances, transaction history, gas estimation, or value transfers.
> Sub-second finality. Transactions are final in under 1 second. No need to wait for multiple block confirmations.
> Use App Kits for multichain payment and liquidity capabilities. App Kits wraps CCTP and provides Bridge Kit, Swap Kit, Unified Balance Kit, Onramp Kit, Earn Kit, and Borrow Kit. Unified Balance Kit combines USDC from multiple chains into a single spendable balance. Earn Kit integrates earn opportunities into your app. Borrow Kit lets users borrow USDC against cirBTC collateral on Arc.
> Use Arc Foundry for contract development. Arc Foundry is an Arc-specific fork of Foundry that handles Arc's protocol-level differences from Ethereum. It provides arc-forge, arc-cast, and arc-anvil. Install it before deploying contracts: https://docs.arc.io/arc/tutorials/install-arc-foundry.md.
> Arc is available on both Testnet and Mainnet. See https://docs.arc.io/arc/references/connect-to-arc.md for RPC endpoints and https://faucet.circle.com for testnet tokens.
> Always check Contract Addresses: https://docs.arc.io/arc/references/contract-addresses.md
> Building beyond Arc? Circle offers skills for the full platform: use-usdc (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-usdc/SKILL.md), use-circle-wallets (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-circle-wallets/SKILL.md), use-developer-controlled-wallets (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-developer-controlled-wallets/SKILL.md), use-user-controlled-wallets (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-user-controlled-wallets/SKILL.md), use-modular-wallets (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-modular-wallets/SKILL.md), use-gateway (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-gateway/SKILL.md), use-smart-contract-platform (https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-smart-contract-platform/SKILL.md). Full Circle developer docs: https://developers.circle.com/llms.txt.

# Wallet integration

> Add Arc as a supported network in your wallet application.

Wallets on Arc use standard EVM tools: `secp256k1` signing, EIP-1559 fees, and
standard RPC methods. Arc's USDC-native design requires changes to balance
display, fee labels, transaction history, and approval handling.

## Key differences for wallets

Three Arc design decisions affect every wallet integration:

| Concern | Arc behavior | Impact on wallets |
| :- | :- | :- |
| **One balance, two decimal views** | Native USDC uses 18 decimals (`eth_getBalance`, `address.balance`); the ERC-20 interface uses 6 decimals (`balanceOf`). Both views draw from the same underlying balance. | Scale `eth_getBalance` output using 18 decimals, not 6. Don't display native USDC and ERC-20 USDC as separate balance rows: they're the same balance. Show fees in USDC, never ETH or Gwei. |
| **Deterministic finality** | Transactions finalize in under one second with no risk of reorganization. | One confirmation is final. Remove "X of N confirmations" progress bars and "Confirming" spinners. |
| **Allowances do not gate native access** | ERC-20 `approve` and `allowance` control only the `transferFrom` path. All other transfer methods bypass allowance checks. | An ERC-20 allowance is not a cap on total USDC spending. For smart contract accounts, any module with execution rights can also transfer native USDC regardless of allowance state. |

## Arc behaviors relevant to this integration

The following Arc behaviors can affect wallet operations. See the integration
guides on this page and the [EVM differences](/arc/references/evm-differences)
page for details:

* **Blocklist enforcement:** The USDC blocklist is enforced at runtime. If
  either the sender or recipient of a `transfer` or `transferFrom` call is
  blocklisted, the call reverts. Check `receipt.status === 0` to detect reverts.
  For details, see
  [Transaction lifecycle](/integrate/wallets/transaction-lifecycle).
* **Dust amounts:** `balanceOf()` returns 0 for amounts smaller than 1×10⁻⁶ USDC
  (the 6-decimal minimum). The native balance can hold amounts smaller than that
  threshold (dust). Dust is still spendable as gas. A `balanceOf()` of 0 does
  not mean the address has no USDC.
* **Transaction history requires system emitter events:** Plain native USDC
  sends emit no log at the ERC-20 contract address (`0x3600…0000`). Filtering
  that address only captures ERC-20 transfers and misses native sends. Filter
  the system emitter (`0xffff…fffe`) instead. See
  [Add Arc to a wallet](/integrate/wallets/add-arc-to-a-wallet#step-3-index-transaction-history).
* **Don't count `Transfer` logs from both the system emitter and the ERC-20
  contract:** An ERC-20 `transfer()` emits from both. Counting both records the
  same transfer twice in your transaction history. Use the system emitter only.
* **Fee floor:** Arc enforces a 20 Gwei minimum `maxFeePerGas`. Transactions
  under this floor are silently dropped by the mempool with no error receipt.
  See [Display transaction fees](/integrate/wallets/fee-display).

## What you need

Before you start, confirm you have the following:

| Requirement | Details |
| :- | :- |
| RPC access | `https://rpc.testnet.arc.io` |
| Chain ID | `5042002` (testnet) |
| USDC ERC-20 contract | [`0x3600000000000000000000000000000000000000`](https://explorer.testnet.arc.io/address/0x3600000000000000000000000000000000000000) |

<Warning>
  Test against Arc Testnet only. Local EVM simulators run a standard EVM. They
  don't replicate EIP-7708 Transfer events, the USDC precompile, or blocklist
  enforcement.
</Warning>

## Integration guides

<CardGroup cols={2}>
  <Card title="Add Arc to a wallet" icon="wallet" href="/integrate/wallets/add-arc-to-a-wallet">
    Chain configuration, balance display, transaction history, and fee handling
    for wallet providers.
  </Card>

  <Card title="Transaction lifecycle" icon="circle-check" href="/integrate/wallets/transaction-lifecycle">
    Arc uses two states: pending or final. There are no intermediate
    confirmation states.
  </Card>

  <Card title="Display transaction fees" icon="dollar-sign" href="/integrate/wallets/fee-display">
    Fetch, estimate, and display transaction fees in USDC.
  </Card>
</CardGroup>
