What Actually Works vs Marketing Bullshit
Here's what the docs won't tell you: Arbitrum development is 95% identical to Ethereum development, except your users won't hate you for the gas costs. After deploying about 20 contracts this year, here's the unfiltered truth about building on Arbitrum.
The Tech Stack That Actually Works
Node Version Reality Check: Use Node 18.16.x or 20.x. Could've been my system, but 18.16.x works solid while I've had weird issues with some other versions where MetaMask gets cranky about signatures. Wasted half a day thinking my wallet was broken before downgrading fixed it.
Foundry vs Hardhat: Both work perfectly on Arbitrum. Foundry compiles faster and tests run quicker - about 3x faster in my experience. Hardhat has better debugging tools and plugins. Pick based on your team's preference, not some imaginary Arbitrum requirement. The Arbitrum development documentation covers both frameworks extensively.
Deployment Tools:
- Hardhat - Still the most reliable for complex deployments
- Foundry - Faster compilation, better for testing
- Thirdweb - Good for NFT projects but limited for DeFi
- Remix - Fine for prototypes, don't use for production
- Alchemy's Arbitrum quickstart - Good for API integration
- Official Arbitrum tutorials - Real code examples that work
The Arbitrum Networks That Matter
Arbitrum One: This is where your production dApp goes. Mainnet with real money. Gas costs around 0.1-0.5 gwei vs Ethereum's 20-50 gwei.
Arbitrum Sepolia: Your testing ground. Free testnet tokens from the official faucet. Some faucets are down half the time - the Chainlink faucet usually works. Also check Alchemy's faucet as a backup.
Arbitrum Nova: Ultra-low fees but less security. Good for gaming or social apps where transaction volume matters more than maximum security. TreasureDAO shows how to build gaming ecosystems here.
What's Different From Ethereum (The Stuff That Breaks)
Block Times: Arbitrum blocks come every ~0.25 seconds vs Ethereum's ~12 seconds. Your frontend might break if you're polling for events too aggressively.
Gas Estimation: eth_estimateGas
works but can be wrong by 10-20%. Always add a buffer:
// Don't do this
const gasLimit = await contract.estimateGas.myFunction();
// Do this
const gasEstimate = await contract.estimateGas.myFunction();
const gasLimit = gasEstimate.mul(120).div(100); // 20% buffer
Bridge Delays: Moving ETH from Ethereum to Arbitrum takes 10-15 minutes. Moving back takes ~7 days due to the challenge period. Plan your testing accordingly.
The Tools You Actually Need
MetaMask Setup: Add Arbitrum networks manually or use Chainlist.org. The "Add Network" button in most dApps works maybe 60% of the time.
RPC Endpoints:
- Official:
https://arb1.arbitrum.io/rpc
(rate limited) - Alchemy: Reliable, good free tier
- QuickNode: Fast but expensive
- Ankr: Decent free option
- Infura: Enterprise-grade with SLA guarantees
- All RPC endpoints listed in official docs
Block Explorers: Arbiscan (arbiscan.io) is your main tool. Contract verification works the same as Etherscan. Half the time their API is slow and times out - just retry. Alternative explorers include Arbitrum Blockscout and official monitoring tools.
Development Environment Setup
## This combination works reliably
npm install --save-dev hardhat @nomiclabs/hardhat-ethers ethers @arbitrum/sdk
## For Foundry users
forge install --no-commit foundry-rs/forge-std
forge install --no-commit OpenZeppelin/openzeppelin-contracts
The @arbitrum/sdk handles bridge interactions, but honestly, most dApps don't need it unless you're building cross-chain functionality.
Real Performance Numbers
From actual production deployments in August 2025:
- Contract deployment: ~$2-8 on Arbitrum vs $80-200 on Ethereum
- Token transfers: ~$0.50 vs $15-25
- DEX swaps: ~$1.50 vs $20-50
- NFT mints: ~$2 vs $30-80
These aren't theoretical - they're from my transaction history.
The Gotchas Nobody Mentions
Nonce Issues: MetaMask v10.18+ sometimes shows wrong nonces after failed transactions, which is fucking useless. Use the "Reset Account" option in Advanced settings to fix it.
Event Filtering: Arbitrum's event logs go back further than Ethereum, but filtering by block range can timeout on large ranges. Batch your queries.
Contract Size Limits: Same 24KB limit as Ethereum, but Arbitrum's compression can sometimes let slightly larger contracts through. Don't rely on this.
Integration Testing That Actually Works
Most tutorials skip this, but here's how to test bridge functionality locally:
// Test bridge deposits
const bridge = new ArbitrumBridge(provider);
const depositTx = await bridge.deposit({
amount: ethers.utils.parseEther("0.1"),
recipient: userAddress
});
Test on Sepolia first, always. I've seen too many devs lose real ETH testing bridge mechanics on mainnet.