main still called the provider Casdoor in ten places. hanzo.id is served by github.com/hanzoai/iam, which its own LICENSE states is a clean-room implementation carrying no third-party licensed source. The Casdoor-derived server was hanzoai/iam-v1, retired and no part of this stack. Every fact the text carried is kept. IAM really does stamp iss claims that openid-client rejects, which is why the NextAuth provider is type: "oauth" and why setting `issuer` breaks it; the applications really do live in the iam-init-data configmap. Only the vendor name changed. iam.py claimed a "Casdoor-compatible" flow. It is a standard flow — RFC 6749 and OIDC Core — which is what HIP-0111 requires; naming a vendor for a capability that has an RFC is what the standard exists to stop. infra/k8s/cloud-deployment.yaml is deleted rather than edited. Its env block named casdoorEndpoint / casdoorOrganization / casdoorApplication, and nothing reads them: hanzoai/cloud configures IAM through IAM_URL, IAM_MINT_CLIENT_ID and CLOUD_IAM_ISSUER, and ships no conf/. Renaming them to IAM_* would have produced config that looks live and still does nothing. The file is unreferenced by kustomization.yaml, duplicates declared state that belongs in universe (infra/k8s/cloud/), pins registry.digitalocean.com instead of ghcr.io/hanzoai, and pins a floating :latest tag that must never reach a cluster. Landed directly on main via an isolated worktree. chore/use-datastore-fork is 139/137 divergent from a history rewrite; merging it would re-import that lineage, and only two commit subjects there are genuinely absent from main. Co-authored-by: Hanzo Dev <[email protected]>
Bootnode
Web3 Backend in a Box - Run locally or deploy to cloud.
Go rewrite (HIP-0106) in progress. The current production service is the Python FastAPI app under
api/. A Go scaffold that mounts intosuperbaseper HIP-0106 lives alongside it —api/,cmd/bootnode/,schema/,zap/. Seedocs/PYTHON_TO_GO_PORT.mdfor the endpoint-by-endpoint port map and the new Go README section below.
Quick Start
docker compose up -d
Done. Your Web3 backend is running:
- API: http://localhost:8000
- Dashboard: http://localhost:3001
- API Docs: http://localhost:8000/docs
Features
| API | Description |
|---|---|
POST /v1/rpc/{chain} |
Multi-chain JSON-RPC proxy |
WS /v1/ws/{chain} |
Real-time blockchain subscriptions |
GET /v1/tokens/{chain}/balances/{address} |
Token balances & metadata |
GET /v1/nfts/{chain}/owned/{address} |
NFT ownership & metadata |
POST /v1/webhooks |
Event-driven notifications |
POST /v1/wallets/create |
ERC-4337 smart wallets |
POST /v1/bundler/{chain} |
UserOp bundling |
POST /v1/gas/sponsor |
Gas sponsorship |
Supported Chains
L1: Ethereum, BNB Chain, Avalanche, Solana, Bitcoin
L2: Arbitrum, Optimism, Base, Polygon, zkSync, Scroll, Linea, Blast
Development
# API (Python 3.12+)
cd api && uv sync && uvicorn bootnode.main:app --reload --port 8000
# Dashboard (Node 22+)
cd web && pnpm install && pnpm dev
Deploy
Self-hosted
docker compose -f docker-compose.prod.yml up -d
# or
kubectl apply -f infra/k8s/
Hanzo Cloud
hanzo deploy
Visit web3.hanzo.ai for managed hosting.
License
Apache-2.0
Go rewrite (HIP-0106)
The Go subsystem mounts into superbase (the unified Hanzo Cloud
binary). It exposes a single Mount(r chi.Router, deps api.Deps) error
entry point and a public ZAP schema (schema/bootnode.zap) covering
every cross-subsystem type.
bootnode/
schema/bootnode.zap # public typed surface (ZAP)
zap/gen/ # zapc-generated Go (hand-stubs today)
api/ # subsystem code (chi handlers + store)
mount.go # HIP-0106 contract
deps.go # IAM/KMS/Base/O11y/Commerce interfaces
handlers/ # one MountXxx per FastAPI route group
middleware/ # auth, telemetry, rate-limit
store/ # per-tenant SQLite via deps.Base
web3/ # chain registry + RPC pool
cmd/bootnode/main.go # standalone dev shim
docs/PYTHON_TO_GO_PORT.md # endpoint-by-endpoint mapping
Build
go build ./...
go vet ./...
go run ./cmd/bootnode # listens on :8100 (BOOTNODE_ADDR to override)
Generate ZAP bindings
cd zap && make gen # no-op if zapc isn't installed
zapc lives at ~/work/hanzo/zap/zapc-rs/. Brand policy: no
.capnp files, no "Cap'n Proto" references on the public surface
(HIP-0106).