Summary
When building a CCTP V2 bridge dapp against Arc Testnet, eth_estimateGas consistently fails or returns incorrect values for all USDC write transactions. The same transactions succeed fine when an explicit gasLimit override is provided.
Affected Calls
All EVM write transactions on Arc Testnet, including:
- ERC-20
approve
- ERC-20
transfer
- CCTP V2
depositForBurn on TokenMessenger (0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA)
- CCTP V2
receiveMessage on MessageTransmitter (0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275)
Observed Errors
Sending transactions without a manual gas limit via ethers.js v6 BrowserProvider (MetaMask) throws one of:
Error: missing revert data
Error: could not estimate gas; transaction may fail or may require manual gas limit
Error: execution reverted (no reason string)
The same calls succeed immediately when submitted with:
Environment
- Arc Testnet (Chain ID 5042002)
- RPC:
https://rpc.drpc.testnet.arc.network
- ethers.js v6 via MetaMask BrowserProvider
- USDC native gas token (this may be the root cause —
eth_estimateGas may not correctly simulate gas cost when the gas token is an ERC-20 rather than a native coin)
Root Cause Hypothesis
Arc's USDC-as-gas model means gas cost is paid in an ERC-20 token. Standard eth_estimateGas may not correctly account for the ERC-20 balance check when simulating transactions, causing it to incorrectly predict that transactions will revert. The transaction itself succeeds on-chain when submitted with a fixed gas limit.
Workaround
Always provide an explicit gasLimit for all Arc write transactions:
const tx = await contract.someMethod(args, { gasLimit: 600_000n });
600,000 is more than sufficient for CCTP operations; typical actual gas used is 50,000–150,000.
Impact
This breaks all standard EVM tooling that relies on gas estimation (Hardhat, ethers.js without overrides, wagmi, etc.) unless the developer knows to add explicit gas limits. It should be documented prominently in the Arc developer docs and ideally fixed at the RPC/node level.
Summary
When building a CCTP V2 bridge dapp against Arc Testnet,
eth_estimateGasconsistently fails or returns incorrect values for all USDC write transactions. The same transactions succeed fine when an explicitgasLimitoverride is provided.Affected Calls
All EVM write transactions on Arc Testnet, including:
approvetransferdepositForBurnon TokenMessenger (0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA)receiveMessageon MessageTransmitter (0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275)Observed Errors
Sending transactions without a manual gas limit via ethers.js v6
BrowserProvider(MetaMask) throws one of:The same calls succeed immediately when submitted with:
Environment
https://rpc.drpc.testnet.arc.networketh_estimateGasmay not correctly simulate gas cost when the gas token is an ERC-20 rather than a native coin)Root Cause Hypothesis
Arc's USDC-as-gas model means gas cost is paid in an ERC-20 token. Standard
eth_estimateGasmay not correctly account for the ERC-20 balance check when simulating transactions, causing it to incorrectly predict that transactions will revert. The transaction itself succeeds on-chain when submitted with a fixed gas limit.Workaround
Always provide an explicit
gasLimitfor all Arc write transactions:600,000 is more than sufficient for CCTP operations; typical actual gas used is 50,000–150,000.
Impact
This breaks all standard EVM tooling that relies on gas estimation (Hardhat, ethers.js without overrides, wagmi, etc.) unless the developer knows to add explicit gas limits. It should be documented prominently in the Arc developer docs and ideally fixed at the RPC/node level.