Documentation Index
Fetch the complete documentation index at: https://docs.blindference.xyz/llms.txt
Use this file to discover all available pages before exploring further.
Changelog
Week of May 18, 2026
New features
Reineira settlement loop
End-to-end payout flow for confidential inference is now live. Tasks that complete a verified quorum result automatically settle against a confidential escrow, so agents and node operators get paid as part of the same transaction that finalizes the result — no separate settlement step.
- New
PayoutClaimer resolver contract on Arbitrum Sepolia handles claim submission and disbursement.
InferenceGate and ResultRegistry updated to plug into the settlement path.
- ICL exposes settlement-aware quorum and chain services so the coordinator can drive payouts end-to-end.
See Architecture for how settlement fits into the overall task lifecycle.
Confidential escrow primitive
Agents can now fund a task in advance through a confidential escrow that releases on a verified result. This lets you pre-pay for inference, set quorum-dependent payout conditions, and avoid trusting a single off-chain settler.
- New escrow scripts make it straightforward to create and fund an escrow for a task.
- The
IConfidentialEscrow interface defines the standard contract shape for resolvers that gate payouts on inference results.
Text inference wizard
The text inference flow in the demo frontend is now a guided wizard. You can step through encrypting your prompt, submitting it, watching quorum progress, and revealing the decrypted answer without leaving the page.
Updates
- ICL internal API — the coordinator’s internal router gained new endpoints for driving the settlement loop and surfacing claim state, so node operators and integrators can observe payouts in flight.
- End-to-end test coverage — a full E2E test now exercises encrypt → submit → quorum → settlement → claim in one run, so regressions in the settlement path get caught before release.
- Result commitment hardening —
ResultRegistry now exposes a stable interface (IResultRegistry) for resolvers and downstream contracts to consume, making it easier to build custom payout logic on top of verified results.
Bug fixes
- Inference API client — fixed a missing field in the text inference request payload that could cause the wizard to stall before submission.
- Chain service — result registry calls now use the updated commitment shape end-to-end; nodes no longer hit decode errors when reading recent results.
Wave 4 — Previous Release
Major Changes
1. NodeRegistry Contract (Arbitrum Sepolia)
New unified node registry deployed:
| Contract | Address | Purpose |
|---|
| NodeRegistry (proxy) | 0x72C0Ead949Fd2C346598a30AF1A69c3c5Cb86082 | Unified node registration, heartbeat, staking |
| NodeRegistry (impl) | 0x3E008352F5c35fC0030Eded4C8013C7d7F4c3282 | Implementation contract |
Features:
register(tier, attestationHash, expiresAt, models) — node self-registration with optional stake
heartbeat() — on-chain liveness proof
isActive(node) — checks attestation expiry + heartbeat recency
updateAttestation(...) — ICL can update a node’s attestation hash/tier
withdrawStake() — node can exit and reclaim stake
On-chain heartbeat frequency: Once every 10 days (was every 60s). ICL heartbeat stays every 60s (free REST call). Contract grace period set to 11 days for safety margin.
2. Interactive Attestation CLI
blindference-node attest without --mock now presents an interactive menu:
Attestation type:
[1] Mock (development)
[2] TEE / TPM (production)
Select [1]:
- Option 1: Mock attestation with
weloveblindference
- Option 2: TEE/TPM — explains hardware requirements, offers dev TEE simulation with custom key
New flag: --tee-key <key> overrides the default mock key.
After ICL attestation, the CLI asks for on-chain registration with gas estimation.
3. Blindference-Node PyPI Package
A standalone Python package for operators joining the network:
- Published as
blindference-node on PyPI (v0.3.0+)
- Auto-publish workflow: tags
v* trigger GitHub Actions → PyPI
- Supports both
bridge mode (TypeScript CoFHE subprocess) and python mode (direct HTTP)
- Auto-re-attestation: nodes self-heal on startup and via watchdog (no manual intervention)
- Configuration-driven: single
BLINDFERENCE_NODE_CONFIG_PATH JSON file controls all behavior
2. Professional Documentation Site
Mintlify-powered docs at blindference/docs/:
- Compute section (8 pages): Node operator quickstart, installation, configuration, attestation, running, monitoring, troubleshooting, rewards
- Build section (9 pages + 2 examples): Agent developer quickstart, architecture, CoFHE encryption, ICL API, contracts, deployment, risk-scoring example, text-inference example
- API Reference: Full ICL REST API documentation
- Resources: Changelog, contract addresses, troubleshooting
- Dark Blindference theme (
#0d0d0d background, white/zinc-400 accents)
- Auto-validation CI: checks
mint.json navigation, page existence, logo paths, broken links
3. Full Quorum Test Passed
End-to-end operational validation with 3 nodes + ICL:
- ICL selected leader + 2 verifiers correctly
- All 3 nodes received task assignments and claimed successfully
- Nodes processed through CoFHE decrypt → IPFS fetch → inference pipeline
- ICL bugs discovered and fixed during live quorum testing
4. ICL Production Hardening
Critical fixes found during quorum testing:
- In-memory DB operators:
_matches() now supports $or, $in, $eq, $ne, $gt, $gte, $lt, $lte
- Assignment dispatch:
_get_pending_assignments() returns task_id (not request_id)
- Pydantic compatibility:
get_assignments() uses getattr() for model field access
- Hex handle parsing:
claim_task() parses 0x-prefixed handles with int(val, 16)
- MongoDB Atlas persistence:
USE_MONGO=true with fallback to in-memory when unavailable
HEARTBEAT_GRACE_SECONDS: 300: ICL can restart without losing active nodes (was 3600)
5. Branding Cleanup
Removed all hackathon-era “Wave” naming:
wave2_network/ → network/ (all path references updated)
Wave3Popup.tsx → ProtocolUpdatePopup.tsx
WAVE2_SUBMISSION.md → SUBMISSION.md
fhenix-fhe.md → FHE_INTEGRATION.md
LLM_CONTEXT.md → CONTEXT.md
- No “Wave 2”, “Wave 3”, “wave2”, “wave3” references remain in source or docs
Contract Deployments (Arbitrum Sepolia)
| Contract | Address | Purpose |
|---|
| PromptKeyStore | 0x1E22dD12f448B15f1Ca8560fB6B4463834FaAf73 | Text inference key storage |
| ResultRegistry | 0xCebd831eCd00915E299b8Ef2666cAbf942dc7150 | On-chain result commitment |
| NodeRegistry | 0x72C0Ead949Fd2C346598a30AF1A69c3c5Cb86082 | Unified node registration (proxy) |
| NodeAttestationRegistry | 0xB54e019e9717a8Ed4746bA9d7F1A3F83cf0a35E0 | Legacy operator attestation |
| ExecutionCommitmentRegistry | 0xcd45aefE9a16772528fa30B7d47958a95e83440C | Task dispatch |
| ReputationRegistry | 0xdaDb4D46D231d3fe6D3754E0861c8bCD36aF0604 | Operator scoring |
| AgentConfigRegistry | 0x85aE035d6a94c006B5d0808cAdF47F5c22536996 | Model configuration |
| RewardAccumulator | 0xFa25Fb53eF8dAc88E4f43bB7558Cf3930Bf3e817 | Reward distribution |
| BlindferenceInputVault | 0x8dD7B2A9B69C76A69d33B2DF46426Cbe657a902b | CoFHE ACL input vault |
Bug Fixes
- ICL in-memory DB: Full MongoDB operator support (
$or, $in, $eq, $ne, $gt, $gte, $lt, $lte)
- Assignment dispatch:
_get_pending_assignments() returns task_id for correct node lookups
- Pydantic model handling:
get_assignments() uses getattr() instead of .get() on Pydantic objects
- Hex handle parsing:
claim_task handles 0x-prefixed hex strings with int(val, 16)
- ICL quorum preview: Returns proper leader/verifier addresses when operators are active
- Node CoFHE default:
get_cofhe_client() defaults to CoFHEBridgeClient, mock mode fully removed
- Frontend mock removal:
MockCoFHEClient class deleted, all code paths use real CoFHE
- Vite optimizeDeps: Only
tfhe excluded; @cofhe/sdk pre-bundled for CJS interop
- TFHE WASM: Absolute path
/node_modules/tfhe/tfhe_bg.wasm?url survives cache invalidation
Technical Decisions
- NodeRegistry contract: Unified registration replaces NodeAttestationRegistry + NodeOperatorRegistry combo
- On-chain heartbeat every 10 days: Minimal gas while still providing objective liveness to external contracts
- ICL heartbeat every 60s: Free REST call keeps node eligible for real-time job dispatch
blindference-node PyPI package: standalone distribution for operator onboarding
- Mintlify over Docusaurus: better dark mode default, built-in search, modern components
- Docs split into Compute (node operators) and Build (agent developers): two distinct audiences
HEARTBEAT_GRACE_SECONDS: 300: balances ICL restart resilience vs stale-node detection
- Node CoFHE mode
bridge (TypeScript subprocess) is default; python (direct HTTP) is alternative
fheKeyStorage: null prevents stale IndexedDB cache serialization errors
environment: 'MOCK' on chain config: local ZK proof verification only (ciphertexts are real FHE)
Wave 3 — CoFHE SDK Alignment & Text Inference
Major Changes
1. Confidential Text Inference Pipeline
- Browser-side AES-256 encryption: User prompts encrypted locally before leaving device
- Pinata/IPFS blob storage: Encrypted prompts stored off-chain, only ciphertext handles on-chain
- CoFHE key access control: AES key split into uint128 halves, each half CoFHE-encrypted and stored in
PromptKeyStore
- Quorum decryption: Leader + 2 verifiers each receive CoFHE sharing permits to decrypt their key half
- Model inference: Nodes run identical inference via Groq Llama 3 or Google Gemini
- Output key escrow: Leader stores output AES key in PromptKeyStore for user-only decryption
- Frontend reveal: User decrypts output key via CoFHE and reveals generated text
2. CoFHE SDK Alignment
Updated to @cofhe/sdk@0.5.1 with critical fixes:
fheKeyStorage: null in SDK config to prevent stale IndexedDB cache serialization errors
environment: 'MOCK' on chain config enables local ZK proof verification (ciphertexts are real FHE)
useWorkers: false — ZK proof generation runs on main thread (Web Workers broken in Vite dev)
- Absolute WASM URL path
/node_modules/tfhe/tfhe_bg.wasm?url survives cache invalidation
- Vite
optimizeDeps excludes only tfhe, pre-bundles @cofhe/sdk normally for CJS interop
3. Node Auto-Re-Attestation
- Auto-detect missing/expired attestation certificates on startup
- Automatically re-attest via ICL challenge/response
- Watchdog re-attests within 6 hours of expiry
- No CLI flag needed — default behavior
4. ICL Persistence and Resilience
- MongoDB Atlas integration for persistent operator records
HEARTBEAT_GRACE_SECONDS: 300 (5 min) — ICL can restart without losing active nodes
- In-memory fallback when MongoDB unavailable (local development)
- Fixed in-memory database query operators (
$or, $in, array membership)
5. Professional Documentation
- Removed all “Wave 2” / “Wave 3” branding from code and documentation
- Renamed
wave2_network/ monorepo directory to network/
- Comprehensive README, ARCHITECTURE.md, DEPLOYMENT.md
- Mintlify docs site with Compute and Build sections
Contract Deployments (Arbitrum Sepolia)
| Contract | Address | Added |
|---|
| PromptKeyStore | 0x1E22dD12f448B15f1Ca8560fB6B4463834FaAf73 | Text inference key storage |
| ResultRegistry | 0xCebd831eCd00915E299b8Ef2666cAbf942dc7150 | On-chain result commitment |
| NodeAttestationRegistry | 0xB54e019e9717a8Ed4746bA9d7F1A3F83cf0a35E0 | Operator attestation |
| ExecutionCommitmentRegistry | 0xcd45aefE9a16772528fa30B7d47958a95e83440C | Task dispatch |
| ReputationRegistry | 0xdaDb4D46D231d3fe6D3754E0861c8bCD36aF0604 | Operator scoring |
| AgentConfigRegistry | 0x85aE035d6a94c006B5d0808cAdF47F5c22536996 | Model configuration |
| RewardAccumulator | 0xFa25Fb53eF8dAc88E4f43bB7558Cf3930Bf3e817 | Reward distribution |
Bug Fixes
- ICL in-memory DB:
_matches() now supports MongoDB operators ($or, $in, $eq, $ne, $gt, $gte, $lt, $lte) and array membership queries
- Assignment dispatch:
_get_pending_assignments() returns task_id (not request_id) so node lookups succeed
- Pydantic model handling:
get_assignments() uses getattr() for Pydantic models instead of .get() which fails on objects
- Hex handle parsing:
claim_task now parses 0x-prefixed hex strings with int(val, 16) instead of int(val)
- ICL quorum preview: Returns proper leader/verifier addresses when operators are active
- Node CoFHE default:
get_cofhe_client() defaults to CoFHEBridgeClient, mock mode fully removed
- Frontend mock removal:
MockCoFHEClient class deleted, all code paths use real CoFHE
Wave 2 — Initial Implementation
Text Inference Foundation
- Added browser-side AES-256 prompt encryption
- Added Pinata/IPFS encrypted blob storage
- Added
PromptKeyStore contract for CoFHE-encrypted key halves
- Added node-side prompt key decryption under CoFHE ACL
- Added frontend text submission UI with Groq/Gemini model selection
- Added frontend output key decryption and answer reveal
- Added background demo stack scripts
Risk Scoring Foundation
- Initial confidential risk scoring pipeline
- Browser CoFHE feature encryption (credit score, loan amount, account age, defaults)
- Quorum consensus with 1 leader + 2 verifiers
- On-chain commitment and coverage via Reineira
- Multi-recipient sharing permit flow
Infrastructure Foundation
- Reineira protocol integration
- Fhenix CoFHE stack integration
- FastAPI ICL coordinator
- React/Vite frontend with wagmi wallet connection
- Node runtime with Groq/Gemini inference bridge
- Foundry contract suite with deployment scripts