Módulos
Redes (Networks)
Perfis de rede mainnet/testnet e registry de endereços de contrato.
O módulo arc_devkit.networks centraliza a configuração de rede — chain ID, RPC (HTTP + WebSocket), block explorer e endereços de contrato — para que trocar entre mainnet e testnet seja só configuração, nunca uma mudança de código. As duas redes já vêm totalmente configuradas com valores oficiais, com fonte verificada contra docs.arc.io em 18/09/2026.
Importação
from arc_devkit.networks import NETWORKS, get_network
Perfis disponíveis
profile = get_network("mainnet")
print(profile.chain_id) # 5042
print(profile.rpc_url) # https://rpc.mainnet.arc.io
print(profile.explorer_url) # https://explorer.arc.io
print(profile.contracts.usdc) # 0x3600000000000000000000000000000000000000
| Rede | Chain ID | RPC padrão | Explorer |
|---|---|---|---|
mainnet (padrão) | 5042 | https://rpc.mainnet.arc.io | https://explorer.arc.io |
testnet | 5042002 | https://rpc.testnet.arc.io | https://explorer.testnet.arc.io |
✦Interface dupla do USDC
O USDC na Arc é tanto o token de gas nativo (18 decimais, lido como ETH via eth_getBalance) quanto um ERC-20 (6 decimais) em um endereço fixo, compartilhado entre as redes (profile.contracts.usdc, 0x3600...0000). As duas visões compartilham o mesmo saldo — veja o módulo USDC para como ler cada uma corretamente.
Todos os campos de ContractAddresses estão preenchidos nas duas redes: usdc, eurc, cctp_token_messenger, cctp_message_transmitter, cctp_token_minter, cctp_message, cctp_domain (26 na Arc), gateway_wallet, gateway_minter, multicall3, permit2.
Selecionando a rede ativa
A variável ARC_NETWORK (mainnet por padrão) seleciona os defaults de RPC/chain ID/contratos:
# .env
ARC_NETWORK=testnet # troque para testnet durante o desenvolvimento
ARC_RPC_URL/ARC_CHAIN_ID, se definidos explicitamente, sempre têm prioridade sobre o perfil — útil para apontar para seu próprio provedor (Alchemy, QuickNode, self-hosted) em vez do RPC padrão da Circle.
from arc_devkit.config import settings
print(settings.arc_network) # "mainnet"
print(settings.network.name) # "mainnet" — NetworkProfile resolvido
⚠config.py nunca adivinha um chain ID
Se um perfil de rede não tem chain ID e ARC_CHAIN_ID não foi definido explicitamente, config.py levanta um erro claro na inicialização em vez de cair silenciosamente no chain ID de outra rede — uma classe de bug que existia antes do suporte à Arc Mainnet e que poderia ter levado a uma transação assinada para a chain errada sem nenhum aviso.
A fachada Arc
from arc_devkit import Arc
arc = Arc.mainnet() # ou Arc.testnet()
arc = Arc.mainnet(rpc_url="https://seu-provedor.example.com") # RPC customizado
print(arc.network.chain_id, arc.network.rpc_url)
print(arc.latest_block()["number"])
print(arc.health_check())
Arc é uma camada de conveniência aditiva sobre os mesmos módulos documentados neste site — todo import por módulo já existente (from arc_devkit.debugger import TxAnalyzer, etc.) continua funcionando sem alteração.
Verificando a saúde da rede
arcdevkit network list
arcdevkit network show mainnet
arcdevkit network check-mainnet
arcdevkit doctor
doctor (também Arc.health_check()) é uma checagem somente leitura — nunca assina ou envia nada — que verifica alcançabilidade do RPC, correspondência do chain ID, bloco mais recente, latência, e se o contrato USDC realmente tem código deployado on-chain (eth_getCode, não apenas "um endereço está configurado").
Referência da API
get_network(name: str) -> NetworkProfile
| Parâmetro | Tipo | Descrição |
|---|---|---|
name | str | "mainnet" ou "testnet" |
Levanta ValueError para nomes desconhecidos.
NetworkProfile
| Campo | Tipo | Descrição |
|---|---|---|
name | str | Nome da rede |
chain_id | int | None | Chain ID |
rpc_url | str | None | URL de RPC padrão |
ws_rpc_url | str | None | URL de RPC WebSocket padrão (o primário de mainnet é HTTP-only) |
explorer_url | str | None | URL do block explorer |
native_currency_symbol | str | "USDC" |
native_currency_decimals | int | 18 |
contracts | ContractAddresses | Endereços de USDC, EURC, USYC, CCTP V2, Gateway, Multicall3, Permit2 |