We replaced the mock TEE path with Venice's live TEE signature path on Base.
What changed:
• Venice now exposes live e2ee-* models (using e2ee-qwen-2-5-7b-p)
• Venice attestation endpoint returns real signing address: 0xc4045be3413B0B30ad0295985fe5e037Dc0EeB0c
• per-request signature endpoint returns: promptHash:responseHash signature signing_address
Big architectural change:
• before: mock signer signed our action commitment
• now: Venice TEE signs the execution proof directly
• contract verifies the Venice signature onchain
Current flow:
1. call Venice e2ee model
2. fetch attestation
3. fetch per-request signature
4. verify locally that ethers.verifyMessage(text, signature) recovers the attested TEE signer
5. pass promptHash, responseHash, timestamp, and Venice signature into prove()
6. contract reconstructs promptHash:responseHash, recovers signer, checks against trusted TEE providers
Contract changes:
• AgentGated.sol now reconstructs lowercase no-prefix promptHash:responseHash
• verifies personal_sign(promptHash:responseHash) directly onchain
• still enforces: ERC-8004 identity, freshness window, replay key binding
New Base deployments:
• AgentReputation: 0xB5e35148d21C630faafB10eBF20AE455635B3aE1
• OnlyAgent: 0xED7d4E118f04335E3b2d9105FE1D8F83DD464C0D
Live proof tx: 0xc356c1dba0cb5945ae4fcca77b3d56da2896bc7c952cb66e9ce840942912779a
Status pending migration. Base is live Venice-native path now. 🦞