ergo-agent-sdk 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.
- ergo_agent_sdk-0.2.0/.github/ISSUE_TEMPLATE/bug_report.md +35 -0
- ergo_agent_sdk-0.2.0/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
- ergo_agent_sdk-0.2.0/.github/pull_request_template.md +15 -0
- ergo_agent_sdk-0.2.0/.github/workflows/ci.yml +59 -0
- ergo_agent_sdk-0.2.0/CONTRIBUTING.md +61 -0
- ergo_agent_sdk-0.2.0/PKG-INFO +194 -0
- ergo_agent_sdk-0.2.0/README.md +150 -0
- ergo_agent_sdk-0.2.0/docs/api-reference.md +132 -0
- ergo_agent_sdk-0.2.0/docs/architecture.md +136 -0
- ergo_agent_sdk-0.2.0/docs/getting-started.md +144 -0
- ergo_agent_sdk-0.2.0/docs/index.md +49 -0
- ergo_agent_sdk-0.2.0/docs/tutorial.md +158 -0
- ergo_agent_sdk-0.2.0/examples/01_check_balance.py +48 -0
- ergo_agent_sdk-0.2.0/examples/02_read_oracle_price.py +44 -0
- ergo_agent_sdk-0.2.0/examples/03_swap_quote.py +42 -0
- ergo_agent_sdk-0.2.0/examples/04_openai_agent.py +100 -0
- ergo_agent_sdk-0.2.0/examples/05_address_info.py +48 -0
- ergo_agent_sdk-0.2.0/examples/06_portfolio_tracker.py +53 -0
- ergo_agent_sdk-0.2.0/examples/07_mempool_monitor.py +54 -0
- ergo_agent_sdk-0.2.0/examples/08_safety_demo.py +70 -0
- ergo_agent_sdk-0.2.0/examples/09_dex_scanner.py +48 -0
- ergo_agent_sdk-0.2.0/examples/10_cli_tool_runner.py +57 -0
- ergo_agent_sdk-0.2.0/mkdocs.yml +82 -0
- ergo_agent_sdk-0.2.0/pyproject.toml +83 -0
- ergo_agent_sdk-0.2.0/site/404.html +584 -0
- ergo_agent_sdk-0.2.0/site/api-reference/index.html +6126 -0
- ergo_agent_sdk-0.2.0/site/architecture/index.html +1104 -0
- ergo_agent_sdk-0.2.0/site/assets/_mkdocstrings.css +237 -0
- ergo_agent_sdk-0.2.0/site/assets/images/favicon.png +0 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/bundle.79ae519e.min.js +16 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/bundle.79ae519e.min.js.map +7 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.ar.min.js +1 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.da.min.js +18 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.de.min.js +18 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.du.min.js +18 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.el.min.js +1 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.es.min.js +18 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.fi.min.js +18 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.fr.min.js +18 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.he.min.js +1 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.hi.min.js +1 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.hu.min.js +18 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.hy.min.js +1 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.it.min.js +18 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.ja.min.js +1 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.jp.min.js +1 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.kn.min.js +1 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.ko.min.js +1 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.multi.min.js +1 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.nl.min.js +18 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.no.min.js +18 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.pt.min.js +18 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.ro.min.js +18 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.ru.min.js +18 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.sa.min.js +1 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +1 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.sv.min.js +18 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.ta.min.js +1 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.te.min.js +1 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.th.min.js +1 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.tr.min.js +18 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.vi.min.js +1 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/min/lunr.zh.min.js +1 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/tinyseg.js +206 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/lunr/wordcut.js +6708 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/workers/search.2c215733.min.js +42 -0
- ergo_agent_sdk-0.2.0/site/assets/javascripts/workers/search.2c215733.min.js.map +7 -0
- ergo_agent_sdk-0.2.0/site/assets/stylesheets/main.484c7ddc.min.css +1 -0
- ergo_agent_sdk-0.2.0/site/assets/stylesheets/main.484c7ddc.min.css.map +1 -0
- ergo_agent_sdk-0.2.0/site/assets/stylesheets/palette.ab4e12ef.min.css +1 -0
- ergo_agent_sdk-0.2.0/site/assets/stylesheets/palette.ab4e12ef.min.css.map +1 -0
- ergo_agent_sdk-0.2.0/site/getting-started/index.html +899 -0
- ergo_agent_sdk-0.2.0/site/index.html +844 -0
- ergo_agent_sdk-0.2.0/site/objects.inv +0 -0
- ergo_agent_sdk-0.2.0/site/search/search_index.json +1 -0
- ergo_agent_sdk-0.2.0/site/sitemap.xml +23 -0
- ergo_agent_sdk-0.2.0/site/sitemap.xml.gz +0 -0
- ergo_agent_sdk-0.2.0/site/tutorial/index.html +964 -0
- ergo_agent_sdk-0.2.0/src/ergo_agent/__init__.py +22 -0
- ergo_agent_sdk-0.2.0/src/ergo_agent/core/__init__.py +48 -0
- ergo_agent_sdk-0.2.0/src/ergo_agent/core/address.py +247 -0
- ergo_agent_sdk-0.2.0/src/ergo_agent/core/builder.py +304 -0
- ergo_agent_sdk-0.2.0/src/ergo_agent/core/models.py +92 -0
- ergo_agent_sdk-0.2.0/src/ergo_agent/core/node.py +279 -0
- ergo_agent_sdk-0.2.0/src/ergo_agent/core/privacy.py +245 -0
- ergo_agent_sdk-0.2.0/src/ergo_agent/core/wallet.py +160 -0
- ergo_agent_sdk-0.2.0/src/ergo_agent/defi/__init__.py +5 -0
- ergo_agent_sdk-0.2.0/src/ergo_agent/defi/oracle.py +159 -0
- ergo_agent_sdk-0.2.0/src/ergo_agent/defi/spectrum.py +425 -0
- ergo_agent_sdk-0.2.0/src/ergo_agent/tools/__init__.py +5 -0
- ergo_agent_sdk-0.2.0/src/ergo_agent/tools/anthropic_tools.py +79 -0
- ergo_agent_sdk-0.2.0/src/ergo_agent/tools/langchain_tools.py +95 -0
- ergo_agent_sdk-0.2.0/src/ergo_agent/tools/openai_tools.py +138 -0
- ergo_agent_sdk-0.2.0/src/ergo_agent/tools/safety.py +116 -0
- ergo_agent_sdk-0.2.0/src/ergo_agent/tools/toolkit.py +330 -0
- ergo_agent_sdk-0.2.0/tests/integration/__init__.py +1 -0
- ergo_agent_sdk-0.2.0/tests/integration/test_address.py +148 -0
- ergo_agent_sdk-0.2.0/tests/integration/test_defi.py +148 -0
- ergo_agent_sdk-0.2.0/tests/integration/test_node.py +101 -0
- ergo_agent_sdk-0.2.0/tests/live_check.py +60 -0
- ergo_agent_sdk-0.2.0/tests/unit/test_builder_extensions.py +299 -0
- ergo_agent_sdk-0.2.0/tests/unit/test_models.py +54 -0
- ergo_agent_sdk-0.2.0/tests/unit/test_safety.py +75 -0
- ergo_agent_sdk-0.2.0/tests/unit/test_tools_schema.py +62 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug report
|
|
3
|
+
about: Report a bug in the ergo-agent SDK
|
|
4
|
+
title: "[BUG] "
|
|
5
|
+
labels: bug
|
|
6
|
+
assignees: ""
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Describe the Bug
|
|
10
|
+
|
|
11
|
+
A clear description of what the bug is.
|
|
12
|
+
|
|
13
|
+
## To Reproduce
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
# Minimal code to reproduce:
|
|
17
|
+
from ergo_agent import ErgoNode
|
|
18
|
+
|
|
19
|
+
node = ErgoNode()
|
|
20
|
+
# ...
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Expected Behavior
|
|
24
|
+
|
|
25
|
+
What you expected to happen.
|
|
26
|
+
|
|
27
|
+
## Actual Behavior
|
|
28
|
+
|
|
29
|
+
What actually happened. Include the full error traceback if applicable.
|
|
30
|
+
|
|
31
|
+
## Environment
|
|
32
|
+
|
|
33
|
+
- OS: [e.g. Windows 11, Ubuntu 22.04]
|
|
34
|
+
- Python version: [e.g. 3.12]
|
|
35
|
+
- ergo-agent version: [e.g. 0.1.0]
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Feature request
|
|
3
|
+
about: Suggest a new feature for the ergo-agent SDK
|
|
4
|
+
title: "[FEATURE] "
|
|
5
|
+
labels: enhancement
|
|
6
|
+
assignees: ""
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Problem
|
|
10
|
+
|
|
11
|
+
What problem does this feature solve?
|
|
12
|
+
|
|
13
|
+
## Proposed Solution
|
|
14
|
+
|
|
15
|
+
How should this feature work?
|
|
16
|
+
|
|
17
|
+
## Alternatives Considered
|
|
18
|
+
|
|
19
|
+
Any alternative approaches you've thought about.
|
|
20
|
+
|
|
21
|
+
## Additional Context
|
|
22
|
+
|
|
23
|
+
Links to relevant Ergo docs, protocols, or examples.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
## Description
|
|
2
|
+
|
|
3
|
+
Brief description of what this PR does.
|
|
4
|
+
|
|
5
|
+
## Changes
|
|
6
|
+
|
|
7
|
+
-
|
|
8
|
+
|
|
9
|
+
## Checklist
|
|
10
|
+
|
|
11
|
+
- [ ] Tests added/updated
|
|
12
|
+
- [ ] `pytest tests/ -v` passes
|
|
13
|
+
- [ ] `ruff check src/` passes
|
|
14
|
+
- [ ] Documentation updated (if public API changed)
|
|
15
|
+
- [ ] No sensitive data (keys, mnemonics) in the diff
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, develop]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
python-version: ["3.10", "3.11", "3.12"]
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
20
|
+
uses: actions/setup-python@v5
|
|
21
|
+
with:
|
|
22
|
+
python-version: ${{ matrix.python-version }}
|
|
23
|
+
|
|
24
|
+
- name: Install uv
|
|
25
|
+
run: pip install uv
|
|
26
|
+
|
|
27
|
+
- name: Install dependencies
|
|
28
|
+
run: uv pip install -e ".[dev]" --system
|
|
29
|
+
|
|
30
|
+
- name: Lint with ruff
|
|
31
|
+
run: ruff check src/ tests/
|
|
32
|
+
|
|
33
|
+
- name: Run unit tests (no network)
|
|
34
|
+
run: pytest tests/unit/ -v --tb=short
|
|
35
|
+
|
|
36
|
+
integration:
|
|
37
|
+
runs-on: ubuntu-latest
|
|
38
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
39
|
+
needs: test
|
|
40
|
+
|
|
41
|
+
steps:
|
|
42
|
+
- uses: actions/checkout@v4
|
|
43
|
+
|
|
44
|
+
- name: Set up Python
|
|
45
|
+
uses: actions/setup-python@v5
|
|
46
|
+
with:
|
|
47
|
+
python-version: "3.11"
|
|
48
|
+
|
|
49
|
+
- name: Install uv
|
|
50
|
+
run: pip install uv
|
|
51
|
+
|
|
52
|
+
- name: Install dependencies
|
|
53
|
+
run: uv pip install -e ".[dev]" --system
|
|
54
|
+
|
|
55
|
+
- name: Run integration tests (live testnet API)
|
|
56
|
+
run: pytest tests/integration/ -v --tb=short
|
|
57
|
+
env:
|
|
58
|
+
ERGO_API_URL: https://api.ergoplatform.com
|
|
59
|
+
ERGO_TEST_ADDRESS: ${{ secrets.ERGO_TEST_ADDRESS }}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Contributing to ergo-agent SDK
|
|
2
|
+
|
|
3
|
+
Thanks for your interest in contributing! This guide covers setup, testing, and PR workflow.
|
|
4
|
+
|
|
5
|
+
## Development Setup
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Clone the repo
|
|
9
|
+
git clone https://github.com/ergoplatform/ergo-agent-sdk.git
|
|
10
|
+
cd ergo-agent-sdk
|
|
11
|
+
|
|
12
|
+
# Create a virtual environment
|
|
13
|
+
python -m venv .venv
|
|
14
|
+
.venv\Scripts\activate # Windows
|
|
15
|
+
# source .venv/bin/activate # macOS/Linux
|
|
16
|
+
|
|
17
|
+
# Install in editable mode with all dev dependencies
|
|
18
|
+
pip install -e ".[all,dev]"
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Running Tests
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# Unit tests only (fast, no network)
|
|
25
|
+
pytest tests/unit/ -v
|
|
26
|
+
|
|
27
|
+
# Integration tests (requires internet — hits live APIs)
|
|
28
|
+
pytest tests/integration/ -v
|
|
29
|
+
|
|
30
|
+
# All tests
|
|
31
|
+
pytest tests/ -v
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Code Style
|
|
35
|
+
|
|
36
|
+
We use [Ruff](https://docs.astral.sh/ruff/) for linting and formatting:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
ruff check src/ tests/
|
|
40
|
+
ruff format src/ tests/
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Documentation
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
pip install mkdocs-material mkdocstrings[python]
|
|
47
|
+
mkdocs serve # preview at http://localhost:8000
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Pull Request Process
|
|
51
|
+
|
|
52
|
+
1. Fork the repo and create a branch from `main`
|
|
53
|
+
2. Make your changes
|
|
54
|
+
3. Add tests for new functionality
|
|
55
|
+
4. Run `pytest tests/ -v` and `ruff check src/`
|
|
56
|
+
5. Update docs if you changed public APIs
|
|
57
|
+
6. Submit a PR with a clear description
|
|
58
|
+
|
|
59
|
+
## Architecture
|
|
60
|
+
|
|
61
|
+
See the [Architecture docs](https://ergo-agent.readthedocs.io/architecture/) for how the codebase is structured. Key rule: each layer only depends on the one below it (tools → defi → core).
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ergo-agent-sdk
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Open-source Python SDK for AI agents to interact with the Ergo blockchain
|
|
5
|
+
Project-URL: Homepage, https://github.com/ergoplatform/ergo-agent-sdk
|
|
6
|
+
Project-URL: Documentation, https://ergo-agent.readthedocs.io
|
|
7
|
+
Project-URL: Repository, https://github.com/ergoplatform/ergo-agent-sdk
|
|
8
|
+
Project-URL: Issues, https://github.com/ergoplatform/ergo-agent-sdk/issues
|
|
9
|
+
License: MIT
|
|
10
|
+
Keywords: agent,ai,blockchain,defi,ergo,llm
|
|
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.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
19
|
+
Requires-Python: >=3.10
|
|
20
|
+
Requires-Dist: httpx>=0.27.0
|
|
21
|
+
Requires-Dist: pydantic>=2.0.0
|
|
22
|
+
Requires-Dist: typing-extensions>=4.8.0
|
|
23
|
+
Provides-Extra: all
|
|
24
|
+
Requires-Dist: anthropic>=0.30.0; extra == 'all'
|
|
25
|
+
Requires-Dist: langchain-core>=0.2.0; extra == 'all'
|
|
26
|
+
Requires-Dist: openai>=1.0.0; extra == 'all'
|
|
27
|
+
Provides-Extra: anthropic
|
|
28
|
+
Requires-Dist: anthropic>=0.30.0; extra == 'anthropic'
|
|
29
|
+
Provides-Extra: dev
|
|
30
|
+
Requires-Dist: ipykernel>=6.0.0; extra == 'dev'
|
|
31
|
+
Requires-Dist: mypy>=1.10.0; extra == 'dev'
|
|
32
|
+
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
|
|
33
|
+
Requires-Dist: pytest-httpx>=0.30.0; extra == 'dev'
|
|
34
|
+
Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
35
|
+
Requires-Dist: ruff>=0.4.0; extra == 'dev'
|
|
36
|
+
Provides-Extra: docs
|
|
37
|
+
Requires-Dist: mkdocs-material>=9.5.0; extra == 'docs'
|
|
38
|
+
Requires-Dist: mkdocstrings[python]>=0.25.0; extra == 'docs'
|
|
39
|
+
Provides-Extra: langchain
|
|
40
|
+
Requires-Dist: langchain-core>=0.2.0; extra == 'langchain'
|
|
41
|
+
Provides-Extra: openai
|
|
42
|
+
Requires-Dist: openai>=1.0.0; extra == 'openai'
|
|
43
|
+
Description-Content-Type: text/markdown
|
|
44
|
+
|
|
45
|
+
# ergo-agent 🤖⛓️
|
|
46
|
+
|
|
47
|
+
> **Open-source Python SDK for AI agents on the Ergo blockchain.**
|
|
48
|
+
|
|
49
|
+
Give any LLM agent (Claude, GPT-4, LangChain, CrewAI...) the ability to read wallet balances, fetch live prices, swap tokens on Spectrum DEX — all autonomously, with built-in safety guardrails.
|
|
50
|
+
|
|
51
|
+
[](https://python.org)
|
|
52
|
+
[](LICENSE)
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Why?
|
|
57
|
+
|
|
58
|
+
Existing Ergo SDKs (ergpy, fleet-sdk, AppKit) are built for **human developers**. This SDK is built for **AI agents** — it speaks the language of function calling, returns structured JSON, and has a safety layer so the agent can't accidentally drain a wallet.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Quickstart
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
pip install ergo-agent
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Read-only (no wallet needed)
|
|
69
|
+
|
|
70
|
+
```python
|
|
71
|
+
from ergo_agent import ErgoNode, Wallet
|
|
72
|
+
from ergo_agent.tools import ErgoToolkit, SafetyConfig
|
|
73
|
+
|
|
74
|
+
node = ErgoNode()
|
|
75
|
+
wallet = Wallet.read_only("9f...") # any address to monitor
|
|
76
|
+
toolkit = ErgoToolkit(node=node, wallet=wallet)
|
|
77
|
+
|
|
78
|
+
# Check address balance
|
|
79
|
+
result = toolkit.get_wallet_balance()
|
|
80
|
+
|
|
81
|
+
# Get live ERG/USD price from Oracle Pool v2
|
|
82
|
+
price = toolkit.get_erg_price()
|
|
83
|
+
|
|
84
|
+
# Get a swap quote from Spectrum DEX
|
|
85
|
+
quote = toolkit.get_swap_quote(token_in="ERG", token_out="SigUSD", amount_erg=1.0)
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### With a wallet (transactions enabled)
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
from ergo_agent import ErgoNode, Wallet
|
|
92
|
+
from ergo_agent.tools import ErgoToolkit, SafetyConfig
|
|
93
|
+
|
|
94
|
+
node = ErgoNode(node_url="http://your-node:9053", api_key="your-key")
|
|
95
|
+
wallet = Wallet.from_node_wallet("9f...")
|
|
96
|
+
|
|
97
|
+
toolkit = ErgoToolkit(
|
|
98
|
+
node=node,
|
|
99
|
+
wallet=wallet,
|
|
100
|
+
safety=SafetyConfig(
|
|
101
|
+
max_erg_per_tx=5.0,
|
|
102
|
+
max_erg_per_day=50.0,
|
|
103
|
+
allowed_contracts=["spectrum"],
|
|
104
|
+
rate_limit_per_hour=20,
|
|
105
|
+
)
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
# Send ERG
|
|
109
|
+
toolkit.send_erg(to="9f...", amount_erg=1.5)
|
|
110
|
+
|
|
111
|
+
# Swap ERG for a token on Spectrum DEX
|
|
112
|
+
toolkit.swap_erg_for_token(token_out="SigUSD", amount_erg=1.0)
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Use with LLM frameworks
|
|
116
|
+
|
|
117
|
+
```python
|
|
118
|
+
# OpenAI function calling
|
|
119
|
+
tools = toolkit.to_openai_tools()
|
|
120
|
+
|
|
121
|
+
# Anthropic tool use
|
|
122
|
+
tools = toolkit.to_anthropic_tools()
|
|
123
|
+
|
|
124
|
+
# LangChain
|
|
125
|
+
lc_tools = toolkit.to_langchain_tools()
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Available Tools
|
|
131
|
+
|
|
132
|
+
| Tool | Description | Requires Wallet |
|
|
133
|
+
|---|---|---|
|
|
134
|
+
| `get_wallet_balance` | ERG + token balances | No |
|
|
135
|
+
| `get_erg_price` | Live ERG/USD from Oracle Pool v2 | No |
|
|
136
|
+
| `get_swap_quote` | Spectrum DEX swap quote | No |
|
|
137
|
+
| `get_mempool_status` | Pending transactions | No |
|
|
138
|
+
| `get_safety_status` | Current spending limits & usage | No |
|
|
139
|
+
| `send_erg` | Send ERG to an address | Yes |
|
|
140
|
+
| `swap_erg_for_token` | Execute a swap on Spectrum DEX | Yes |
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Architecture
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
ergo_agent/
|
|
148
|
+
├── core/ # ErgoNode client, Wallet, TransactionBuilder, Address utilities
|
|
149
|
+
├── defi/ # Oracle Pool v2, Spectrum DEX adapters
|
|
150
|
+
└── tools/ # LLM tool schemas (OpenAI / Anthropic / LangChain) + safety layer
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Safety Layer
|
|
156
|
+
|
|
157
|
+
Every state-changing action passes through `SafetyConfig` before execution:
|
|
158
|
+
|
|
159
|
+
```python
|
|
160
|
+
SafetyConfig(
|
|
161
|
+
max_erg_per_tx=10.0, # hard cap per transaction
|
|
162
|
+
max_erg_per_day=50.0, # daily rolling limit
|
|
163
|
+
allowed_contracts=["spectrum"], # contract whitelist
|
|
164
|
+
rate_limit_per_hour=20, # max 20 actions/hour
|
|
165
|
+
dry_run=False, # set True for dry-run mode
|
|
166
|
+
)
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Network
|
|
172
|
+
|
|
173
|
+
By default the SDK connects to the **Ergo public API** (`https://api.ergoplatform.com`). For production use or transaction signing, point it at your own node:
|
|
174
|
+
|
|
175
|
+
```python
|
|
176
|
+
node = ErgoNode(node_url="http://your-node:9053", api_key="your-key")
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Contributing
|
|
182
|
+
|
|
183
|
+
This is an open-source project for the Ergo ecosystem. PRs welcome.
|
|
184
|
+
|
|
185
|
+
**Roadmap:**
|
|
186
|
+
- v0.1.0 — Core + Oracle + Spectrum + Tool schemas + Safety layer *(current)*
|
|
187
|
+
- v0.2.0 — SigmaUSD + Rosen Bridge adapters
|
|
188
|
+
- v0.3.0 — Treasury contract (ErgoScript on-chain spending limits)
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## License
|
|
193
|
+
|
|
194
|
+
MIT
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# ergo-agent 🤖⛓️
|
|
2
|
+
|
|
3
|
+
> **Open-source Python SDK for AI agents on the Ergo blockchain.**
|
|
4
|
+
|
|
5
|
+
Give any LLM agent (Claude, GPT-4, LangChain, CrewAI...) the ability to read wallet balances, fetch live prices, swap tokens on Spectrum DEX — all autonomously, with built-in safety guardrails.
|
|
6
|
+
|
|
7
|
+
[](https://python.org)
|
|
8
|
+
[](LICENSE)
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Why?
|
|
13
|
+
|
|
14
|
+
Existing Ergo SDKs (ergpy, fleet-sdk, AppKit) are built for **human developers**. This SDK is built for **AI agents** — it speaks the language of function calling, returns structured JSON, and has a safety layer so the agent can't accidentally drain a wallet.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Quickstart
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
pip install ergo-agent
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Read-only (no wallet needed)
|
|
25
|
+
|
|
26
|
+
```python
|
|
27
|
+
from ergo_agent import ErgoNode, Wallet
|
|
28
|
+
from ergo_agent.tools import ErgoToolkit, SafetyConfig
|
|
29
|
+
|
|
30
|
+
node = ErgoNode()
|
|
31
|
+
wallet = Wallet.read_only("9f...") # any address to monitor
|
|
32
|
+
toolkit = ErgoToolkit(node=node, wallet=wallet)
|
|
33
|
+
|
|
34
|
+
# Check address balance
|
|
35
|
+
result = toolkit.get_wallet_balance()
|
|
36
|
+
|
|
37
|
+
# Get live ERG/USD price from Oracle Pool v2
|
|
38
|
+
price = toolkit.get_erg_price()
|
|
39
|
+
|
|
40
|
+
# Get a swap quote from Spectrum DEX
|
|
41
|
+
quote = toolkit.get_swap_quote(token_in="ERG", token_out="SigUSD", amount_erg=1.0)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### With a wallet (transactions enabled)
|
|
45
|
+
|
|
46
|
+
```python
|
|
47
|
+
from ergo_agent import ErgoNode, Wallet
|
|
48
|
+
from ergo_agent.tools import ErgoToolkit, SafetyConfig
|
|
49
|
+
|
|
50
|
+
node = ErgoNode(node_url="http://your-node:9053", api_key="your-key")
|
|
51
|
+
wallet = Wallet.from_node_wallet("9f...")
|
|
52
|
+
|
|
53
|
+
toolkit = ErgoToolkit(
|
|
54
|
+
node=node,
|
|
55
|
+
wallet=wallet,
|
|
56
|
+
safety=SafetyConfig(
|
|
57
|
+
max_erg_per_tx=5.0,
|
|
58
|
+
max_erg_per_day=50.0,
|
|
59
|
+
allowed_contracts=["spectrum"],
|
|
60
|
+
rate_limit_per_hour=20,
|
|
61
|
+
)
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
# Send ERG
|
|
65
|
+
toolkit.send_erg(to="9f...", amount_erg=1.5)
|
|
66
|
+
|
|
67
|
+
# Swap ERG for a token on Spectrum DEX
|
|
68
|
+
toolkit.swap_erg_for_token(token_out="SigUSD", amount_erg=1.0)
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Use with LLM frameworks
|
|
72
|
+
|
|
73
|
+
```python
|
|
74
|
+
# OpenAI function calling
|
|
75
|
+
tools = toolkit.to_openai_tools()
|
|
76
|
+
|
|
77
|
+
# Anthropic tool use
|
|
78
|
+
tools = toolkit.to_anthropic_tools()
|
|
79
|
+
|
|
80
|
+
# LangChain
|
|
81
|
+
lc_tools = toolkit.to_langchain_tools()
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Available Tools
|
|
87
|
+
|
|
88
|
+
| Tool | Description | Requires Wallet |
|
|
89
|
+
|---|---|---|
|
|
90
|
+
| `get_wallet_balance` | ERG + token balances | No |
|
|
91
|
+
| `get_erg_price` | Live ERG/USD from Oracle Pool v2 | No |
|
|
92
|
+
| `get_swap_quote` | Spectrum DEX swap quote | No |
|
|
93
|
+
| `get_mempool_status` | Pending transactions | No |
|
|
94
|
+
| `get_safety_status` | Current spending limits & usage | No |
|
|
95
|
+
| `send_erg` | Send ERG to an address | Yes |
|
|
96
|
+
| `swap_erg_for_token` | Execute a swap on Spectrum DEX | Yes |
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Architecture
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
ergo_agent/
|
|
104
|
+
├── core/ # ErgoNode client, Wallet, TransactionBuilder, Address utilities
|
|
105
|
+
├── defi/ # Oracle Pool v2, Spectrum DEX adapters
|
|
106
|
+
└── tools/ # LLM tool schemas (OpenAI / Anthropic / LangChain) + safety layer
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Safety Layer
|
|
112
|
+
|
|
113
|
+
Every state-changing action passes through `SafetyConfig` before execution:
|
|
114
|
+
|
|
115
|
+
```python
|
|
116
|
+
SafetyConfig(
|
|
117
|
+
max_erg_per_tx=10.0, # hard cap per transaction
|
|
118
|
+
max_erg_per_day=50.0, # daily rolling limit
|
|
119
|
+
allowed_contracts=["spectrum"], # contract whitelist
|
|
120
|
+
rate_limit_per_hour=20, # max 20 actions/hour
|
|
121
|
+
dry_run=False, # set True for dry-run mode
|
|
122
|
+
)
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Network
|
|
128
|
+
|
|
129
|
+
By default the SDK connects to the **Ergo public API** (`https://api.ergoplatform.com`). For production use or transaction signing, point it at your own node:
|
|
130
|
+
|
|
131
|
+
```python
|
|
132
|
+
node = ErgoNode(node_url="http://your-node:9053", api_key="your-key")
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Contributing
|
|
138
|
+
|
|
139
|
+
This is an open-source project for the Ergo ecosystem. PRs welcome.
|
|
140
|
+
|
|
141
|
+
**Roadmap:**
|
|
142
|
+
- v0.1.0 — Core + Oracle + Spectrum + Tool schemas + Safety layer *(current)*
|
|
143
|
+
- v0.2.0 — SigmaUSD + Rosen Bridge adapters
|
|
144
|
+
- v0.3.0 — Treasury contract (ErgoScript on-chain spending limits)
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## License
|
|
149
|
+
|
|
150
|
+
MIT
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# API Reference
|
|
2
|
+
|
|
3
|
+
Complete reference for all public classes and methods.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Core
|
|
8
|
+
|
|
9
|
+
### ErgoNode
|
|
10
|
+
|
|
11
|
+
::: ergo_agent.core.node.ErgoNode
|
|
12
|
+
options:
|
|
13
|
+
members:
|
|
14
|
+
- __init__
|
|
15
|
+
- get_height
|
|
16
|
+
- get_network_info
|
|
17
|
+
- get_balance
|
|
18
|
+
- get_unspent_boxes
|
|
19
|
+
- get_transaction_history
|
|
20
|
+
- get_mempool_transactions
|
|
21
|
+
- get_oracle_pool_box
|
|
22
|
+
- submit_transaction
|
|
23
|
+
- close
|
|
24
|
+
|
|
25
|
+
### Wallet
|
|
26
|
+
|
|
27
|
+
::: ergo_agent.core.wallet.Wallet
|
|
28
|
+
options:
|
|
29
|
+
members:
|
|
30
|
+
- read_only
|
|
31
|
+
- from_node_wallet
|
|
32
|
+
- from_mnemonic
|
|
33
|
+
- address
|
|
34
|
+
- sign_transaction
|
|
35
|
+
|
|
36
|
+
### TransactionBuilder
|
|
37
|
+
|
|
38
|
+
::: ergo_agent.core.builder.TransactionBuilder
|
|
39
|
+
options:
|
|
40
|
+
members:
|
|
41
|
+
- __init__
|
|
42
|
+
- send
|
|
43
|
+
- send_token
|
|
44
|
+
- add_output_raw
|
|
45
|
+
- with_input
|
|
46
|
+
- build
|
|
47
|
+
|
|
48
|
+
### Address Utilities
|
|
49
|
+
|
|
50
|
+
::: ergo_agent.core.address
|
|
51
|
+
options:
|
|
52
|
+
members:
|
|
53
|
+
- is_valid_address
|
|
54
|
+
- validate_address
|
|
55
|
+
- is_mainnet_address
|
|
56
|
+
- is_p2pk_address
|
|
57
|
+
- get_address_type
|
|
58
|
+
- address_to_ergo_tree
|
|
59
|
+
- AddressError
|
|
60
|
+
|
|
61
|
+
### Data Models
|
|
62
|
+
|
|
63
|
+
::: ergo_agent.core.models.Box
|
|
64
|
+
|
|
65
|
+
::: ergo_agent.core.models.Balance
|
|
66
|
+
|
|
67
|
+
::: ergo_agent.core.models.Token
|
|
68
|
+
|
|
69
|
+
::: ergo_agent.core.models.SwapQuote
|
|
70
|
+
|
|
71
|
+
::: ergo_agent.core.models.Transaction
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## DeFi
|
|
76
|
+
|
|
77
|
+
### OracleReader
|
|
78
|
+
|
|
79
|
+
::: ergo_agent.defi.oracle.OracleReader
|
|
80
|
+
options:
|
|
81
|
+
members:
|
|
82
|
+
- __init__
|
|
83
|
+
- get_erg_usd_price
|
|
84
|
+
- get_erg_usd_nanoerg_per_usd
|
|
85
|
+
- get_oracle_box_id
|
|
86
|
+
- get_price_history
|
|
87
|
+
|
|
88
|
+
### SpectrumDEX
|
|
89
|
+
|
|
90
|
+
::: ergo_agent.defi.spectrum.SpectrumDEX
|
|
91
|
+
options:
|
|
92
|
+
members:
|
|
93
|
+
- __init__
|
|
94
|
+
- get_pools
|
|
95
|
+
- get_erg_price_in_sigusd
|
|
96
|
+
- get_quote
|
|
97
|
+
- build_swap_order
|
|
98
|
+
- close
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Tools
|
|
103
|
+
|
|
104
|
+
### ErgoToolkit
|
|
105
|
+
|
|
106
|
+
::: ergo_agent.tools.toolkit.ErgoToolkit
|
|
107
|
+
options:
|
|
108
|
+
members:
|
|
109
|
+
- __init__
|
|
110
|
+
- get_wallet_balance
|
|
111
|
+
- get_erg_price
|
|
112
|
+
- get_swap_quote
|
|
113
|
+
- get_mempool_status
|
|
114
|
+
- get_safety_status
|
|
115
|
+
- send_erg
|
|
116
|
+
- swap_erg_for_token
|
|
117
|
+
- execute_tool
|
|
118
|
+
- to_openai_tools
|
|
119
|
+
- to_anthropic_tools
|
|
120
|
+
- to_langchain_tools
|
|
121
|
+
|
|
122
|
+
### SafetyConfig
|
|
123
|
+
|
|
124
|
+
::: ergo_agent.tools.safety.SafetyConfig
|
|
125
|
+
options:
|
|
126
|
+
members:
|
|
127
|
+
- validate_send
|
|
128
|
+
- validate_rate_limit
|
|
129
|
+
- record_action
|
|
130
|
+
- get_status
|
|
131
|
+
|
|
132
|
+
::: ergo_agent.tools.safety.SafetyViolation
|