zkproofport-ai
proofport-ai
Инфраструктура ZK-доказательств для ZKProofport, ориентированная на агентов. Автономный сервис, который генерирует и проверяет доказательства с нулевым разглашением внутри AWS Nitro Enclave со сквозным шифрованием — сервер выступает в роли слепого ретранслятора (blind relay) и никогда не видит входные данные доказательств.
Архитектура
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 │
└─────────────────────────────────────┘Ключевые свойства:
Сквозное шифрование (E2E) — X25519 ECDH + AES-256-GCM. В режиме
nitroвходные данные в открытом виде отклоняются.Слепой ретранслятор — Хост Node.js не может прочитать входные данные доказательства. Расшифровка происходит только внутри анклава.
Оплата x402 — Одношаговый процесс: вызов 402 → оплата в USDC → генерация доказательства. Без промежуточного ПО.
Аппаратная аттестация — Документ аттестации NSM привязывает открытый ключ TEE к измерению анклава (PCRs).
Структура каталогов
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Быстрый старт
npm (Разработка)
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 (Локально)
docker compose up --build # Start redis + server
docker compose down # Stop
docker compose down -v # Reset dataПорт 4002: Сервер Node.js
Порт 6380 (хост) → 6379 (контейнер): Redis
Сквозное шифрование (Слепой ретранслятор)
Входные данные доказательств зашифрованы сквозным шифрованием между клиентом и Nitro Enclave. Сервер Node.js передает зашифрованный блоб, не читая его.
Протокол: X25519 ECDH + AES-256-GCM (паттерн ECIES)
TEE генерирует пару ключей X25519 при запуске, привязывает открытый ключ к аттестации NSM
Клиент получает открытый ключ TEE из ответа 402, проверяет аттестацию
Клиент генерирует эфемерную пару ключей X25519, вычисляет общий секрет ECDH, выводит ключ AES через SHA-256
Клиент шифрует входные данные с помощью AES-256-GCM, отправляет
{ ephemeralPublicKey, iv, ciphertext, authTag, keyId }Сервер передает зашифрованный конверт в анклав через vsock (слепой ретранслятор)
Анклав расшифровывает, генерирует доказательство, возвращает доказательство + аттестацию NSM
Принудительное применение: В режиме nitro входные данные в открытом виде отклоняются с ошибкой PLAINTEXT_REJECTED.
Процесс оплаты x402
Одношаговый атомарный процесс — без промежуточного ПО, без сессий:
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 }Режимы оплаты:
Режим | Сеть | Эффект |
| Нет | Все запросы бесплатны |
| Base Sepolia | Требуется оплата в USDC (тестовая сеть) |
| Base Mainnet | Требуется оплата в USDC (основная сеть) |
REST-эндпоинты
Эндпоинт | Метод | Назначение |
| GET | Проверка работоспособности + статус TEE + режим оплаты |
| POST | Одношаговая генерация доказательства x402 |
| GET | Динамическое руководство по генерации (JSON) |
| POST | Эндпоинт StreamableHTTP MCP |
| POST | Эндпоинт A2A JSON-RPC |
| GET | Карточка агента OASF |
| GET | Карточка агента A2A |
| GET | Обнаружение MCP |
| GET | Swagger UI |
| GET | Спецификация OpenAPI |
Инструменты MCP
Доступны через /mcp (StreamableHTTP) или локальный пакет @zkproofport-ai/mcp (stdio):
Инструмент | Назначение |
| Генерация доказательства «все в одном» (оплата x402 + автоопределение E2E шифрования) |
| Проверка доказательства в сети |
| Список доступных схем (circuits) |
| Запрос вызова 402 (пошаговый процесс) |
| Оплата USDC x402 (пошаговый процесс) |
| Отправка входных данных доказательства (пошаговый процесс) |
| Подготовка входных данных схемы (пошаговый процесс) |
Пакеты npm
@zkproofport-ai/sdk — TypeScript SDK for proof generation (ethers v6)
@zkproofport-ai/mcp — Local MCP server for AI agents (stdio transport)Установите MCP-сервер для использования локальным AI-агентом:
npm install @zkproofport-ai/mcp
npx zkproofport-mcp # Starts stdio MCP serverСистема руководств
GET /api/v1/guide/:circuit возвращает подробное JSON-руководство для клиентских AI-агентов по подготовке всех входных данных доказательства. Включает:
Пошаговые инструкции с примерами кода
Константы (ключи аттестатора, адреса контрактов, UID схемы EAS)
Формулы (вычисление nullifier, хеш сигнала, построение дерева Меркла)
Схему входных данных с типами и описаниями
Шаблоны GraphQL-запросов EAS
Схемы используют псевдонимы: coinbase_kyc → coinbase_attestation, coinbase_country → coinbase_country_attestation, oidc_domain → oidc_domain_attestation.
Протокол A2A
Эндпоинт A2A v0.3 JSON-RPC по адресу POST /a2a:
Метод | Назначение |
| Отправка задачи доказательства (блокирующая) |
| Отправка задачи доказательства (SSE стриминг) |
| Запрос статуса задачи |
| Отмена запущенной задачи |
| Повторная подписка на события задачи |
Карточка агента по адресу /.well-known/agent.json предоставляет ончейн-идентификацию ERC-8004 и обнаружение возможностей.
Интеграция TEE (AWS Nitro Enclave)
Режим | Поведение |
| Стандартный Linux, без TEE, разрешен открытый текст |
| AWS Nitro Enclave, аппаратная аттестация, принудительное E2E шифрование |
Анклав запускает aws/enclave-server.ts (скомпилированный в dist/aws/enclave-server.js), который выполняет bb prove с параметром --oracle_hash keccak (необходимо для совместимости с верификатором Solidity). Аттестация NSM привязывает хеш доказательства и открытый ключ TEE к измерению анклава (PCR0/PCR1/PCR2).
Цепочка проверки аттестации: AWS Nitro Root CA → Regional → Zonal → Instance → Leaf-сертификат, проверяется подписью COSE ES384.
Поддерживаемые схемы (Circuits)
Coinbase KYC (coinbase_attestation)
Доказывает, что владелец прошел верификацию KYC в Coinbase.
Псевдонимы:
coinbase_kyc,coinbase_attestationПубличные входные данные: address, scope
Nullifier: Да (конфиденциальность, защита от повторов)
Coinbase Country (coinbase_country_attestation)
Доказывает, что страна KYC владельца совпадает с аттестацией.
Псевдонимы:
coinbase_country,coinbase_country_attestationПубличные входные данные: address, country, scope
Nullifier: Да (конфиденциальность, защита от повторов)
OIDC Domain (oidc_domain_attestation)
Доказывает, что владелец владеет адресом электронной почты в определенном домене через проверку OIDC JWT.
Псевдонимы:
oidc_domain,oidc_domain_attestationТип входных данных: OIDC JWT (
id_tokenот Google и т.д.)Публичные входные данные: domain hash, scope
Nullifier: Да (конфиденциальность, защита от повторов)
Адреса контрактов
Base Sepolia (Тестовая сеть)
Контракт | Адрес |
KYC Verifier |
|
Country Verifier |
|
ERC-8004 Identity |
|
ERC-8004 Reputation |
|
Base Mainnet (Основная сеть)
Контракт | Адрес |
ERC-8004 Identity |
|
ERC-8004 Reputation |
|
Идентификация агента ERC-8004
Агент автоматически регистрируется в сети при запуске через контракт ERC-8004 Identity. Рейтинг репутации увеличивается после каждой успешной генерации доказательства.
Переменные окружения
Обязательные
Переменная | Описание |
| Строка подключения к Redis |
| RPC-эндпоинт сети Base |
| RPC для проверки доказательств |
| GraphQL-эндпоинт EAS для запросов аттестаций |
| Приватный ключ кошелька агента (64 шестнадцатеричных символа, без 0x) |
|
|
| Публичный URL сервиса (для карточки агента) |
Опциональные
Переменная | По умолчанию | Описание |
|
| Порт сервера Express |
|
| Среда Node |
|
| Путь к CLI Barretenberg |
|
| Путь к CLI Nargo |
|
| Директория артефактов схем |
| (GitHub raw URL) | URL для загрузки артефактов схем |
|
|
|
| — | CID анклава Nitro (требуется при |
|
| Порт анклава Nitro |
|
| Включить проверку аттестации |
| — | Кошелек оператора (требуется при включенной оплате) |
|
| Цена за одно доказательство (USD) |
| — | Контракт ERC-8004 Identity |
| — | Контракт ERC-8004 Reputation |
| — | API-ключ Gemini для чата |
| — | API-ключ OpenAI для чата |
| — | Эндпоинт Phoenix OTLP для трассировки |
|
| Версия агента |
Развертывание (AWS Nitro Enclave)
proofport-ai развертывается на AWS EC2 с поддержкой Nitro Enclave. Развертывание использует blue-green переключение слотов для обеспечения нулевого времени простоя.
Blue-Green развертывание
aws/deploy-blue-green.shДва слота: blue (порты 4002/3200) и green (порты 4003/3201)
Активный слот отслеживается в
/opt/proofport-ai/active-slotПерезагрузка Caddy (не перезапуск) переключает трафик
Ожидание завершения текущих запросов перед переключением (до 660 секунд для генерации доказательства)
Автоматический откат, если проверка работоспособности нового контейнера не проходит
Инфраструктура
Caddy — Обратный прокси с HTTPS (Cloudflare Full SSL)
systemd — Сервисы:
proofport-ai,proofport-ai-redis,proofport-ai-enclave,vsock-bridgeCloudWatch — Драйвер логов
awslogs, хранение 30 днейGitHub Actions — Воркфлоу
deploy-ai-aws.yml(НЕdeploy.yml, который предназначен для GCP)
Запуск / Остановка
aws/boot-active-slot.sh # Start active slot containers
aws/stop-active-slot.sh # Stop active slot containersТестирование
npm test # Unit tests
npm run test:e2e # E2E against Docker stack
npm run test:watch # Watch modeТестирование A2A (a2a-ui + Phoenix)
docker compose -f docker-compose.yml -f docker-compose.test.yml up --build -dСервис | URL | Назначение |
proofport-ai |
| Сервер агента |
a2a-ui |
| Веб-интерфейс для тестирования A2A |
Phoenix |
| Визуализация трассировки |
Фиксация версий
Инструмент | Версия |
bb (Barretenberg) |
|
nargo |
|
ethers |
|
@modelcontextprotocol/sdk |
|
Node.js | 20 LTS |
Лицензия
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