zkproofport-ai
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.mdInicio 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 stackDocker Compose (Local)
docker compose up --build # Start redis + server
docker compose down # Stop
docker compose down -v # Reset dataPuerto 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)
TEE genera un par de claves X25519 al inicio, vincula la clave pública a la atestación NSM
El cliente obtiene la clave pública TEE de la respuesta 402, verifica la atestación
El cliente genera un par de claves X25519 efímeras, calcula el secreto compartido ECDH, deriva la clave AES mediante SHA-256
El cliente cifra las entradas con AES-256-GCM, envía
{ ephemeralPublicKey, iv, ciphertext, authTag, keyId }El servidor pasa el sobre cifrado al enclave a través de vsock (repetidor ciego)
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 |
| Ninguna | Todas las solicitudes son gratuitas |
| Base Sepolia | Requiere pago en USDC (testnet) |
| Base Mainnet | Requiere pago en USDC (producción) |
Endpoints REST
Endpoint | Método | Propósito |
| GET | Verificación de estado + estado TEE + modo de pago |
| POST | Generación de prueba x402 de un solo paso |
| GET | Guía dinámica de generación de pruebas (JSON) |
| POST | Endpoint MCP StreamableHTTP |
| POST | Endpoint A2A JSON-RPC |
| GET | Tarjeta de agente OASF |
| GET | Tarjeta de agente A2A |
| GET | Descubrimiento MCP |
| GET | Swagger UI |
| GET | Especificación OpenAPI |
Herramientas MCP
Disponibles a través de /mcp (StreamableHTTP) o el paquete local @zkproofport-ai/mcp (stdio):
Herramienta | Propósito |
| Generación de prueba todo en uno (pago x402 + detección automática de cifrado E2E) |
| Verificación de prueba en cadena |
| Listar circuitos disponibles |
| Solicitar desafío 402 (flujo paso a paso) |
| Realizar pago x402 en USDC (flujo paso a paso) |
| Enviar entradas de prueba (flujo paso a paso) |
| 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 serverSistema 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_kyc → coinbase_attestation, coinbase_country → coinbase_country_attestation, oidc_domain → oidc_domain_attestation.
Protocolo A2A
Endpoint A2A v0.3 JSON-RPC en POST /a2a:
Método | Propósito |
| Enviar tarea de prueba (bloqueante) |
| Enviar tarea de prueba (streaming SSE) |
| Consultar estado de la tarea |
| Cancelar una tarea en ejecución |
| 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 |
| Linux estándar, sin TEE, texto plano permitido |
| 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_attestationEntradas 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_attestationEntradas 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_attestationTipo de entrada: OIDC JWT (
id_tokende 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 |
|
Verificador de país |
|
Identidad ERC-8004 |
|
Reputación ERC-8004 |
|
Base Mainnet (Producción)
Contrato | Dirección |
Identidad ERC-8004 |
|
Reputación ERC-8004 |
|
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 |
| Cadena de conexión de Redis |
| Endpoint RPC de la cadena Base |
| RPC para verificación de prueba |
| Endpoint GraphQL de EAS para consultas de atestación |
| Clave privada de la billetera del agente (64 caracteres hex, sin 0x) |
|
|
| URL del servicio público (para la tarjeta de agente) |
Opcionales
Variable | Predeterminado | Descripción |
|
| Puerto del servidor Express |
|
| Entorno de Node |
|
| Ruta CLI de Barretenberg |
|
| Ruta CLI de Nargo |
|
| Directorio de artefactos de circuito |
| (URL raw de GitHub) | URL de descarga de artefactos de circuito |
|
|
|
| — | CID de Nitro Enclave (requerido cuando |
|
| Puerto de Nitro Enclave |
|
| Habilitar verificación de atestación |
| — | Billetera del operador (requerido cuando el pago está habilitado) |
|
| Precio por prueba (USD) |
| — | Contrato de Identidad ERC-8004 |
| — | Contrato de Reputación ERC-8004 |
| — | Clave API de Gemini para chat |
| — | Clave API de OpenAI para chat |
| — | Endpoint OTLP de Phoenix para rastreo |
|
| 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.shDos ranuras: azul (puertos 4002/3200) y verde (puertos 4003/3201)
Ranura activa rastreada en
/opt/proofport-ai/active-slotLa 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-bridgeCloudWatch — Controlador de registros
awslogs, retención de 30 díasGitHub Actions — Flujo de trabajo
deploy-ai-aws.yml(NOdeploy.ymlque es para GCP)
Inicio / Parada
aws/boot-active-slot.sh # Start active slot containers
aws/stop-active-slot.sh # Stop active slot containersPruebas
npm test # Unit tests
npm run test:e2e # E2E against Docker stack
npm run test:watch # Watch modePruebas A2A (a2a-ui + Phoenix)
docker compose -f docker-compose.yml -f docker-compose.test.yml up --build -dServicio | URL | Propósito |
proofport-ai |
| Servidor de agente |
a2a-ui |
| UI de prueba web A2A |
Phoenix |
| Visualización de rastreo |
Bloqueos de versión
Herramienta | Versión |
bb (Barretenberg) |
|
nargo |
|
ethers |
|
@modelcontextprotocol/sdk |
|
Node.js | 20 LTS |
Licencia
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