Skip to main content
Glama

proofport-ai

Infraestructura de pruebas ZK nativa para agentes de ZKProofport. Un servicio independiente que genera y verifica pruebas de conocimiento cero dentro de un AWS Nitro Enclave con cifrado de extremo a extremo: el servidor actúa como un repetidor ciego y nunca ve las entradas de la prueba.

Arquitectura

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   │
└─────────────────────────────────────┘

Propiedades clave:

  • Cifrado E2E — X25519 ECDH + AES-256-GCM. En modo nitro, las entradas en texto plano son rechazadas.

  • Repetidor ciego — El host de Node.js no puede leer las entradas de la prueba. Solo el enclave descifra.

  • Pago x402 — Flujo de un solo paso: desafío 402 → pago en USDC → generación de prueba. Sin middleware.

  • Atestación de hardware — El documento de atestación NSM vincula la clave pública TEE a la medición del enclave (PCRs).

Estructura de directorios

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

Inicio rápido

npm (Desarrollo)

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 (Local)

docker compose up --build     # Start redis + server
docker compose down           # Stop
docker compose down -v        # Reset data
  • Puerto 4002: Servidor Node.js

  • Puerto 6380 (host) → 6379 (contenedor): Redis

Cifrado E2E (Repetidor ciego)

Las entradas de la prueba están cifradas de extremo a extremo entre el cliente y el Nitro Enclave. El servidor Node.js pasa el blob cifrado sin leerlo.

Protocolo: X25519 ECDH + AES-256-GCM (patrón ECIES)

  1. TEE genera un par de claves X25519 al inicio, vincula la clave pública a la atestación NSM

  2. El cliente obtiene la clave pública TEE de la respuesta 402, verifica la atestación

  3. El cliente genera un par de claves X25519 efímeras, calcula el secreto compartido ECDH, deriva la clave AES mediante SHA-256

  4. El cliente cifra las entradas con AES-256-GCM, envía { ephemeralPublicKey, iv, ciphertext, authTag, keyId }

  5. El servidor pasa el sobre cifrado al enclave a través de vsock (repetidor ciego)

  6. El enclave descifra, genera la prueba, devuelve la prueba + atestación NSM

Cumplimiento: En modo nitro, las entradas en texto plano son rechazadas con PLAINTEXT_REJECTED.

Flujo de pago x402

Flujo atómico de un solo paso: sin middleware, sin sesiones:

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 }

Modos de pago:

Modo

Red

Efecto

disabled

Ninguna

Todas las solicitudes son gratuitas

testnet

Base Sepolia

Requiere pago en USDC (testnet)

mainnet

Base Mainnet

Requiere pago en USDC (producción)

Endpoints REST

Endpoint

Método

Propósito

/health

GET

Verificación de estado + estado TEE + modo de pago

/api/v1/prove

POST

Generación de prueba x402 de un solo paso

/api/v1/guide/:circuit

GET

Guía dinámica de generación de pruebas (JSON)

/mcp

POST

Endpoint MCP StreamableHTTP

/a2a

POST

Endpoint A2A JSON-RPC

/.well-known/agent.json

GET

Tarjeta de agente OASF

/agent-card.json

GET

Tarjeta de agente A2A

/.well-known/mcp.json

GET

Descubrimiento MCP

/docs

GET

Swagger UI

/openapi.json

GET

Especificación OpenAPI

Herramientas MCP

Disponibles a través de /mcp (StreamableHTTP) o el paquete local @zkproofport-ai/mcp (stdio):

Herramienta

Propósito

generate_proof

Generación de prueba todo en uno (pago x402 + detección automática de cifrado E2E)

verify_proof

Verificación de prueba en cadena

get_supported_circuits

Listar circuitos disponibles

request_challenge

Solicitar desafío 402 (flujo paso a paso)

make_payment

Realizar pago x402 en USDC (flujo paso a paso)

submit_proof

Enviar entradas de prueba (flujo paso a paso)

prepare_inputs

Preparar entradas de circuito (flujo paso a paso)

Paquetes npm

@zkproofport-ai/sdk   — TypeScript SDK for proof generation (ethers v6)
@zkproofport-ai/mcp   — Local MCP server for AI agents (stdio transport)

Instale el servidor MCP para uso local del agente de IA:

npm install @zkproofport-ai/mcp
npx zkproofport-mcp    # Starts stdio MCP server

Sistema de guía

GET /api/v1/guide/:circuit devuelve una guía JSON completa para que los agentes de IA clientes preparen todas las entradas de la prueba. Incluye:

  • Instrucciones paso a paso con ejemplos de código

  • Constantes (claves de atestador, direcciones de contrato, UID de esquema EAS)

  • Fórmulas (cálculo de anulador, hash de señal, construcción de árbol de Merkle)

  • Esquema de entrada con tipos y descripciones

  • Plantillas de consulta GraphQL de EAS

Los circuitos usan alias: coinbase_kyccoinbase_attestation, coinbase_countrycoinbase_country_attestation, oidc_domainoidc_domain_attestation.

Protocolo A2A

Endpoint A2A v0.3 JSON-RPC en POST /a2a:

Método

Propósito

message/send

Enviar tarea de prueba (bloqueante)

message/stream

Enviar tarea de prueba (streaming SSE)

tasks/get

Consultar estado de la tarea

tasks/cancel

Cancelar una tarea en ejecución

tasks/resubscribe

Volver a suscribirse a eventos de tarea

La tarjeta de agente en /.well-known/agent.json proporciona identidad en cadena ERC-8004 y descubrimiento de capacidades.

Integración TEE (AWS Nitro Enclave)

Modo

Comportamiento

disabled

Linux estándar, sin TEE, texto plano permitido

nitro

AWS Nitro Enclave, atestación de hardware, cifrado E2E forzado

El enclave ejecuta aws/enclave-server.ts (compilado a dist/aws/enclave-server.js) que ejecuta bb prove con --oracle_hash keccak (requerido para compatibilidad con el verificador Solidity). La atestación NSM vincula el hash de la prueba y la clave pública TEE a la medición del enclave (PCR0/PCR1/PCR2).

Cadena de validación de atestación: AWS Nitro Root CA → Regional → Zonal → Instancia → Certificado hoja, verificado con firma COSE ES384.

Circuitos soportados

KYC de Coinbase (coinbase_attestation)

Prueba que el titular ha pasado la verificación KYC de Coinbase.

  • Alias: coinbase_kyc, coinbase_attestation

  • Entradas públicas: dirección, alcance

  • Anulador: Sí (privacidad, prevención de repetición)

País de Coinbase (coinbase_country_attestation)

Prueba que el país KYC del titular coincide con la atestación.

  • Alias: coinbase_country, coinbase_country_attestation

  • Entradas públicas: dirección, país, alcance

  • Anulador: Sí (privacidad, prevención de repetición)

Dominio OIDC (oidc_domain_attestation)

Prueba que el titular posee una dirección de correo electrónico en un dominio específico mediante la verificación OIDC JWT.

  • Alias: oidc_domain, oidc_domain_attestation

  • Tipo de entrada: OIDC JWT (id_token de Google, etc.)

  • Entradas públicas: hash de dominio, alcance

  • Anulador: Sí (privacidad, prevención de repetición)

Direcciones de contrato

Base Sepolia (Testnet)

Contrato

Dirección

Verificador KYC

0x0036B61dBFaB8f3CfEEF77dD5D45F7EFBFE2035c

Verificador de país

0xdEe363585926c3c28327Efd1eDd01cf4559738cf

Identidad ERC-8004

0x8004A818BFB912233c491871b3d84c89A494BD9e

Reputación ERC-8004

0x8004B663056A597Dffe9eCcC1965A193B7388713

Base Mainnet (Producción)

Contrato

Dirección

Identidad ERC-8004

0x8004A169FB4a3325136EB29fA0ceB6D2e539a432

Reputación ERC-8004

0x8004BAa17C55a88189AE136b182e5fdA19dE9b63

Identidad de agente ERC-8004

El agente se autorregistra en cadena al inicio a través del contrato de Identidad ERC-8004. La puntuación de reputación aumenta después de cada generación exitosa de prueba.

Variables de entorno

Requeridas

Variable

Descripción

REDIS_URL

Cadena de conexión de Redis

BASE_RPC_URL

Endpoint RPC de la cadena Base

CHAIN_RPC_URL

RPC para verificación de prueba

EAS_GRAPHQL_ENDPOINT

Endpoint GraphQL de EAS para consultas de atestación

PROVER_PRIVATE_KEY

Clave privada de la billetera del agente (64 caracteres hex, sin 0x)

PAYMENT_MODE

disabled / testnet / mainnet

A2A_BASE_URL

URL del servicio público (para la tarjeta de agente)

Opcionales

Variable

Predeterminado

Descripción

PORT

4002

Puerto del servidor Express

NODE_ENV

development

Entorno de Node

BB_PATH

bb

Ruta CLI de Barretenberg

NARGO_PATH

nargo

Ruta CLI de Nargo

CIRCUITS_DIR

/app/circuits

Directorio de artefactos de circuito

CIRCUITS_REPO_URL

(URL raw de GitHub)

URL de descarga de artefactos de circuito

TEE_MODE

disabled

disabled / nitro

ENCLAVE_CID

CID de Nitro Enclave (requerido cuando TEE_MODE=nitro)

ENCLAVE_PORT

5000

Puerto de Nitro Enclave

TEE_ATTESTATION

false

Habilitar verificación de atestación

PAYMENT_PAY_TO

Billetera del operador (requerido cuando el pago está habilitado)

PAYMENT_PROOF_PRICE

$0.10

Precio por prueba (USD)

ERC8004_IDENTITY_ADDRESS

Contrato de Identidad ERC-8004

ERC8004_REPUTATION_ADDRESS

Contrato de Reputación ERC-8004

GEMINI_API_KEY

Clave API de Gemini para chat

OPENAI_API_KEY

Clave API de OpenAI para chat

PHOENIX_COLLECTOR_ENDPOINT

Endpoint OTLP de Phoenix para rastreo

AGENT_VERSION

1.0.0

Cadena de versión del agente

Despliegue (AWS Nitro Enclave)

proofport-ai se despliega en AWS EC2 con soporte para Nitro Enclave. El despliegue utiliza cambio de ranura azul-verde para tiempo de inactividad cero.

Despliegue azul-verde

aws/deploy-blue-green.sh
  • Dos ranuras: azul (puertos 4002/3200) y verde (puertos 4003/3201)

  • Ranura activa rastreada en /opt/proofport-ai/active-slot

  • La recarga de Caddy (no reinicio) cambia el tráfico

  • Drenaje de solicitudes en vuelo antes de cambiar (hasta 660s para generación de prueba)

  • Reversión automática si falla la verificación de estado del nuevo contenedor

Infraestructura

  • Caddy — Proxy inverso con HTTPS (Cloudflare Full SSL)

  • systemd — Servicios: proofport-ai, proofport-ai-redis, proofport-ai-enclave, vsock-bridge

  • CloudWatch — Controlador de registros awslogs, retención de 30 días

  • GitHub Actions — Flujo de trabajo deploy-ai-aws.yml (NO deploy.yml que es para GCP)

Inicio / Parada

aws/boot-active-slot.sh    # Start active slot containers
aws/stop-active-slot.sh    # Stop active slot containers

Pruebas

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

Pruebas A2A (a2a-ui + Phoenix)

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

Servicio

URL

Propósito

proofport-ai

http://localhost:4002

Servidor de agente

a2a-ui

http://localhost:3001

UI de prueba web A2A

Phoenix

http://localhost:6006

Visualización de rastreo

Bloqueos de versión

Herramienta

Versión

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

Licencia

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