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.
- arc_devkit-0.2.0/PKG-INFO +238 -0
- arc_devkit-0.2.0/README.md +203 -0
- arc_devkit-0.2.0/arc_devkit/__init__.py +3 -0
- arc_devkit-0.2.0/arc_devkit/agents/__init__.py +7 -0
- arc_devkit-0.2.0/arc_devkit/agents/base_agent.py +87 -0
- arc_devkit-0.2.0/arc_devkit/agents/monitor_agent.py +104 -0
- arc_devkit-0.2.0/arc_devkit/agents/payment_agent.py +97 -0
- arc_devkit-0.2.0/arc_devkit/api/__init__.py +1 -0
- arc_devkit-0.2.0/arc_devkit/api/main.py +42 -0
- arc_devkit-0.2.0/arc_devkit/api/routes/__init__.py +1 -0
- arc_devkit-0.2.0/arc_devkit/api/routes/agents.py +126 -0
- arc_devkit-0.2.0/arc_devkit/api/routes/copilot.py +37 -0
- arc_devkit-0.2.0/arc_devkit/api/routes/debugger.py +55 -0
- arc_devkit-0.2.0/arc_devkit/cli/__init__.py +1 -0
- arc_devkit-0.2.0/arc_devkit/cli/commands/__init__.py +1 -0
- arc_devkit-0.2.0/arc_devkit/cli/commands/agent.py +176 -0
- arc_devkit-0.2.0/arc_devkit/cli/commands/copilot.py +40 -0
- arc_devkit-0.2.0/arc_devkit/cli/commands/debug.py +110 -0
- arc_devkit-0.2.0/arc_devkit/cli/main.py +69 -0
- arc_devkit-0.2.0/arc_devkit/config.py +73 -0
- arc_devkit-0.2.0/arc_devkit/copilot/__init__.py +5 -0
- arc_devkit-0.2.0/arc_devkit/copilot/agent.py +74 -0
- arc_devkit-0.2.0/arc_devkit/core/__init__.py +1 -0
- arc_devkit-0.2.0/arc_devkit/core/connection.py +50 -0
- arc_devkit-0.2.0/arc_devkit/core/gas.py +62 -0
- arc_devkit-0.2.0/arc_devkit/core/wallet.py +72 -0
- arc_devkit-0.2.0/arc_devkit/debugger/__init__.py +5 -0
- arc_devkit-0.2.0/arc_devkit/debugger/tx_analyzer.py +107 -0
- arc_devkit-0.2.0/arc_devkit.egg-info/PKG-INFO +238 -0
- arc_devkit-0.2.0/arc_devkit.egg-info/SOURCES.txt +38 -0
- arc_devkit-0.2.0/arc_devkit.egg-info/dependency_links.txt +1 -0
- arc_devkit-0.2.0/arc_devkit.egg-info/entry_points.txt +2 -0
- arc_devkit-0.2.0/arc_devkit.egg-info/requires.txt +14 -0
- arc_devkit-0.2.0/arc_devkit.egg-info/top_level.txt +1 -0
- arc_devkit-0.2.0/pyproject.toml +94 -0
- arc_devkit-0.2.0/setup.cfg +4 -0
- arc_devkit-0.2.0/tests/test_agents.py +145 -0
- arc_devkit-0.2.0/tests/test_api.py +122 -0
- arc_devkit-0.2.0/tests/test_connection.py +58 -0
- 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
|
+
[](https://www.python.org/downloads/)
|
|
39
|
+
[](LICENSE)
|
|
40
|
+
[](https://arc.io)
|
|
41
|
+
[]()
|
|
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
|
+
[](https://www.python.org/downloads/)
|
|
4
|
+
[](LICENSE)
|
|
5
|
+
[](https://arc.io)
|
|
6
|
+
[]()
|
|
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,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.")
|