POW is an autonomous discovery agent that executes committed research programs with verifiable compute guarantees.
Labs struggle to raise because backers can't verify the work. Funds risk being misused — classic counterparty risk.
Fund an agent that provably does what it's funded to do. Verifiable compute (EigenAI / Eigen TEE) ensures the research program is executed as committed. Funds are held in an escrow contract and released only when a verifier submits a proof; the agent then withdraws.
Removes counterparty risk and unlocks new capital formation for science.
Scientific research funding suffers from structural inefficiencies:
- Backers cannot verify actual work performed
- Funds may be misused
- Milestone reporting is subjective
- Capital formation relies on social trust
This creates persistent counterparty risk.
POW replaces discretionary trust with deterministic enforcement.
Instead of funding a lab, fund an agent.
The agent:
- Executes a predefined research program
- Runs inside verifiable compute (EigenAI + Eigen TEE)
- Produces signed outputs
- Triggers escrow release only when proof is submitted
Funds move only when cryptographic conditions are satisfied.
POW removes human discretion from fund release.
- Backer → Deposits ETH into escrow for a program
- Verifier → Submits proof of valid execution
- Agent → Withdraws released funds
- Funds cannot be withdrawn without proof submission
- Verifier cannot withdraw funds
- Agent cannot bypass escrow logic
- No governance overrides
- Program-level isolation enforced on-chain
User goes to Research → selects program → clicks Fund Agent.
This calls: deposit(programId)
ETH is locked in escrow under that program ID.
The agent executes the research program inside:
- EigenAI (deterministic research execution)
- EigenCompute / Eigen TEE (attested compute guarantees)
A signed proof artifact is generated.
Verifier connects wallet and calls: submitProof(programId, agentWallet, proofSignature)
The contract:
- Validates verifier permissions
- Marks escrowed funds as releasable
- Assigns release to the agent wallet
No ETH is transferred yet.
Agent connects wallet and calls: withdraw(programId)
The escrow contract transfers ETH to the agent.
cd my-app
npm install
cp .env.example .env.localEdit .env.local: set NEXT_PUBLIC_ESCROW_ADDRESS after deploying the Escrow (see below). Optionally set EIGENAI_API_KEY, NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID.
Deploy contracts/Escrow.sol on Sepolia (e.g. Remix). Constructor: verifier = the address that will call submitProof (e.g. your wallet). Set NEXT_PUBLIC_ESCROW_ADDRESS in .env.local to the deployed contract address.
npm run devOpen http://localhost:3000. Connect wallet (Sepolia), use Research → Fund → then as verifier on Verify → then as agent on Dashboard to withdraw.
npm run buildRequires TypeScript target ES2020 or higher in tsconfig.json (for BigInt support). If you see “BigInt literals are not available when targeting lower than ES2020”, set "target": "ES2020" in tsconfig.json or use BigInt(0) instead of 0n where needed.
docs/ARCHITECTURE.md– architecture and code layoutdocs/CONTRACT_AND_FLOW.md– escrow contract and flowdocs/EIGEN_TEE.md– Eigen TEE / EigenCompute integration