Skip to main content
Glama

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.md

Schnellstart

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 stack

Docker Compose (Lokal)

docker compose up --build     # Start redis + server
docker compose down           # Stop
docker compose down -v        # Reset data
  • Port 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)

  1. TEE generiert beim Start ein X25519-Schlüsselpaar und bindet den Public Key an die NSM-Attestierung

  2. Client ruft den TEE-Public-Key aus der 402-Antwort ab und verifiziert die Attestierung

  3. Client generiert ein ephemeres X25519-Schlüsselpaar, berechnet das ECDH-Shared-Secret und leitet den AES-Key via SHA-256 ab

  4. Client verschlüsselt Eingaben mit AES-256-GCM und sendet { ephemeralPublicKey, iv, ciphertext, authTag, keyId }

  5. Server leitet das verschlüsselte Paket via vsock an die Enclave weiter (Blind Relay)

  6. 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

disabled

Keine

Alle Anfragen kostenlos

testnet

Base Sepolia

Erfordert USDC-Zahlung (Testnetz)

mainnet

Base Mainnet

Erfordert USDC-Zahlung (Produktion)

REST-Endpunkte

Endpunkt

Methode

Zweck

/health

GET

Gesundheitsprüfung + TEE-Status + Zahlungsmodus

/api/v1/prove

POST

x402 einstufige Proof-Generierung

/api/v1/guide/:circuit

GET

Dynamischer Leitfaden zur Proof-Generierung (JSON)

/mcp

POST

StreamableHTTP MCP-Endpunkt

/a2a

POST

A2A JSON-RPC-Endpunkt

/.well-known/agent.json

GET

OASF Agent Card

/agent-card.json

GET

A2A Agent Card

/.well-known/mcp.json

GET

MCP-Discovery

/docs

GET

Swagger UI

/openapi.json

GET

OpenAPI-Spezifikation

MCP-Tools

Verfügbar via /mcp (StreamableHTTP) oder das lokale @zkproofport-ai/mcp-Paket (stdio):

Tool

Zweck

generate_proof

All-in-One Proof-Generierung (x402-Zahlung + E2E-Verschlüsselungserkennung)

verify_proof

On-Chain Proof-Verifizierung

get_supported_circuits

Liste verfügbarer Schaltkreise

request_challenge

402-Challenge anfordern (schrittweiser Ablauf)

make_payment

x402 USDC-Zahlung tätigen (schrittweiser Ablauf)

submit_proof

Proof-Eingaben übermitteln (schrittweiser Ablauf)

prepare_inputs

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 server

Leitfadensystem

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_kyccoinbase_attestation, coinbase_countrycoinbase_country_attestation, oidc_domainoidc_domain_attestation.

A2A-Protokoll

A2A v0.3 JSON-RPC-Endpunkt unter POST /a2a:

Methode

Zweck

message/send

Proof-Aufgabe übermitteln (blockierend)

message/stream

Proof-Aufgabe übermitteln (SSE-Streaming)

tasks/get

Aufgabenstatus abfragen

tasks/cancel

Laufende Aufgabe abbrechen

tasks/resubscribe

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

disabled

Standard-Linux, kein TEE, Klartext erlaubt

nitro

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_attestation

  • Eingabetyp: OIDC JWT (id_token von Google, etc.)

  • Öffentliche Eingaben: Domain-Hash, Scope

  • Nullifier: Ja (Privatsphäre, Replay-Schutz)

Vertragsadressen

Base Sepolia (Testnetz)

Vertrag

Adresse

KYC Verifier

0x0036B61dBFaB8f3CfEEF77dD5D45F7EFBFE2035c

Country Verifier

0xdEe363585926c3c28327Efd1eDd01cf4559738cf

ERC-8004 Identity

0x8004A818BFB912233c491871b3d84c89A494BD9e

ERC-8004 Reputation

0x8004B663056A597Dffe9eCcC1965A193B7388713

Base Mainnet (Produktion)

Vertrag

Adresse

ERC-8004 Identity

0x8004A169FB4a3325136EB29fA0ceB6D2e539a432

ERC-8004 Reputation

0x8004BAa17C55a88189AE136b182e5fdA19dE9b63

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_URL

Redis-Verbindungszeichenfolge

BASE_RPC_URL

Base-Chain RPC-Endpunkt

CHAIN_RPC_URL

RPC für Proof-Verifizierung

EAS_GRAPHQL_ENDPOINT

EAS GraphQL-Endpunkt für Attestierungsabfragen

PROVER_PRIVATE_KEY

Privater Schlüssel des Agenten-Wallets (64 Hex-Zeichen, kein 0x)

PAYMENT_MODE

disabled / testnet / mainnet

A2A_BASE_URL

Öffentlich zugängliche Dienst-URL (für Agent Card)

Optional

Variable

Standard

Beschreibung

PORT

4002

Express-Server-Port

NODE_ENV

development

Node-Umgebung

BB_PATH

bb

Barretenberg CLI-Pfad

NARGO_PATH

nargo

Nargo CLI-Pfad

CIRCUITS_DIR

/app/circuits

Verzeichnis für Schaltkreis-Artefakte

CIRCUITS_REPO_URL

(GitHub raw URL)

Download-URL für Schaltkreis-Artefakte

TEE_MODE

disabled

disabled / nitro

ENCLAVE_CID

Nitro Enclave CID (erforderlich bei TEE_MODE=nitro)

ENCLAVE_PORT

5000

Nitro Enclave-Port

TEE_ATTESTATION

false

Attestierungsverifizierung aktivieren

PAYMENT_PAY_TO

Operator-Wallet (erforderlich bei aktivierter Zahlung)

PAYMENT_PROOF_PRICE

$0.10

Preis pro Proof (USD)

ERC8004_IDENTITY_ADDRESS

ERC-8004 Identity-Vertrag

ERC8004_REPUTATION_ADDRESS

ERC-8004 Reputation-Vertrag

GEMINI_API_KEY

Gemini API-Key für Chat

OPENAI_API_KEY

OpenAI API-Key für Chat

PHOENIX_COLLECTOR_ENDPOINT

Phoenix OTLP-Endpunkt für Tracing

AGENT_VERSION

1.0.0

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.sh
  • Zwei Slots: Blau (Ports 4002/3200) und Grün (Ports 4003/3201)

  • Aktiver Slot wird in /opt/proofport-ai/active-slot verfolgt

  • Caddy-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-bridge

  • CloudWatch — Log-Treiber awslogs, 30 Tage Aufbewahrung

  • GitHub Actionsdeploy-ai-aws.yml Workflow (NICHT deploy.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 containers

Testen

npm test                # Unit tests
npm run test:e2e        # E2E against Docker stack
npm run test:watch      # Watch mode

A2A-Testen (a2a-ui + Phoenix)

docker compose -f docker-compose.yml -f docker-compose.test.yml up --build -d

Dienst

URL

Zweck

proofport-ai

http://localhost:4002

Agenten-Server

a2a-ui

http://localhost:3001

A2A-Web-Test-UI

Phoenix

http://localhost:6006

Trace-Visualisierung

Versionssperren

Tool

Version

bb (Barretenberg)

v1.0.0-nightly.20250723

nargo

1.0.0-beta.8

ethers

^6.13.0

@modelcontextprotocol/sdk

^1.0.0

Node.js

20 LTS

Lizenz

Apache 2.0

Install Server
A
security – no known vulnerabilities
F
license - not found
A
quality - A tier

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