Skip to content

docs: add Arc contract deployment notes#151

Open
westkite1201 wants to merge 1 commit into
circlefin:mainfrom
westkite1201:docs/arc-contract-deployment-notes
Open

docs: add Arc contract deployment notes#151
westkite1201 wants to merge 1 commit into
circlefin:mainfrom
westkite1201:docs/arc-contract-deployment-notes

Conversation

@westkite1201

Copy link
Copy Markdown

Summary

  • Add a contract deployment guide for Arc Testnet
  • Document Arc Testnet chain metadata, RPC, Arcscan explorer URL, and USDC native gas metadata
  • Document evmVersion: "paris" for Solidity/Foundry deployments to avoid newer-opcode compatibility issues
  • Add a Hardhat @nomicfoundation/hardhat-verify customChains example for Arcscan/Blockscout verification

Related issues

Validation

  • npx prettier --check README.md docs/deploying-contracts.md
  • git diff --check

@osr21

osr21 commented Jun 16, 2026

Copy link
Copy Markdown

Here's what we found deploying and verifying three contracts on Arc Testnet with Foundry — happy to have any of this incorporated.


Foundry config (foundry.toml)

[profile.default]
solc          = "0.8.20"
evm_version   = "paris"   # REQUIRED — Arc does not support post-Paris opcodes (PUSH0 etc.)
optimizer     = true
optimizer_runs = 200
via_ir        = true       # needed if any contract hits the stack-depth limit

[rpc_endpoints]
arc_testnet = "https://rpc.testnet.arc.network"

evm_version = "paris" is mandatory. The default (shanghai/cancun) emits PUSH0 opcodes that Arc does not support. The deploy tx will succeed but the bytecode will be invalid.


Deploy

forge script script/Deploy.s.sol:Deploy \
  --rpc-url https://rpc.testnet.arc.network \
  --private-key "$DEPLOYER_PRIVATE_KEY" \
  --broadcast --config-path foundry.toml

Deployer wallet needs Arc Testnet USDC (also the native gas token). Get it at https://faucet.circle.com.


Arcscan source verification (Blockscout)

forge verify-contract \
  --verifier blockscout \
  --verifier-url "https://testnet.arcscan.app/api/" \
  --compiler-version 0.8.20 --chain 5042002 \
  <ADDRESS> src/<Contract>.sol:<Contract>

For contracts with constructor args:

  --constructor-args $(cast abi-encode "constructor(address,address)" <ARG1> <ARG2>)

Arcscan display tip

Add address public owner = msg.sender; to your contract. Blockscout reads this and shows it prominently in the contract overview — useful for anyone auditing on-chain.


Arc Testnet quick-reference

Item Value
Chain ID 5042002 (0x4cef52)
RPC https://rpc.testnet.arc.network
Explorer https://testnet.arcscan.app
USDC (native gas) 0x3600000000000000000000000000000000000000
EURC 0x89B50855Aa3bE2F677cD6303Cec089B5F319D72a
CCTP Domain 26
TokenMessengerV2 0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA
MessageTransmitterV2 0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275

Reference implementation with full deploy + verify setup: osr21/arc-stablecoin-dapp.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants