Robotics proof-of-execution SDK
Project description
ACTO
Robotics-first proof-of-execution toolkit.
Generate deterministic, signed execution proofs from robot telemetry and logs. Verify proofs locally or via API. Fast, gas-free verification.
๐ Links
| ๐ Website | actobotics.net |
| ๐ Dashboard | api.actobotics.net/dashboard |
| ๐ฆ X (Twitter) | @actoboticsnet |
| ๐ API Docs | docs/API.md |
| ๐ฆ PyPI | pypi.org/project/actobotics |
โจ Features
- Python SDK - Create and verify execution proofs
- Local Registry - SQLite-based proof storage
- REST API - FastAPI verification service
- Multi-Wallet Dashboard - Phantom, Solflare, Backpack, Glow, Coinbase
- Fleet Management - Monitor and organize your robot fleet
- Token Gating - SPL token balance checks (off-chain)
- Async Support - Full async/await API
- CLI Tools - Interactive mode, shell completion
๐ Quick Start
Install the SDK
pip install actobotics
That's it! The SDK connects to the hosted API at api.actobotics.net.
Optional Dependencies
# With Solana integration
pip install actobotics[solana]
# With all optional features (Solana, Redis, ROS, etc.)
pip install actobotics[full]
Basic Usage
# Generate keypair
acto keys generate
# Create proof from telemetry
acto proof create \
--task-id "task-001" \
--source examples/telemetry/sample_telemetry.jsonl
# Verify locally
acto proof verify --proof my_proof.json
๐ฆ SDK Usage
from acto.proof import create_proof, verify_proof
from acto.telemetry.models import TelemetryBundle, TelemetryEvent
from acto.crypto import KeyPair
# Generate keypair
keypair = KeyPair.generate()
# Create telemetry bundle
bundle = TelemetryBundle(
task_id="task-001",
robot_id="robot-001",
events=[TelemetryEvent(ts="2025-01-01T00:00:00Z", topic="sensor", data={"value": 42})]
)
# Create and verify proof
envelope = create_proof(bundle, keypair.private_key_b64, keypair.public_key_b64)
is_valid = verify_proof(envelope)
๐ API Access
Use the hosted API at https://api.actobotics.net:
- Get an API Key at api.actobotics.net/dashboard
- Connect your Solana wallet (requires 50,000 ACTO tokens)
- Make API calls:
curl -X POST https://api.actobotics.net/v1/proofs \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "X-Wallet-Address: YOUR_WALLET" \
-H "Content-Type: application/json" \
-d '{"envelope": {...}}'
API Endpoints
| Endpoint | Description |
|---|---|
POST /v1/proofs |
Submit a proof |
GET /v1/proofs |
List proofs |
POST /v1/proofs/search |
Search & filter proofs |
POST /v1/verify |
Verify a proof |
POST /v1/verify/batch |
Batch verify proofs |
GET /v1/stats/wallet/{addr} |
Wallet statistics |
POST /v1/access/check |
Check token balance |
GET /v1/fleet |
Fleet overview |
GET /v1/fleet/devices/{id} |
Device details |
GET /v1/fleet/groups |
List device groups |
๐ Full API documentation: docs/API.md
๐ค Fleet Management
Monitor and manage your robot fleet from the dashboard:
- Device Overview - See all devices with status and activity
- Custom Names - Rename devices for easy identification
- Device Groups - Organize robots (e.g., "Warehouse A", "Production Line")
- Health Monitoring - CPU, RAM, battery status (optional)
- Activity Logs - View complete proof history per device
# Report device health (all fields optional)
import httpx
httpx.post(
"https://api.actobotics.net/v1/fleet/devices/robot-001/health",
headers={"Authorization": f"Bearer {JWT_TOKEN}"},
json={
"cpu_percent": 45.2,
"memory_percent": 68.0,
"battery_percent": 85.0
}
)
๐ Token Gating
Check SPL token balance for access control (off-chain, gas-free):
acto access check \
--rpc https://api.mainnet-beta.solana.com \
--owner WALLET_ADDRESS \
--mint TOKEN_MINT \
--minimum 50000
๐ Documentation
| Document | Description |
|---|---|
| API.md | REST API reference |
| ARCHITECTURE.md | System architecture |
| PROTOCOL.md | Proof protocol specification |
| SECURITY.md | Security features & configuration |
| THREAT_MODEL.md | Security threat model |
| CHANGELOG.md | Version history & release notes |
| CONTRIBUTING.md | Contribution guidelines |
๐ ๏ธ Self-Hosted Setup (Contributors)
Click to expand self-hosted installation instructions
If you want to run your own ACTO server or contribute to development:
Clone & Install
git clone https://github.com/actobotics/ACTO.git
cd ACTO
# Install with all dependencies including server
pip install -e ".[dev]"
Run the Server
# Start API server
acto server run
# Or with uvicorn directly
uvicorn acto_server.app:app --reload --port 8080
Run Tests
# Run tests
pytest
# Run with coverage
pytest --cov=acto --cov-report=html
# Load tests
locust -f tests/load/locustfile.py
Docker
# Run with docker-compose
docker-compose up -d
# Or build manually
docker build -t acto .
docker run -p 8080:8080 acto
Project Structure
ACTO/
โโโ acto/ # SDK (published to PyPI)
โ โโโ proof/ # Proof creation & verification
โ โโโ crypto/ # Keys, signing, hashing
โ โโโ telemetry/ # Telemetry parsing & normalization
โ โโโ registry/ # Local proof storage
โ โโโ ...
โโโ acto_cli/ # CLI tools (published to PyPI)
โโโ acto_server/ # FastAPI server (NOT published)
โโโ api/ # Vercel serverless functions
โโโ tests/ # Test suite
โโโ docs/ # Documentation
๐ License
MIT. See LICENSE.
Website โข Dashboard โข X (Twitter) โข PyPI
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file actobotics-0.5.22.tar.gz.
File metadata
- Download URL: actobotics-0.5.22.tar.gz
- Upload date:
- Size: 65.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
603585536c189a4f38411adaf10bbdde3a8b3c3c3301cf88907f34ea9bd01a85
|
|
| MD5 |
ef907bafb301c64f7dc616e4dcc5ff28
|
|
| BLAKE2b-256 |
05851f6eaaa05a7f607c462d54bf96b7db43ae05107354709f047a36535604a7
|
Provenance
The following attestation bundles were made for actobotics-0.5.22.tar.gz:
Publisher:
publish.yml on actobotics/ACTO
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
actobotics-0.5.22.tar.gz -
Subject digest:
603585536c189a4f38411adaf10bbdde3a8b3c3c3301cf88907f34ea9bd01a85 - Sigstore transparency entry: 774557245
- Sigstore integration time:
-
Permalink:
actobotics/ACTO@f410bfbb0825d09f1e5ec7087118040e8666bdb5 -
Branch / Tag:
refs/tags/v0.5.22 - Owner: https://github.com/actobotics
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f410bfbb0825d09f1e5ec7087118040e8666bdb5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file actobotics-0.5.22-py3-none-any.whl.
File metadata
- Download URL: actobotics-0.5.22-py3-none-any.whl
- Upload date:
- Size: 82.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ab3f37e38e0c99ceda75a36d9074447d9ce4c49aefeaa478c0d8c47cbf41cfa
|
|
| MD5 |
c11ed694c9962be232ca58da3117058b
|
|
| BLAKE2b-256 |
c35bfbffa94b88d83af59a278fb35146e5350e77ba7a6740c7a061cf42f8539b
|
Provenance
The following attestation bundles were made for actobotics-0.5.22-py3-none-any.whl:
Publisher:
publish.yml on actobotics/ACTO
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
actobotics-0.5.22-py3-none-any.whl -
Subject digest:
9ab3f37e38e0c99ceda75a36d9074447d9ce4c49aefeaa478c0d8c47cbf41cfa - Sigstore transparency entry: 774557250
- Sigstore integration time:
-
Permalink:
actobotics/ACTO@f410bfbb0825d09f1e5ec7087118040e8666bdb5 -
Branch / Tag:
refs/tags/v0.5.22 - Owner: https://github.com/actobotics
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f410bfbb0825d09f1e5ec7087118040e8666bdb5 -
Trigger Event:
push
-
Statement type: