mirror of
https://github.com/hanzoai/bootnode.git
synced 2026-09-30 20:46:32 +00:00
Settings() raised SettingsError constructing ALLOWED_ORIGINS. The field is declared list[str] and documented "comma-separated in env", but pydantic-settings decodes complex types from the environment as JSON before any validator runs, so the plain `a,b,c` that every Deployment manifest, .env and compose file writes was fatal — not a bad value, an unconstructable Settings. That made every route depending on it 500: require_admin builds an IAMClient, which calls get_settings(). The lux.cloud fleet overview returned HTTP 500 the moment the admin gate shipped, and the failure was in the gate, nowhere near the collector it guarded. NoDecode hands the raw string to one validator that splits it, for both list settings. One variable, one format, decided in one place. Co-authored-by: Hanzo Dev <[email protected]>
Hanzo Nodes API
Multi-chain blockchain infrastructure platform providing RPC, APIs, WebSockets, Webhooks, and ERC-4337 bundling.
Features
- Multi-Chain RPC: 100+ EVM chains with load balancing
- Token API: ERC-20 balances, transfers, prices
- NFT API: ERC-721/1155 ownership, metadata, transfers
- Wallet API: Portfolio tracking, activity history
- WebSocket Subscriptions: Real-time blockchain events
- Webhooks: Event notifications with delivery tracking
- ERC-4337 Bundler: Account abstraction with gasless transactions
- Gas API: Real-time gas estimates and EIP-1559 data
Quick Start
# Start dependencies
docker compose up -d postgres redis clickhouse
# Run API locally
uv run uvicorn bootnode.main:app --reload
# Or with Docker
docker compose up -d
API Endpoints
GET /health- Health checkPOST /v1/rpc/{chain}/{network}- JSON-RPC proxyGET /v1/tokens/{chain}/balance/{address}- Token balancesGET /v1/nfts/{chain}/owner/{address}- NFT ownershipPOST /v1/webhooks- Create webhookWS /v1/ws/{chain}/{network}- WebSocket subscriptions
Environment Variables
DATABASE_URL=postgresql+asyncpg://...
REDIS_URL=redis://...
DATASTORE_URL=clickhouse://...
JWT_SECRET=...
Documentation
- API Docs: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
License
BSD-3-Clause