Transfer logs
for native value movements).
All comparisons are against Ethereum at the Osaka hard fork, Arc’s baseline.
Most differences are transparent to application code, but a few change execution
semantics in ways that matter when you port a contract. If you are porting an
existing contract, start with the
Porting contracts to Arc checklist.
Tools that locally simulate the EVM (such as Foundry’s
anvil) run a standard
EVM, not Arc’s, and can’t reproduce Arc-specific behavior. Use Arc
Foundry’s arc-anvil --network arc
instead. See Build and deploy with Arc
Foundry.Integration guidance
The following guides translate Arc’s protocol-level differences into practical guidance for specific integration types:Wallets
Balance display, transaction history, and USDC fee handling.
Exchanges and CEXs
Deposit detection, withdrawal processing, and CCTP-based liquidity
management.
On/off-ramp platforms
Single-asset USDC configuration, deposit detection, and instant settlement
for fiat ramp providers.
DeFi and protocol operators
USDC pool implementation, decimal handling in pool math, and contract
porting.
Indexers and block explorers
Indexing EIP-7708 Transfer events and avoiding double-counting from two
emitter addresses.
Relayers and paymasters
USDC-denominated gas infrastructure and decimal precision in fee
calculation.
USDC as the native gas token
Arc’s native token is USDC, not ETH. USDC on Arc has two interfaces that share one balance: a native interface (18 decimals) and an ERC-20 interface (6 decimals), so no WETH-style wrapper is needed. To display a native value as USDC, divide by 10¹². Don’t use the 6-decimal value when crediting or recording balances; truncation at the 6-decimal boundary records less than was transferred. A zerobalanceOf doesn’t mean the native balance is zero. The
ERC-20 view truncates sub-USDC fractional amounts, and the USDC remains onchain.
For the full model, including the two-interface table, truncation behavior,
EURC, and USYC support, see
Stablecoin native model. For how
balance changes surface as events, see
USDC system events.
Execution and opcode differences
EIP-7702 set-code transactions,
CREATE2 (including EIP-7610 residual-storage behavior), and EIP-2935
historical block hashes all behave as on Ethereum. In particular, the EIP-2935
block-hash-history contract is deployed and functional, unlike the EIP-4788
beacon-roots contract noted in the table.
To check an existing contract before deploying it to Arc, see
Porting contracts to Arc.
Value transfer rules
Because the native token is USDC, value transfers are subject to rules that don’t exist on a standard EVM chain. A native transfer can revert even when the sender has sufficient balance.- Transfers to the zero address are forbidden. A value-bearing transfer to
0x0reverts with"Zero address not allowed"; a zero-value transfer to0x0succeeds. (Mint and burn, the only operations that involve0x0, go through the native-coin precompile.) - Burning is forbidden. Self-destructing to yourself with a balance, or transferring value to an account that has already self-destructed, reverts.
- The blocklist is enforced at runtime. A value transfer to or from a blocklisted address reverts. An included transaction that reverts on a blocklist check still consumes gas.
- Sending native value to a contract isn’t guaranteed to succeed. A call to a contract that forwards native value can revert for any of the reasons listed here, which breaks a common DeFi assumption.
- Sending to an address with no code (
EXTCODESIZE == 0) succeeds and emits aTransferlog. Sending value to a precompile address reverts.
SELFDESTRUCT
SELFDESTRUCT is allowed on Arc, including during contract deployment, and
follows EIP-6780 (the account is
fully deleted only if it was created in the same transaction). A self-destruct
reverts when its value transfer would violate a native value rule:
Three behaviors differ from every other EVM chain and deserve attention:
1. Self-destructing a contract that holds USDC moves that USDC out. On Arc a
contract’s USDC is its native balance, held in the account, so
SELFDESTRUCT
transfers it to the beneficiary. On other chains the contract’s ERC-20 USDC
balance lives in the token contract and is unaffected by self-destruct.
2. A non-zero-value call to a self-destructed account reverts. On Ethereum,
sending value to an address that self-destructed earlier in the same transaction
succeeds. On Arc it is treated as a transfer to a destructed account, a
forbidden burn, and reverts.
Transfer log.
Unlike Ethereum, the moved native value is recorded as an
EIP-7708 Transfer log from the
system emitter (18 decimals). Index it like any other native movement; see
USDC system events.
To check an existing contract’s SELFDESTRUCT usage before deploying to Arc,
see Porting contracts to Arc.
Native USDC Transfer events (EIP-7708)
On a standard EVM chain, a plain native send emits no log. Arc’s EIP-7708 implementation emits a standard ERC-20Transfer log from a system address for native sends, contract
endowments, self-destruct transfers, and precompile-backed operations. Gas
deductions don’t emit a log; derive gas cost from the transaction receipt. For
emitter addresses, the log format, and indexing guidance, see
USDC system events.
Fee market and block behavior
Arc’s fee market and block behavior differ from Ethereum in ways that affect cost estimation, event ordering, and confirmation logic:- The base fee is paid to the block beneficiary, not burned. See Stable fee design.
- The next block’s base fee is in the parent header’s
extra_data. See Gas and fees. - The minimum base fee is 20 Gwei. Transactions with
maxFeePerGaslower than 20 Gwei are silently dropped by the mempool. They produce no error receipt and never appear in a block. SetmaxFeePerGasto at least 20 Gwei before submitting any transaction to Arc. - Block timestamps are non-decreasing, not strictly increasing. Timestamps
come from the proposer’s wall clock at one-second granularity, so sub-second
blocks may share a timestamp. Use the block number for ordering, and don’t
assume
block.timestampstrictly increases between blocks. - Finality is deterministic and instant. Transactions finalize on inclusion; offchain systems can act after a single confirmation. See Deterministic finality.