arc-devkit 0.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. arc_devkit-0.2.0/PKG-INFO +238 -0
  2. arc_devkit-0.2.0/README.md +203 -0
  3. arc_devkit-0.2.0/arc_devkit/__init__.py +3 -0
  4. arc_devkit-0.2.0/arc_devkit/agents/__init__.py +7 -0
  5. arc_devkit-0.2.0/arc_devkit/agents/base_agent.py +87 -0
  6. arc_devkit-0.2.0/arc_devkit/agents/monitor_agent.py +104 -0
  7. arc_devkit-0.2.0/arc_devkit/agents/payment_agent.py +97 -0
  8. arc_devkit-0.2.0/arc_devkit/api/__init__.py +1 -0
  9. arc_devkit-0.2.0/arc_devkit/api/main.py +42 -0
  10. arc_devkit-0.2.0/arc_devkit/api/routes/__init__.py +1 -0
  11. arc_devkit-0.2.0/arc_devkit/api/routes/agents.py +126 -0
  12. arc_devkit-0.2.0/arc_devkit/api/routes/copilot.py +37 -0
  13. arc_devkit-0.2.0/arc_devkit/api/routes/debugger.py +55 -0
  14. arc_devkit-0.2.0/arc_devkit/cli/__init__.py +1 -0
  15. arc_devkit-0.2.0/arc_devkit/cli/commands/__init__.py +1 -0
  16. arc_devkit-0.2.0/arc_devkit/cli/commands/agent.py +176 -0
  17. arc_devkit-0.2.0/arc_devkit/cli/commands/copilot.py +40 -0
  18. arc_devkit-0.2.0/arc_devkit/cli/commands/debug.py +110 -0
  19. arc_devkit-0.2.0/arc_devkit/cli/main.py +69 -0
  20. arc_devkit-0.2.0/arc_devkit/config.py +73 -0
  21. arc_devkit-0.2.0/arc_devkit/copilot/__init__.py +5 -0
  22. arc_devkit-0.2.0/arc_devkit/copilot/agent.py +74 -0
  23. arc_devkit-0.2.0/arc_devkit/core/__init__.py +1 -0
  24. arc_devkit-0.2.0/arc_devkit/core/connection.py +50 -0
  25. arc_devkit-0.2.0/arc_devkit/core/gas.py +62 -0
  26. arc_devkit-0.2.0/arc_devkit/core/wallet.py +72 -0
  27. arc_devkit-0.2.0/arc_devkit/debugger/__init__.py +5 -0
  28. arc_devkit-0.2.0/arc_devkit/debugger/tx_analyzer.py +107 -0
  29. arc_devkit-0.2.0/arc_devkit.egg-info/PKG-INFO +238 -0
  30. arc_devkit-0.2.0/arc_devkit.egg-info/SOURCES.txt +38 -0
  31. arc_devkit-0.2.0/arc_devkit.egg-info/dependency_links.txt +1 -0
  32. arc_devkit-0.2.0/arc_devkit.egg-info/entry_points.txt +2 -0
  33. arc_devkit-0.2.0/arc_devkit.egg-info/requires.txt +14 -0
  34. arc_devkit-0.2.0/arc_devkit.egg-info/top_level.txt +1 -0
  35. arc_devkit-0.2.0/pyproject.toml +94 -0
  36. arc_devkit-0.2.0/setup.cfg +4 -0
  37. arc_devkit-0.2.0/tests/test_agents.py +145 -0
  38. arc_devkit-0.2.0/tests/test_api.py +122 -0
  39. arc_devkit-0.2.0/tests/test_connection.py +58 -0
  40. arc_devkit-0.2.0/tests/test_copilot.py +74 -0
@@ -0,0 +1,238 @@
1
+ Metadata-Version: 2.4
2
+ Name: arc-devkit
3
+ Version: 0.2.0
4
+ Summary: Plataforma open source de ferramentas para desenvolvedores da Arc blockchain (Circle)
5
+ Author-email: Jeiel Santos <jeielsantos.ti@gmail.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/Jeielsantosdev/arc-devkit
8
+ Project-URL: Repository, https://github.com/Jeielsantosdev/arc-devkit
9
+ Project-URL: Bug Tracker, https://github.com/Jeielsantosdev/arc-devkit/issues
10
+ Keywords: arc,blockchain,circle,usdc,web3,ai,anthropic
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Topic :: Software Development :: Libraries
19
+ Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
20
+ Requires-Python: >=3.11
21
+ Description-Content-Type: text/markdown
22
+ Requires-Dist: typer[all]>=0.12
23
+ Requires-Dist: rich>=13.7
24
+ Requires-Dist: fastapi>=0.115
25
+ Requires-Dist: uvicorn[standard]>=0.30
26
+ Requires-Dist: web3>=7.0
27
+ Requires-Dist: anthropic>=0.40
28
+ Requires-Dist: python-dotenv>=1.0
29
+ Requires-Dist: httpx>=0.27
30
+ Provides-Extra: dev
31
+ Requires-Dist: pytest>=8.0; extra == "dev"
32
+ Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
33
+ Requires-Dist: ruff>=0.6; extra == "dev"
34
+ Requires-Dist: httpx>=0.27; extra == "dev"
35
+
36
+ # Arc DevKit
37
+
38
+ [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
39
+ [![Licença MIT](https://img.shields.io/badge/licença-MIT-green.svg)](LICENSE)
40
+ [![Testnet](https://img.shields.io/badge/arc-testnet-orange.svg)](https://arc.io)
41
+ [![Status](https://img.shields.io/badge/status-em%20desenvolvimento-yellow.svg)]()
42
+
43
+ Uma plataforma open source de ferramentas para desenvolvedores que constroem na **Arc blockchain** — a Layer 1 da Circle com USDC como token de gás e finalidade em menos de 1 segundo.
44
+
45
+ ---
46
+
47
+ ## O que é a Arc?
48
+
49
+ A **Arc** é uma blockchain Layer 1 desenvolvida pela Circle (criadores do USDC), com foco em pagamentos programáveis e agentes econômicos autônomos. Características principais:
50
+
51
+ - **EVM-compatível** — contratos Solidity funcionam sem modificação
52
+ - **USDC como gás** — sem necessidade de ETH ou token nativo separado
53
+ - **Consenso Malachite** — finalidade em menos de 1 segundo
54
+ - **Circle Agent Stack** — infraestrutura nativa para agentes de IA econômicos
55
+ - **Testnet ativa** desde outubro de 2025; mainnet prevista para o verão de 2026
56
+
57
+ ---
58
+
59
+ ## Módulos
60
+
61
+ ### Dev Copilot
62
+ Assistente de IA para geração de código Arc. Responde a perguntas, gera contratos Solidity, scripts de deploy e interações com o ecossistema Circle.
63
+
64
+ ### Agent Starter Kit
65
+ Templates prontos para agentes econômicos autônomos: pagamento recorrente, monitoramento de carteira, arbitragem de câmbio e marketplace descentralizado.
66
+
67
+ ### Tx Debugger
68
+ Ferramenta de análise de transações Arc. Decodifica traces, identifica erros, calcula custos em USDC e sugere correções.
69
+
70
+ ---
71
+
72
+ ## Instalação
73
+
74
+ **Pré-requisitos:** Python 3.11 ou superior, pip.
75
+
76
+ ```bash
77
+ # Instalação padrão
78
+ pip install arc-devkit
79
+
80
+ # Instalação para desenvolvimento (inclui ferramentas de teste e lint)
81
+ git clone https://github.com/seu-usuario/arc-devkit.git
82
+ cd arc-devkit
83
+ pip install -e ".[dev]"
84
+ ```
85
+
86
+ ### Configurar variáveis de ambiente
87
+
88
+ ```bash
89
+ # Chave da API Anthropic (obrigatória para o Dev Copilot)
90
+ export ANTHROPIC_API_KEY="sua-chave-aqui"
91
+
92
+ # URL RPC da Arc (padrão: testnet)
93
+ export ARC_RPC_URL="https://rpc.arc.io/testnet"
94
+
95
+ # Chave privada da carteira (opcional — necessária apenas para enviar transações)
96
+ export ARC_PRIVATE_KEY="sua-chave-privada"
97
+ ```
98
+
99
+ ---
100
+
101
+ ## Uso Rápido
102
+
103
+ ### Dev Copilot — Gerar código com IA
104
+
105
+ ```python
106
+ from arc_devkit.copilot import DevCopilot
107
+
108
+ copilot = DevCopilot()
109
+
110
+ # Gerar um contrato de pagamento recorrente
111
+ resposta = copilot.perguntar(
112
+ "Como implemento pagamento recorrente em USDC na Arc usando Solidity?"
113
+ )
114
+ print(resposta)
115
+ ```
116
+
117
+ Via linha de comando:
118
+
119
+ ```bash
120
+ arc-copilot perguntar "Como fazer deploy de um contrato ERC-20 na Arc testnet?"
121
+ ```
122
+
123
+ ---
124
+
125
+ ### Agent Starter Kit — Criar agente econômico
126
+
127
+ ```python
128
+ from arc_devkit.agents import AgenteMonitoramento
129
+ from decimal import Decimal
130
+
131
+ # Monitorar uma carteira e agir ao receber USDC
132
+ agente = AgenteMonitoramento(
133
+ carteira="0xSuaCarteiraAqui",
134
+ limiar_usdc=Decimal("100.00"), # agir ao receber 100 USDC ou mais
135
+ intervalo_segundos=30,
136
+ )
137
+
138
+ agente.ao_receber(lambda evento: print(f"Recebido: {evento.valor} USDC"))
139
+ agente.iniciar()
140
+ ```
141
+
142
+ Via linha de comando:
143
+
144
+ ```bash
145
+ arc-agents iniciar monitoramento \
146
+ --carteira 0xSuaCarteiraAqui \
147
+ --limiar 100 \
148
+ --intervalo 30
149
+ ```
150
+
151
+ ---
152
+
153
+ ### Tx Debugger — Analisar transação
154
+
155
+ ```python
156
+ from arc_devkit.debugger import TxDebugger
157
+
158
+ debugger = TxDebugger()
159
+
160
+ # Analisar uma transação que falhou
161
+ analise = debugger.analisar("0xhash_da_transacao_aqui")
162
+
163
+ print(analise.status) # "revertida"
164
+ print(analise.motivo) # "ERC20: transferência excede saldo"
165
+ print(analise.custo_usdc) # "0.0012 USDC"
166
+ print(analise.sugestao) # "Verifique o saldo antes de transferir"
167
+ ```
168
+
169
+ Via linha de comando:
170
+
171
+ ```bash
172
+ arc-debug analisar 0xhash_da_transacao_aqui --formato json
173
+ ```
174
+
175
+ ---
176
+
177
+ ## Estrutura do Projeto
178
+
179
+ ```
180
+ arc_devkit/
181
+ ├── core/ # Fundação: cliente RPC, utilitários de gás em USDC
182
+ │ ├── client.py # Cliente Arc (web3.py com defaults Arc)
183
+ │ ├── gas.py # Estimativa e conversão de gás em USDC
184
+ │ └── config.py # Carregamento de configuração e variáveis de ambiente
185
+
186
+ ├── copilot/ # Módulo Dev Copilot
187
+ │ ├── ai.py # Wrapper do SDK Anthropic com streaming
188
+ │ ├── cli.py # Interface de linha de comando (Click)
189
+ │ └── prompts/ # Templates de prompt por tipo de tarefa
190
+
191
+ ├── agents/ # Módulo Agent Starter Kit
192
+ │ ├── base.py # Classe base para todos os agentes
193
+ │ ├── pagamento.py # Agente de pagamento recorrente
194
+ │ ├── monitoramento.py # Agente de monitoramento de carteira
195
+ │ ├── cambio.py # Agente de arbitragem de câmbio
196
+ │ └── marketplace.py # Agente de marketplace descentralizado
197
+
198
+ └── debugger/ # Módulo Tx Debugger
199
+ ├── debugger.py # Orquestrador principal
200
+ ├── trace.py # Decodificador de traces de transação
201
+ ├── abi.py # Resolução de ABI (cache local + Sourcify)
202
+ └── cli.py # Interface de linha de comando (Click)
203
+ ```
204
+
205
+ ---
206
+
207
+ ## Documentação
208
+
209
+ - [Começando](docs/getting-started.md) — instalação, configuração e primeiro exemplo
210
+ - [Dev Copilot](docs/modules/dev-copilot.md) — uso completo do assistente de IA
211
+ - [Agent Starter Kit](docs/modules/agent-starter-kit.md) — templates de agentes econômicos
212
+ - [Tx Debugger](docs/modules/tx-debugger.md) — análise e debugging de transações
213
+
214
+ ---
215
+
216
+ ## Contribuição
217
+
218
+ Contribuições são bem-vindas! Leia [CONTRIBUTING.md](CONTRIBUTING.md) para entender o processo.
219
+
220
+ ```bash
221
+ # Rodar os testes
222
+ pytest
223
+
224
+ # Verificar formatação e tipos
225
+ ruff check . && mypy arc_devkit/
226
+ ```
227
+
228
+ ---
229
+
230
+ ## Licença
231
+
232
+ MIT — veja [LICENSE](LICENSE) para detalhes.
233
+
234
+ ---
235
+
236
+ ## Sobre a Arc
237
+
238
+ A Arc é desenvolvida pela Circle, a empresa por trás do USDC. Para mais informações sobre a blockchain e o ecossistema de agentes econômicos, consulte a documentação oficial da Circle.
@@ -0,0 +1,203 @@
1
+ # Arc DevKit
2
+
3
+ [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
4
+ [![Licença MIT](https://img.shields.io/badge/licença-MIT-green.svg)](LICENSE)
5
+ [![Testnet](https://img.shields.io/badge/arc-testnet-orange.svg)](https://arc.io)
6
+ [![Status](https://img.shields.io/badge/status-em%20desenvolvimento-yellow.svg)]()
7
+
8
+ Uma plataforma open source de ferramentas para desenvolvedores que constroem na **Arc blockchain** — a Layer 1 da Circle com USDC como token de gás e finalidade em menos de 1 segundo.
9
+
10
+ ---
11
+
12
+ ## O que é a Arc?
13
+
14
+ A **Arc** é uma blockchain Layer 1 desenvolvida pela Circle (criadores do USDC), com foco em pagamentos programáveis e agentes econômicos autônomos. Características principais:
15
+
16
+ - **EVM-compatível** — contratos Solidity funcionam sem modificação
17
+ - **USDC como gás** — sem necessidade de ETH ou token nativo separado
18
+ - **Consenso Malachite** — finalidade em menos de 1 segundo
19
+ - **Circle Agent Stack** — infraestrutura nativa para agentes de IA econômicos
20
+ - **Testnet ativa** desde outubro de 2025; mainnet prevista para o verão de 2026
21
+
22
+ ---
23
+
24
+ ## Módulos
25
+
26
+ ### Dev Copilot
27
+ Assistente de IA para geração de código Arc. Responde a perguntas, gera contratos Solidity, scripts de deploy e interações com o ecossistema Circle.
28
+
29
+ ### Agent Starter Kit
30
+ Templates prontos para agentes econômicos autônomos: pagamento recorrente, monitoramento de carteira, arbitragem de câmbio e marketplace descentralizado.
31
+
32
+ ### Tx Debugger
33
+ Ferramenta de análise de transações Arc. Decodifica traces, identifica erros, calcula custos em USDC e sugere correções.
34
+
35
+ ---
36
+
37
+ ## Instalação
38
+
39
+ **Pré-requisitos:** Python 3.11 ou superior, pip.
40
+
41
+ ```bash
42
+ # Instalação padrão
43
+ pip install arc-devkit
44
+
45
+ # Instalação para desenvolvimento (inclui ferramentas de teste e lint)
46
+ git clone https://github.com/seu-usuario/arc-devkit.git
47
+ cd arc-devkit
48
+ pip install -e ".[dev]"
49
+ ```
50
+
51
+ ### Configurar variáveis de ambiente
52
+
53
+ ```bash
54
+ # Chave da API Anthropic (obrigatória para o Dev Copilot)
55
+ export ANTHROPIC_API_KEY="sua-chave-aqui"
56
+
57
+ # URL RPC da Arc (padrão: testnet)
58
+ export ARC_RPC_URL="https://rpc.arc.io/testnet"
59
+
60
+ # Chave privada da carteira (opcional — necessária apenas para enviar transações)
61
+ export ARC_PRIVATE_KEY="sua-chave-privada"
62
+ ```
63
+
64
+ ---
65
+
66
+ ## Uso Rápido
67
+
68
+ ### Dev Copilot — Gerar código com IA
69
+
70
+ ```python
71
+ from arc_devkit.copilot import DevCopilot
72
+
73
+ copilot = DevCopilot()
74
+
75
+ # Gerar um contrato de pagamento recorrente
76
+ resposta = copilot.perguntar(
77
+ "Como implemento pagamento recorrente em USDC na Arc usando Solidity?"
78
+ )
79
+ print(resposta)
80
+ ```
81
+
82
+ Via linha de comando:
83
+
84
+ ```bash
85
+ arc-copilot perguntar "Como fazer deploy de um contrato ERC-20 na Arc testnet?"
86
+ ```
87
+
88
+ ---
89
+
90
+ ### Agent Starter Kit — Criar agente econômico
91
+
92
+ ```python
93
+ from arc_devkit.agents import AgenteMonitoramento
94
+ from decimal import Decimal
95
+
96
+ # Monitorar uma carteira e agir ao receber USDC
97
+ agente = AgenteMonitoramento(
98
+ carteira="0xSuaCarteiraAqui",
99
+ limiar_usdc=Decimal("100.00"), # agir ao receber 100 USDC ou mais
100
+ intervalo_segundos=30,
101
+ )
102
+
103
+ agente.ao_receber(lambda evento: print(f"Recebido: {evento.valor} USDC"))
104
+ agente.iniciar()
105
+ ```
106
+
107
+ Via linha de comando:
108
+
109
+ ```bash
110
+ arc-agents iniciar monitoramento \
111
+ --carteira 0xSuaCarteiraAqui \
112
+ --limiar 100 \
113
+ --intervalo 30
114
+ ```
115
+
116
+ ---
117
+
118
+ ### Tx Debugger — Analisar transação
119
+
120
+ ```python
121
+ from arc_devkit.debugger import TxDebugger
122
+
123
+ debugger = TxDebugger()
124
+
125
+ # Analisar uma transação que falhou
126
+ analise = debugger.analisar("0xhash_da_transacao_aqui")
127
+
128
+ print(analise.status) # "revertida"
129
+ print(analise.motivo) # "ERC20: transferência excede saldo"
130
+ print(analise.custo_usdc) # "0.0012 USDC"
131
+ print(analise.sugestao) # "Verifique o saldo antes de transferir"
132
+ ```
133
+
134
+ Via linha de comando:
135
+
136
+ ```bash
137
+ arc-debug analisar 0xhash_da_transacao_aqui --formato json
138
+ ```
139
+
140
+ ---
141
+
142
+ ## Estrutura do Projeto
143
+
144
+ ```
145
+ arc_devkit/
146
+ ├── core/ # Fundação: cliente RPC, utilitários de gás em USDC
147
+ │ ├── client.py # Cliente Arc (web3.py com defaults Arc)
148
+ │ ├── gas.py # Estimativa e conversão de gás em USDC
149
+ │ └── config.py # Carregamento de configuração e variáveis de ambiente
150
+
151
+ ├── copilot/ # Módulo Dev Copilot
152
+ │ ├── ai.py # Wrapper do SDK Anthropic com streaming
153
+ │ ├── cli.py # Interface de linha de comando (Click)
154
+ │ └── prompts/ # Templates de prompt por tipo de tarefa
155
+
156
+ ├── agents/ # Módulo Agent Starter Kit
157
+ │ ├── base.py # Classe base para todos os agentes
158
+ │ ├── pagamento.py # Agente de pagamento recorrente
159
+ │ ├── monitoramento.py # Agente de monitoramento de carteira
160
+ │ ├── cambio.py # Agente de arbitragem de câmbio
161
+ │ └── marketplace.py # Agente de marketplace descentralizado
162
+
163
+ └── debugger/ # Módulo Tx Debugger
164
+ ├── debugger.py # Orquestrador principal
165
+ ├── trace.py # Decodificador de traces de transação
166
+ ├── abi.py # Resolução de ABI (cache local + Sourcify)
167
+ └── cli.py # Interface de linha de comando (Click)
168
+ ```
169
+
170
+ ---
171
+
172
+ ## Documentação
173
+
174
+ - [Começando](docs/getting-started.md) — instalação, configuração e primeiro exemplo
175
+ - [Dev Copilot](docs/modules/dev-copilot.md) — uso completo do assistente de IA
176
+ - [Agent Starter Kit](docs/modules/agent-starter-kit.md) — templates de agentes econômicos
177
+ - [Tx Debugger](docs/modules/tx-debugger.md) — análise e debugging de transações
178
+
179
+ ---
180
+
181
+ ## Contribuição
182
+
183
+ Contribuições são bem-vindas! Leia [CONTRIBUTING.md](CONTRIBUTING.md) para entender o processo.
184
+
185
+ ```bash
186
+ # Rodar os testes
187
+ pytest
188
+
189
+ # Verificar formatação e tipos
190
+ ruff check . && mypy arc_devkit/
191
+ ```
192
+
193
+ ---
194
+
195
+ ## Licença
196
+
197
+ MIT — veja [LICENSE](LICENSE) para detalhes.
198
+
199
+ ---
200
+
201
+ ## Sobre a Arc
202
+
203
+ A Arc é desenvolvida pela Circle, a empresa por trás do USDC. Para mais informações sobre a blockchain e o ecossistema de agentes econômicos, consulte a documentação oficial da Circle.
@@ -0,0 +1,3 @@
1
+ """Arc DevKit — Ferramentas para desenvolvedores da Arc blockchain (Circle)."""
2
+
3
+ __version__ = "0.1.0"
@@ -0,0 +1,7 @@
1
+ """Módulo Agent Starter Kit — templates de agentes econômicos Arc."""
2
+
3
+ from arc_devkit.agents.base_agent import BaseAgent
4
+ from arc_devkit.agents.payment_agent import PaymentAgent
5
+ from arc_devkit.agents.monitor_agent import MonitorAgent
6
+
7
+ __all__ = ["BaseAgent", "PaymentAgent", "MonitorAgent"]
@@ -0,0 +1,87 @@
1
+ """Classe base abstrata para todos os agentes econômicos Arc."""
2
+
3
+ import logging
4
+ from abc import ABC, abstractmethod
5
+
6
+ from eth_account import Account
7
+ from web3 import Web3
8
+
9
+ logger = logging.getLogger(__name__)
10
+
11
+
12
+ class BaseAgent(ABC):
13
+ """
14
+ Fundação para todos os agentes econômicos Arc.
15
+
16
+ Gerencia a conexão com a blockchain, a identidade da carteira
17
+ e fornece helpers de logging. Subclasses implementam get_balance()
18
+ e execute() com a lógica específica de cada tipo de agente.
19
+ """
20
+
21
+ def __init__(
22
+ self,
23
+ private_key: str | None = None,
24
+ rpc_url: str | None = None,
25
+ ) -> None:
26
+ """
27
+ Inicializa o agente com carteira e conexão RPC.
28
+
29
+ Args:
30
+ private_key: Chave privada hex (opcional). Se omitida, usa
31
+ ARC_PRIVATE_KEY do ambiente. Sem chave = modo leitura.
32
+ rpc_url: URL do nó RPC (opcional). Se omitida, usa ARC_RPC_URL.
33
+ """
34
+ from arc_devkit.config import settings
35
+ from arc_devkit.core.connection import get_web3
36
+
37
+ # Configurar conexão com a Arc
38
+ self._w3: Web3 = get_web3()
39
+
40
+ # Resolver chave privada: argumento > variável de ambiente > None
41
+ _chave = private_key or settings.arc_private_key
42
+
43
+ if _chave:
44
+ account = Account.from_key(_chave)
45
+ self._address: str | None = account.address
46
+ self._private_key: str | None = _chave
47
+ logger.info(
48
+ "[%s] Inicializado com carteira %s",
49
+ self.__class__.__name__,
50
+ self._address,
51
+ )
52
+ else:
53
+ self._address = None
54
+ self._private_key = None
55
+ logger.warning(
56
+ "[%s] Sem chave privada — modo somente leitura.",
57
+ self.__class__.__name__,
58
+ )
59
+
60
+ @property
61
+ def wallet_address(self) -> str | None:
62
+ """Endereço checksummed da carteira do agente."""
63
+ return self._address
64
+
65
+ @abstractmethod
66
+ def get_balance(self) -> dict:
67
+ """
68
+ Retorna o saldo atual da carteira do agente.
69
+
70
+ Returns:
71
+ Dict com pelo menos 'address' e 'balance_usdc'.
72
+ """
73
+ ...
74
+
75
+ @abstractmethod
76
+ def execute(self, **kwargs) -> dict:
77
+ """
78
+ Executa a ação principal do agente.
79
+
80
+ Returns:
81
+ Dict com o resultado da execução, incluindo 'status'.
82
+ """
83
+ ...
84
+
85
+ def log(self, msg: str) -> None:
86
+ """Helper de log padronizado: prefixo com nome da classe."""
87
+ logger.info("[%s] %s", self.__class__.__name__, msg)
@@ -0,0 +1,104 @@
1
+ """Agente de monitoramento — detecta mudanças de saldo em carteiras Arc."""
2
+
3
+ import logging
4
+ import time
5
+ from collections.abc import Callable
6
+ from typing import Any
7
+
8
+ from web3 import Web3
9
+
10
+ from arc_devkit.agents.base_agent import BaseAgent
11
+
12
+ logger = logging.getLogger(__name__)
13
+
14
+
15
+ class MonitorAgent(BaseAgent):
16
+ """
17
+ Monitora uma carteira Arc e chama callbacks ao detectar mudanças de saldo.
18
+
19
+ Executa em loop de polling — adequado para MVP. Versões futuras
20
+ utilizarão eth_subscribe para eventos em tempo real via WebSocket.
21
+ """
22
+
23
+ def __init__(
24
+ self,
25
+ watched_address: str,
26
+ interval_seconds: int = 15,
27
+ **kwargs: Any,
28
+ ) -> None:
29
+ """
30
+ Inicializa o agente de monitoramento.
31
+
32
+ Args:
33
+ watched_address: Endereço EVM a monitorar.
34
+ interval_seconds: Intervalo de polling em segundos (padrão: 15).
35
+ **kwargs: Repassado ao BaseAgent (private_key, rpc_url).
36
+ """
37
+ super().__init__(**kwargs)
38
+ self._watched = Web3.to_checksum_address(watched_address)
39
+ self._interval = interval_seconds
40
+ self._last_balance: int | None = None
41
+ self._running = False
42
+
43
+ def get_balance(self) -> dict:
44
+ """Retorna o saldo atual da carteira monitorada."""
45
+ wei = self._w3.eth.get_balance(self._watched)
46
+ return {
47
+ "address": self._watched,
48
+ "balance_wei": str(wei),
49
+ "balance_eth": str(self._w3.from_wei(wei, "ether")),
50
+ }
51
+
52
+ def execute(
53
+ self,
54
+ callback: Callable[[dict], None] | None = None,
55
+ max_iterations: int = 0,
56
+ ) -> dict:
57
+ """
58
+ Inicia o loop de monitoramento da carteira.
59
+
60
+ Args:
61
+ callback: Função chamada com um dict de evento ao detectar mudança.
62
+ O dict contém: address, saldo_anterior, saldo_atual, diferenca_wei.
63
+ max_iterations: Número máximo de iterações (0 = loop infinito).
64
+
65
+ Returns:
66
+ Dict com status e total de iterações executadas.
67
+ """
68
+ self._running = True
69
+ self._last_balance = self._w3.eth.get_balance(self._watched)
70
+ iteracoes = 0
71
+
72
+ self.log(f"Monitorando {self._watched} a cada {self._interval}s")
73
+
74
+ while self._running:
75
+ saldo_atual = self._w3.eth.get_balance(self._watched)
76
+
77
+ if saldo_atual != self._last_balance:
78
+ diferenca = saldo_atual - self._last_balance
79
+ evento = {
80
+ "address": self._watched,
81
+ "saldo_anterior_wei": str(self._last_balance),
82
+ "saldo_atual_wei": str(saldo_atual),
83
+ "diferenca_wei": str(diferenca),
84
+ "tipo": "credito" if diferenca > 0 else "debito",
85
+ }
86
+ self.log(f"Mudança detectada: {diferenca:+d} wei ({evento['tipo']})")
87
+
88
+ if callback:
89
+ callback(evento)
90
+
91
+ self._last_balance = saldo_atual
92
+
93
+ iteracoes += 1
94
+ if max_iterations and iteracoes >= max_iterations:
95
+ break
96
+
97
+ time.sleep(self._interval)
98
+
99
+ return {"status": "finalizado", "iteracoes": iteracoes}
100
+
101
+ def stop(self) -> None:
102
+ """Interrompe o loop de monitoramento na próxima iteração."""
103
+ self._running = False
104
+ self.log("Monitoramento encerrado.")