Summary
Every transaction on Arc Testnet shows "Network fee ⚠ Unavailable" in MetaMask (and likely other EIP-1193 wallets). The "Review alert" warning is surfaced, which adds friction and discourages users from completing the transaction.

The root cause: Arc Testnet uses USDC as the native gas token, not ETH. MetaMask's fee estimation calls eth_gasPrice / eth_maxPriorityFeePerGas and can compute a wei value, but it cannot display a human-readable USD/token amount because it doesn't know the exchange rate or symbol for USDC-as-gas. This causes the fee display to fall back to "Unavailable".
Reproduction
- Add Arc Testnet to MetaMask (Chain ID 5042002, native currency USDC)
- Open any DApp that calls
eth_sendTransaction or wallet_sendCalls on Arc
- Observe: MetaMask fee row shows "⚠ Unavailable" with no USDC amount and a "Review alert" badge
Root Cause
MetaMask assumes the native gas token is ETH (or a token with a known CoinGecko price feed). When the native currency is USDC:
eth_gasPrice returns a valid wei value
- MetaMask cannot map that to a USD display amount or even a USDC amount without explicit metadata
- The "Unavailable" fallback is triggered
This is compounded when DApps omit the gas field from transaction objects — MetaMask then attempts eth_estimateGas internally and may fail or return an unreliable value, making the situation worse.
Workaround (DApp-side fix)
Explicitly include a gas limit in every transaction object. MetaMask can then compute fee = gas × gasPrice and display the raw USDC gas cost even without price-feed lookup:
// viem writeContract — add gas explicitly for all Arc Testnet calls
await walletClient.writeContract({
address: CONTRACT_ADDRESSES.CONDITIONAL_ESCROW,
abi: CONDITIONAL_ESCROW_ABI,
functionName: "createEscrow",
args: [...],
chain: ARC_TESTNET,
gas: 350_000n, // ← explicit gas limit clears the "Unavailable" warning
});
Recommended gas limits per operation type:
| Operation |
Recommended gas |
ERC-20 approve |
80_000 |
Escrow createEscrow / Vesting createSchedule |
350_000 |
Escrow release / Vesting claim |
120_000 |
CCTP initiateConditionalTransfer |
400_000 |
We applied this fix in osr21/arc-stablecoin-dapp across all contract-calling pages and the "Unavailable" warning no longer appears.
Suggested Platform Fix
The cleanest long-term solution is for the Arc node / wallet provider metadata to include USDC's price feed in the chain's EIP-3085 wallet_addEthereumChain response, so that wallets can price the gas token correctly:
{
"chainId": "0x4CE052",
"chainName": "Arc Testnet",
"nativeCurrency": { "name": "USDC", "symbol": "USDC", "decimals": 6 },
"rpcUrls": ["https://rpc.testnet.arc.network"],
"blockExplorerUrls": ["https://testnet.arcscan.app"],
"iconUrls": [...],
"nativeCurrencyPriceFeedId": "usd-coin" // ← non-standard but some wallets support this
}
Alternatively, Circle could publish an official wallet_addEthereumChain snippet that includes any wallet-specific metadata needed for proper USDC fee display.
References
Summary
Every transaction on Arc Testnet shows "Network fee ⚠ Unavailable" in MetaMask (and likely other EIP-1193 wallets). The "Review alert" warning is surfaced, which adds friction and discourages users from completing the transaction.
The root cause: Arc Testnet uses USDC as the native gas token, not ETH. MetaMask's fee estimation calls
eth_gasPrice/eth_maxPriorityFeePerGasand can compute a wei value, but it cannot display a human-readable USD/token amount because it doesn't know the exchange rate or symbol for USDC-as-gas. This causes the fee display to fall back to "Unavailable".Reproduction
eth_sendTransactionorwallet_sendCallson ArcRoot Cause
MetaMask assumes the native gas token is ETH (or a token with a known CoinGecko price feed). When the native currency is USDC:
eth_gasPricereturns a valid wei valueThis is compounded when DApps omit the
gasfield from transaction objects — MetaMask then attemptseth_estimateGasinternally and may fail or return an unreliable value, making the situation worse.Workaround (DApp-side fix)
Explicitly include a
gaslimit in every transaction object. MetaMask can then computefee = gas × gasPriceand display the raw USDC gas cost even without price-feed lookup:Recommended gas limits per operation type:
gasapprove80_000createEscrow/ VestingcreateSchedule350_000release/ Vestingclaim120_000initiateConditionalTransfer400_000We applied this fix in osr21/arc-stablecoin-dapp across all contract-calling pages and the "Unavailable" warning no longer appears.
Suggested Platform Fix
The cleanest long-term solution is for the Arc node / wallet provider metadata to include USDC's price feed in the chain's EIP-3085
wallet_addEthereumChainresponse, so that wallets can price the gas token correctly:{ "chainId": "0x4CE052", "chainName": "Arc Testnet", "nativeCurrency": { "name": "USDC", "symbol": "USDC", "decimals": 6 }, "rpcUrls": ["https://rpc.testnet.arc.network"], "blockExplorerUrls": ["https://testnet.arcscan.app"], "iconUrls": [...], "nativeCurrencyPriceFeedId": "usd-coin" // ← non-standard but some wallets support this }Alternatively, Circle could publish an official
wallet_addEthereumChainsnippet that includes any wallet-specific metadata needed for proper USDC fee display.References
0x3600000000000000000000000000000000000000) as native gas token