zkproofport-ai
proofport-ai
Agenten-native ZK-Proof-Infrastruktur für ZKProofport. Ein eigenständiger Dienst, der Zero-Knowledge-Proofs innerhalb einer AWS Nitro Enclave mit Ende-zu-Ende-Verschlüsselung generiert und verifiziert – der Server fungiert als Blind Relay und sieht niemals die Proof-Eingaben.
Architektur
Client (AI Agent / SDK)
│
│ 1. POST /api/v1/prove → 402 { nonce, price, teePublicKey }
│ 2. Sign EIP-3009 USDC payment
│ 3. Encrypt inputs with TEE X25519 public key (ECIES)
│ 4. POST /api/v1/prove + X-Payment-TX + X-Payment-Nonce + encrypted_payload
│
▼
┌─────────────────────────────────────┐
│ Node.js Server (port 4002) │
│ ─ Verify USDC payment on-chain │
│ ─ Blind relay: pass encrypted │
│ payload to enclave via vsock │
│ ─ Return proof + TEE attestation │
└────────────┬────────────────────────┘
│ vsock
▼
┌─────────────────────────────────────┐
│ AWS Nitro Enclave │
│ ─ X25519 key pair (bound to NSM) │
│ ─ Decrypt inputs (AES-256-GCM) │
│ ─ bb prove (Barretenberg CLI) │
│ ─ NSM attestation of proof hash │
└─────────────────────────────────────┘Wichtige Eigenschaften:
E2E-Verschlüsselung — X25519 ECDH + AES-256-GCM. Im
nitro-Modus werden Klartext-Eingaben abgelehnt.Blind Relay — Der Node.js-Host kann die Proof-Eingaben nicht lesen. Nur die Enclave entschlüsselt.
x402-Zahlung — Einstufiger Ablauf: 402-Challenge → USDC-Zahlung → Proof-Generierung. Keine Middleware.
Hardware-Attestierung — Das NSM-Attestierungsdokument bindet den TEE-Public-Key an die Enclave-Messung (PCRs).
Verzeichnisstruktur
proofport-ai/
├── src/
│ ├── index.ts # Express server entry (port 4002)
│ ├── logger.ts # Pino logger
│ ├── swagger.ts # OpenAPI spec
│ ├── tracing.ts # OpenTelemetry tracing
│ ├── a2a/
│ │ ├── agentCard.ts # /.well-known/agent.json, agent-card.json
│ │ ├── proofportExecutor.ts # A2A task executor
│ │ └── redisTaskStore.ts # Redis-backed task persistence
│ ├── chat/
│ │ ├── geminiClient.ts # Gemini API client
│ │ ├── llmProvider.ts # LLM provider interface
│ │ ├── multiProvider.ts # Multi-provider routing
│ │ └── openaiClient.ts # OpenAI API client
│ ├── circuit/
│ │ └── artifactManager.ts # Circuit artifact download/cache
│ ├── config/
│ │ ├── index.ts # Environment config
│ │ ├── circuits.ts # Circuit metadata
│ │ └── contracts.ts # Deployed contract addresses
│ ├── identity/
│ │ ├── agentAuth.ts # Agent JWT authentication
│ │ ├── autoRegister.ts # ERC-8004 auto-registration
│ │ ├── register.ts # Identity registration
│ │ └── reputation.ts # Reputation management
│ ├── input/
│ │ ├── attestationFetcher.ts # EAS GraphQL attestation fetch
│ │ ├── inputBuilder.ts # Circuit input construction
│ │ └── merkleTree.ts # Merkle tree builder
│ ├── mcp/
│ │ ├── server.ts # StreamableHTTP MCP server
│ │ └── stdio.ts # stdio MCP server (local use)
│ ├── payment/
│ │ └── freeTier.ts # Payment mode config
│ ├── proof/
│ │ ├── proofRoutes.ts # x402 single-step proof API
│ │ ├── guideBuilder.ts # Dynamic proof generation guide
│ │ ├── paymentVerifier.ts # On-chain USDC payment verification
│ │ ├── sessionManager.ts # Proof session/nonce management
│ │ └── types.ts
│ ├── prover/
│ │ ├── bbProver.ts # bb CLI direct prover
│ │ ├── tomlBuilder.ts # Prover.toml builder
│ │ └── verifier.ts # On-chain verification (ethers v6)
│ ├── redis/
│ │ ├── client.ts # Redis client
│ │ ├── cleanupWorker.ts # Expired data cleanup
│ │ ├── constants.ts # Redis key prefixes
│ │ ├── proofCache.ts # Proof result caching
│ │ ├── proofResultStore.ts # Proof result persistence
│ │ └── rateLimiter.ts # Rate limiting
│ ├── skills/
│ │ ├── skillHandler.ts # Skill routing
│ │ └── flowGuidance.ts # Step-by-step flow guidance
│ ├── tee/
│ │ ├── index.ts # TEE mode config
│ │ ├── attestation.ts # NSM attestation validation (COSE Sign1)
│ │ ├── detect.ts # TEE environment detection
│ │ ├── enclaveBuilder.ts # Enclave image builder
│ │ ├── enclaveClient.ts # Nitro Enclave vsock client
│ │ ├── encryption.ts # AES-256-GCM encryption utilities
│ │ ├── teeKeyExchange.ts # X25519 ECDH key exchange
│ │ └── validationSubmitter.ts # TEE validation on-chain
│ └── types/
│ └── index.ts
├── packages/
│ ├── sdk/ # @zkproofport-ai/sdk (npm)
│ └── mcp/ # @zkproofport-ai/mcp (npm)
├── aws/
│ ├── enclave-server.ts # TypeScript TEE prover (Nitro Enclave)
│ ├── Dockerfile.enclave # Enclave image
│ ├── deploy-blue-green.sh # Zero-downtime deployment
│ ├── boot-active-slot.sh # Systemd boot script
│ ├── stop-active-slot.sh # Systemd stop script
│ ├── build-enclave.sh # Enclave build helper
│ ├── ec2-setup.sh # EC2 instance setup
│ ├── Caddyfile # Reverse proxy config
│ ├── docker-compose.aws.yml # AWS Docker Compose
│ ├── vsock-bridge.py # vsock-to-TCP bridge
│ └── systemd/ # Systemd service files
├── sign-page/ # Next.js signing page (WalletConnect)
├── tests/
│ ├── e2e/ # Full E2E tests (REST, MCP, A2A, proof, verify)
│ ├── a2a/ # A2A unit tests
│ ├── identity/ # ERC-8004 identity tests
│ ├── integration/ # Integration tests
│ ├── payment/ # Payment tests
│ ├── tee/ # TEE tests
│ └── *.test.ts # Unit tests
├── docker-compose.yml # Local dev: server + redis
├── docker-compose.test.yml # Test stack: + a2a-ui + Phoenix
├── Dockerfile # Node.js server image
└── README.mdSchnellstart
npm (Entwicklung)
npm install
npm run dev # Hot reload with tsx
npm run build # Build TypeScript
npm start # Production
npm test # Run tests
npm run test:e2e # E2E tests against Docker stackDocker Compose (Lokal)
docker compose up --build # Start redis + server
docker compose down # Stop
docker compose down -v # Reset dataPort 4002: Node.js-Server
Port 6380 (Host) → 6379 (Container): Redis
E2E-Verschlüsselung (Blind Relay)
Proof-Eingaben sind zwischen dem Client und der Nitro Enclave Ende-zu-Ende verschlüsselt. Der Node.js-Server leitet das verschlüsselte Blob weiter, ohne es zu lesen.
Protokoll: X25519 ECDH + AES-256-GCM (ECIES-Muster)
TEE generiert beim Start ein X25519-Schlüsselpaar und bindet den Public Key an die NSM-Attestierung
Client ruft den TEE-Public-Key aus der 402-Antwort ab und verifiziert die Attestierung
Client generiert ein ephemeres X25519-Schlüsselpaar, berechnet das ECDH-Shared-Secret und leitet den AES-Key via SHA-256 ab
Client verschlüsselt Eingaben mit AES-256-GCM und sendet
{ ephemeralPublicKey, iv, ciphertext, authTag, keyId }Server leitet das verschlüsselte Paket via vsock an die Enclave weiter (Blind Relay)
Enclave entschlüsselt, generiert den Proof und gibt Proof + NSM-Attestierung zurück
Durchsetzung: Im nitro-Modus werden Klartext-Eingaben mit PLAINTEXT_REJECTED abgelehnt.
x402-Zahlungsablauf
Einstufiger atomarer Ablauf — keine Middleware, keine Sitzungen:
POST /api/v1/prove { circuit, inputs }
↓
402 { nonce, price, payTo, teePublicKey }
↓
Client signs EIP-3009 TransferWithAuthorization (USDC)
↓
POST /api/v1/prove { circuit, encrypted_payload }
+ X-Payment-TX: <txHash>
+ X-Payment-Nonce: <nonce>
↓
200 { proof, publicInputs, proofWithInputs, attestation, timing, verification }Zahlungsmodi:
Modus | Netzwerk | Effekt |
| Keine | Alle Anfragen kostenlos |
| Base Sepolia | Erfordert USDC-Zahlung (Testnetz) |
| Base Mainnet | Erfordert USDC-Zahlung (Produktion) |
REST-Endpunkte
Endpunkt | Methode | Zweck |
| GET | Gesundheitsprüfung + TEE-Status + Zahlungsmodus |
| POST | x402 einstufige Proof-Generierung |
| GET | Dynamischer Leitfaden zur Proof-Generierung (JSON) |
| POST | StreamableHTTP MCP-Endpunkt |
| POST | A2A JSON-RPC-Endpunkt |
| GET | OASF Agent Card |
| GET | A2A Agent Card |
| GET | MCP-Discovery |
| GET | Swagger UI |
| GET | OpenAPI-Spezifikation |
MCP-Tools
Verfügbar via /mcp (StreamableHTTP) oder das lokale @zkproofport-ai/mcp-Paket (stdio):
Tool | Zweck |
| All-in-One Proof-Generierung (x402-Zahlung + E2E-Verschlüsselungserkennung) |
| On-Chain Proof-Verifizierung |
| Liste verfügbarer Schaltkreise |
| 402-Challenge anfordern (schrittweiser Ablauf) |
| x402 USDC-Zahlung tätigen (schrittweiser Ablauf) |
| Proof-Eingaben übermitteln (schrittweiser Ablauf) |
| Schaltkreis-Eingaben vorbereiten (schrittweiser Ablauf) |
npm-Pakete
@zkproofport-ai/sdk — TypeScript SDK for proof generation (ethers v6)
@zkproofport-ai/mcp — Local MCP server for AI agents (stdio transport)Installieren Sie den MCP-Server für die lokale Nutzung durch KI-Agenten:
npm install @zkproofport-ai/mcp
npx zkproofport-mcp # Starts stdio MCP serverLeitfadensystem
GET /api/v1/guide/:circuit gibt einen umfassenden JSON-Leitfaden für Client-KI-Agenten zurück, um alle Proof-Eingaben vorzubereiten. Enthält:
Schritt-für-Schritt-Anleitungen mit Codebeispielen
Konstanten (Attester-Keys, Vertragsadressen, EAS-Schema-UIDs)
Formeln (Nullifier-Berechnung, Signal-Hash, Merkle-Tree-Konstruktion)
Eingabeschema mit Typen und Beschreibungen
EAS GraphQL-Abfragevorlagen
Schaltkreise verwenden Aliase: coinbase_kyc → coinbase_attestation, coinbase_country → coinbase_country_attestation, oidc_domain → oidc_domain_attestation.
A2A-Protokoll
A2A v0.3 JSON-RPC-Endpunkt unter POST /a2a:
Methode | Zweck |
| Proof-Aufgabe übermitteln (blockierend) |
| Proof-Aufgabe übermitteln (SSE-Streaming) |
| Aufgabenstatus abfragen |
| Laufende Aufgabe abbrechen |
| Ereignisse einer Aufgabe erneut abonnieren |
Die Agent Card unter /.well-known/agent.json bietet ERC-8004 On-Chain-Identität und Capability-Discovery.
TEE-Integration (AWS Nitro Enclave)
Modus | Verhalten |
| Standard-Linux, kein TEE, Klartext erlaubt |
| AWS Nitro Enclave, Hardware-Attestierung, E2E-Verschlüsselung erzwungen |
Die Enclave führt aws/enclave-server.ts aus (kompiliert zu dist/aws/enclave-server.js), welches bb prove mit --oracle_hash keccak ausführt (erforderlich für die Kompatibilität mit dem Solidity-Verifier). Die NSM-Attestierung bindet den Proof-Hash und den TEE-Public-Key an die Enclave-Messung (PCR0/PCR1/PCR2).
Attestierungs-Validierungskette: AWS Nitro Root CA → Regional → Zonal → Instanz → Leaf-Zertifikat, verifiziert mit COSE ES384-Signatur.
Unterstützte Schaltkreise
Coinbase KYC (coinbase_attestation)
Beweist, dass der Inhaber die Coinbase KYC-Verifizierung bestanden hat.
Aliase:
coinbase_kyc,coinbase_attestationÖffentliche Eingaben: Adresse, Scope
Nullifier: Ja (Privatsphäre, Replay-Schutz)
Coinbase Country (coinbase_country_attestation)
Beweist, dass das KYC-Land des Inhabers mit der Attestierung übereinstimmt.
Aliase:
coinbase_country,coinbase_country_attestationÖffentliche Eingaben: Adresse, Land, Scope
Nullifier: Ja (Privatsphäre, Replay-Schutz)
OIDC Domain (oidc_domain_attestation)
Beweist, dass der Inhaber eine E-Mail-Adresse bei einer bestimmten Domain über OIDC JWT-Verifizierung besitzt.
Aliase:
oidc_domain,oidc_domain_attestationEingabetyp: OIDC JWT (
id_tokenvon Google, etc.)Öffentliche Eingaben: Domain-Hash, Scope
Nullifier: Ja (Privatsphäre, Replay-Schutz)
Vertragsadressen
Base Sepolia (Testnetz)
Vertrag | Adresse |
KYC Verifier |
|
Country Verifier |
|
ERC-8004 Identity |
|
ERC-8004 Reputation |
|
Base Mainnet (Produktion)
Vertrag | Adresse |
ERC-8004 Identity |
|
ERC-8004 Reputation |
|
ERC-8004 Agenten-Identität
Der Agent registriert sich beim Start automatisch On-Chain über den ERC-8004 Identity-Vertrag. Der Reputationswert erhöht sich nach jeder erfolgreichen Proof-Generierung.
Umgebungsvariablen
Erforderlich
Variable | Beschreibung |
| Redis-Verbindungszeichenfolge |
| Base-Chain RPC-Endpunkt |
| RPC für Proof-Verifizierung |
| EAS GraphQL-Endpunkt für Attestierungsabfragen |
| Privater Schlüssel des Agenten-Wallets (64 Hex-Zeichen, kein 0x) |
|
|
| Öffentlich zugängliche Dienst-URL (für Agent Card) |
Optional
Variable | Standard | Beschreibung |
|
| Express-Server-Port |
|
| Node-Umgebung |
|
| Barretenberg CLI-Pfad |
|
| Nargo CLI-Pfad |
|
| Verzeichnis für Schaltkreis-Artefakte |
| (GitHub raw URL) | Download-URL für Schaltkreis-Artefakte |
|
|
|
| — | Nitro Enclave CID (erforderlich bei |
|
| Nitro Enclave-Port |
|
| Attestierungsverifizierung aktivieren |
| — | Operator-Wallet (erforderlich bei aktivierter Zahlung) |
|
| Preis pro Proof (USD) |
| — | ERC-8004 Identity-Vertrag |
| — | ERC-8004 Reputation-Vertrag |
| — | Gemini API-Key für Chat |
| — | OpenAI API-Key für Chat |
| — | Phoenix OTLP-Endpunkt für Tracing |
|
| Agenten-Versionszeichenfolge |
Bereitstellung (AWS Nitro Enclave)
proofport-ai wird auf AWS EC2 mit Nitro Enclave-Unterstützung bereitgestellt. Die Bereitstellung verwendet Blue-Green-Slot-Switching für null Ausfallzeit.
Blue-Green-Bereitstellung
aws/deploy-blue-green.shZwei Slots: Blau (Ports 4002/3200) und Grün (Ports 4003/3201)
Aktiver Slot wird in
/opt/proofport-ai/active-slotverfolgtCaddy-Reload (kein Neustart) schaltet den Datenverkehr um
In-Flight-Anfragen werden vor dem Umschalten geleert (bis zu 660s für Proof-Generierung)
Automatischer Rollback, wenn die Gesundheitsprüfung des neuen Containers fehlschlägt
Infrastruktur
Caddy — Reverse Proxy mit HTTPS (Cloudflare Full SSL)
systemd — Dienste:
proofport-ai,proofport-ai-redis,proofport-ai-enclave,vsock-bridgeCloudWatch — Log-Treiber
awslogs, 30 Tage AufbewahrungGitHub Actions —
deploy-ai-aws.ymlWorkflow (NICHTdeploy.yml, welcher für GCP ist)
Start / Stopp
aws/boot-active-slot.sh # Start active slot containers
aws/stop-active-slot.sh # Stop active slot containersTesten
npm test # Unit tests
npm run test:e2e # E2E against Docker stack
npm run test:watch # Watch modeA2A-Testen (a2a-ui + Phoenix)
docker compose -f docker-compose.yml -f docker-compose.test.yml up --build -dDienst | URL | Zweck |
proofport-ai |
| Agenten-Server |
a2a-ui |
| A2A-Web-Test-UI |
Phoenix |
| Trace-Visualisierung |
Versionssperren
Tool | Version |
bb (Barretenberg) |
|
nargo |
|
ethers |
|
@modelcontextprotocol/sdk |
|
Node.js | 20 LTS |
Lizenz
Apache 2.0
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/zkproofport/proofport-ai'
If you have feedback or need assistance with the MCP directory API, please join our Discord server