Início

Configuração

Como o sistema de configuração do Arc DevKit funciona.

Como funciona

O módulo arc_devkit/config.py é o ponto central de configuração. Ele:

  1. Carrega o arquivo .env via python-dotenv na importação
  2. Valida que ANTHROPIC_API_KEY (quando COPILOT_PROVIDER=anthropic, o padrão) e ARC_RPC_URL sejam resolvíveis
  3. Expõe um singleton settings importável por todos os módulos
from arc_devkit.config import settings

print(settings.arc_network)       # mainnet (padrão do SDK)
print(settings.arc_rpc_url)       # https://rpc.mainnet.arc.io
print(settings.arc_chain_id)      # 5042
print(settings.anthropic_model)   # claude-sonnet-4-6

⚠Erro na importação

Se ANTHROPIC_API_KEY (para o provedor ativo) ou ARC_RPC_URL não puderem ser resolvidos, config.py lança EnvironmentError imediatamente ao ser importado. Em testes, defina as variáveis antes de importar qualquer módulo do arc_devkit.

Settings dataclass

AtributoEnv varTipoPadrão
anthropic_api_keyANTHROPIC_API_KEYstr— (obrigatória se copilot_provider="anthropic")
copilot_providerCOPILOT_PROVIDERstr"anthropic"
gemini_api_key / gemini_modelGEMINI_API_KEY / GEMINI_MODELstr | NoneNone
openai_api_key / openai_modelOPENAI_API_KEY / OPENAI_MODELstr | NoneNone
ollama_base_url / ollama_modelOLLAMA_BASE_URL / OLLAMA_MODELstr / str | None"http://localhost:11434" / None
arc_rpc_urlARC_RPC_URLstrdefault da rede (mainnet/testnet)
arc_private_keyARC_PRIVATE_KEYstr | NoneNone
anthropic_modelANTHROPIC_MODELstrclaude-sonnet-4-6
arc_chain_idARC_CHAIN_IDintdefault da rede (5042 mainnet / 5042002 testnet)
log_levelLOG_LEVELstrINFO
api_keyAPI_KEYstr | NoneNone
arc_networkARC_NETWORKstr"mainnet"
cctp_attestation_api_urlCCTP_ATTESTATION_API_URLstr | NoneNone
arc_llms_txt_urlARC_LLMS_TXT_URLstr | NoneNone

✦ARC_NETWORK não quebra .env existentes

ARC_NETWORK seleciona os defaults de RPC/chain ID/contratos de arc_devkit/networks.py — tanto mainnet quanto testnet já vêm totalmente configurados com valores oficiais (veja Redes). ARC_RPC_URL/ARC_CHAIN_ID, se definidos, sempre têm prioridade. O config.py nunca cai silenciosamente no chain ID de outra rede — se não conseguir resolver, lança um erro claro.

Configurando em testes

O conftest.py define as variáveis antes de qualquer importação do pacote — os testes fixam ARC_NETWORK=testnet explicitamente para determinismo, independente do default de mainnet do próprio SDK:

# tests/conftest.py
import os

os.environ.setdefault("ANTHROPIC_API_KEY", "test-key")
os.environ.setdefault("ARC_NETWORK", "testnet")
os.environ.setdefault("ARC_RPC_URL", "https://rpc.testnet.arc.io")

Testes de integração (que fazem chamadas reais) são marcados com @pytest.mark.integration e ignorados por padrão:

# Rodar apenas unit tests (padrão)
pytest

# Rodar testes de integração (requer chaves reais)
pytest -m integration

Conexão web3

core/connection.py cria uma instância web3 com o middleware necessário para o modelo de validadores permissionado da Arc (mainnet e testnet):

from arc_devkit.core.connection import get_web3

w3 = get_web3()
print(w3.eth.chain_id)  # 5042 (mainnet) ou 5042002 (testnet), conforme ARC_NETWORK

O ExtraDataToPOAMiddleware é injetado automaticamente — obrigatório para chains no estilo proof-of-authority como a Arc.

✦get_web3() não é cacheado

A função get_web3() cria uma nova instância a cada chamada. Isso evita problemas de estado em ambientes multi-thread, mas você pode cachear localmente se precisar de performance.