zkproofport-ai
proofport-ai
ZKProofport를 위한 에이전트 네이티브 ZK 증명 인프라입니다. AWS Nitro Enclave 내에서 종단간 암호화(E2E)를 통해 영지식 증명을 생성하고 검증하는 독립형 서비스입니다. 서버는 블라인드 릴레이(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 호스트는 증명 입력값을 읽을 수 없습니다. 오직 인클레이브(enclave)만이 복호화합니다.
x402 결제 — 단일 단계 흐름: 402 챌린지 → USDC 결제 → 증명 생성. 미들웨어가 없습니다.
하드웨어 증명(Attestation) — NSM 증명 문서는 TEE 공개 키를 인클레이브 측정값(PCR)에 바인딩합니다.
디렉토리 구조
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
E2E 암호화 (블라인드 릴레이)
증명 입력값은 클라이언트와 Nitro Enclave 간에 종단간 암호화됩니다. Node.js 서버는 암호화된 블롭(blob)을 읽지 않고 전달만 합니다.
프로토콜: X25519 ECDH + AES-256-GCM (ECIES 패턴)
TEE는 시작 시 X25519 키 쌍을 생성하고 공개 키를 NSM 증명에 바인딩합니다.
클라이언트는 402 응답에서 TEE 공개 키를 가져와 증명을 검증합니다.
클라이언트는 일회용 X25519 키 쌍을 생성하고, ECDH 공유 비밀을 계산하며, SHA-256을 통해 AES 키를 도출합니다.
클라이언트는 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 암호화 자동 감지) |
| 온체인 증명 검증 |
| 사용 가능한 회로 목록 |
| 402 챌린지 요청 (단계별 흐름) |
| x402 USDC 결제 (단계별 흐름) |
| 증명 입력값 제출 (단계별 흐름) |
| 회로 입력값 준비 (단계별 흐름) |
npm 패키지
@zkproofport-ai/sdk — TypeScript SDK for proof generation (ethers v6)
@zkproofport-ai/mcp — Local MCP server for AI agents (stdio transport)로컬 AI 에이전트 사용을 위해 MCP 서버를 설치하세요:
npm install @zkproofport-ai/mcp
npx zkproofport-mcp # Starts stdio MCP server가이드 시스템
GET /api/v1/guide/:circuit은 클라이언트 AI 에이전트가 모든 증명 입력값을 준비할 수 있도록 포괄적인 JSON 가이드를 반환합니다. 포함 내용:
코드 예제가 포함된 단계별 지침
상수 (증명자 키, 컨트랙트 주소, EAS 스키마 UID)
공식 (널리파이어 계산, 신호 해시, 머클 트리 구성)
유형 및 설명이 포함된 입력 스키마
EAS GraphQL 쿼리 템플릿
회로는 별칭을 사용합니다: coinbase_kyc → coinbase_attestation, coinbase_country → coinbase_country_attestation, oidc_domain → oidc_domain_attestation.
A2A 프로토콜
POST /a2a의 A2A v0.3 JSON-RPC 엔드포인트:
메서드 | 목적 |
| 증명 작업 제출 (차단) |
| 증명 작업 제출 (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로 컴파일됨)를 실행하며, 이는 --oracle_hash keccak(Solidity 검증기 호환성을 위해 필요) 옵션과 함께 bb prove를 실행합니다. NSM 증명은 증명 해시와 TEE 공개 키를 인클레이브 측정값(PCR0/PCR1/PCR2)에 바인딩합니다.
증명 검증 체인: AWS Nitro Root CA → Regional → Zonal → Instance → Leaf 인증서, COSE ES384 서명으로 검증됨.
지원되는 회로
Coinbase KYC (coinbase_attestation)
보유자가 Coinbase KYC 검증을 통과했음을 증명합니다.
별칭:
coinbase_kyc,coinbase_attestation공개 입력값: address, scope
널리파이어: 예 (개인정보 보호, 재전송 방지)
Coinbase Country (coinbase_country_attestation)
보유자의 KYC 국가가 증명과 일치함을 증명합니다.
별칭:
coinbase_country,coinbase_country_attestation공개 입력값: address, country, scope
널리파이어: 예 (개인정보 보호, 재전송 방지)
OIDC Domain (oidc_domain_attestation)
OIDC JWT 검증을 통해 보유자가 특정 도메인의 이메일 주소를 소유하고 있음을 증명합니다.
별칭:
oidc_domain,oidc_domain_attestation입력 유형: OIDC JWT (Google 등의
id_token)공개 입력값: domain hash, scope
널리파이어: 예 (개인정보 보호, 재전송 방지)
컨트랙트 주소
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 연결 문자열 |
| Base 체인 RPC 엔드포인트 |
| 증명 검증용 RPC |
| 증명 쿼리를 위한 EAS GraphQL 엔드포인트 |
| 에이전트 지갑 개인 키 (64 16진수 문자, 0x 제외) |
|
|
| 공개 서비스 URL (에이전트 카드용) |
선택 사항
변수 | 기본값 | 설명 |
|
| Express 서버 포트 |
|
| 노드 환경 |
|
| Barretenberg CLI 경로 |
|
| Nargo CLI 경로 |
|
| 회로 아티팩트 디렉토리 |
| (GitHub raw URL) | 회로 아티팩트 다운로드 URL |
|
|
|
| — | Nitro Enclave CID ( |
|
| Nitro Enclave 포트 |
|
| 증명 검증 활성화 |
| — | 운영자 지갑 (결제 활성화 시 필수) |
|
| 증명당 가격 (USD) |
| — | ERC-8004 Identity 컨트랙트 |
| — | ERC-8004 Reputation 컨트랙트 |
| — | 채팅용 Gemini API 키 |
| — | 채팅용 OpenAI API 키 |
| — | 추적용 Phoenix OTLP 엔드포인트 |
|
| 에이전트 버전 문자열 |
배포 (AWS Nitro Enclave)
proofport-ai는 Nitro Enclave를 지원하는 AWS EC2에 배포됩니다. 배포는 무중단 서비스를 위해 블루-그린 슬롯 전환을 사용합니다.
블루-그린 배포
aws/deploy-blue-green.sh두 개의 슬롯: 블루(포트 4002/3200) 및 그린(포트 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워크플로우 (GCP용인deploy.yml아님)
부팅 / 중지
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 modeA2A 테스트 (a2a-ui + Phoenix)
docker compose -f docker-compose.yml -f docker-compose.test.yml up --build -d서비스 | URL | 목적 |
proofport-ai |
| 에이전트 서버 |
a2a-ui |
| A2A 웹 테스트 UI |
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