ARC MAINNETCHAIN 5042BLOCK …FINALITY <1sRPC rpc.mainnet.arc.io ROADMAPSOURCEAGENT SKILL
LUNUA
—
Samples

The safety layer for USDC payments on Arc.

Today: pre-deploy detection, failed-payment forensics and a deploy gate for CI and AI agents, live on mainnet. Next: chain-wide attestation and a wallet guard that checks a payment before it is signed. Roadmap →

One balance. Two interfaces.

Arc's native gas asset is USDC. The same account balance is exposed as native value at 18 decimals and through the ERC-20 predeploy at 0x3600…0000 at 6 decimals. Contracts written against Ethereum semantics assume two assets. On Arc that assumption produces silent reverts, double-counted balances and broken invariants.

Lunua detects these defects from deployed or undeployed bytecode using live eth_call simulation with state overrides, and reconstructs failed transactions at their original block.

NATIVE decimals 18 msg.value · BALANCE wallet send ERC-20 0x3600… decimals 6 transfer · approve balanceOf (truncates) ACCOUNT BALANCE single state slot · ×10¹² ported code: opens one door · counts both

Detectors

severity is assigned only from demonstrated impact · signals never block
IDDetectorMethodEvidence class
LUN-01Native receive rejected on a USDC-handling contractSimulation · 1e18 wei, empty calldata · counterfactualDemonstrated
LUN-02Native and ERC-20 views read together (double count)Bytecode · BALANCE/SELFBALANCE ∧ 0x3600…Signal
LUN-03Sub-micro dust invisible to balanceOfSimulation · 5e11 wei send + balanceOf probe + controlDemonstrated
LUN-04SELFDESTRUCT transfers full USDC balanceBytecode · opcode 0xffSignal
LUN-05Randomness from PREVRANDAO (constant 0 on Arc)Bytecode · 0x44 + live PREVRANDAO probeSignal
LUN-TXFailed-transaction root cause and correct-rail rebuildReplay @ N−1 · counterfactual simulationForensic

Observed on mainnet

public incidents, Sep–Oct 2026
ProjectDefectEffectRef
Breadchain / KambioXLUN-01 · escrow without receive()4 USDC wallet send reverted; issue open#48
DefiLlamaLUN-02 · native + ERC-20 summedArc TVL ≈ $10.5M reported vs ≈ $6.3M#21274 #21279
Circle arc-node docs6-dp amount passed as native valueSent 1e-12 USDC instead of 1#453
Layerswap · PinaxDecimals / dual Transfer logsIntegration patches#2175 #130

Deploy gate

CLI · CI · AI agents

The engine is a single dependency-free ES module. The CLI exits non-zero on any demonstrated blocking finding and writes Foundry reproductions with --repro, so it gates CI merges and AI-agent deploys. The Lunua agent skill makes a passing run a hard precondition before any Arc deploy.

$ lunua check --code build/PortedVault.json
BLOCK  LUN-01 [Medium] wallet deposits revert
SIGNAL LUN-02 [Unconfirmed] two views  pc 0x018b
SIGNAL LUN-05 [Unconfirmed] PREVRANDAO pc 0x01b2
1 demonstrated blocking · exit 1

$ lunua check 0x… --repro test/   # writes LUN01.t.sol …
$ arc-forge test --network arc
6 tests passed, 0 failed

Attestation

PreflightRegistry

Results are written on-chain as fail/warn bitmasks keyed by attester and target, pinned to extcodehash. An attestation is invalidated automatically if the code at the address changes. Wallets can call status(attester, target) before a send.

Registry
0x966Bf58DB6F257C63Edb11bF006B5eB3160721DE
PortedVault
0xA8Bd8C8F580d5f00cEF41bfA524555de17E3B38F · fail 33 · warn 4
ArcVault
0x8f7349Dc451DFbC6B3773b49e33fa836b89C71f3 · pass