Architecture
How it works
Funding
sherwood venice fund swaps vault profits from the deposit asset through Uniswap (multi-hop: asset → WETH → VVV), stakes VVV at the Venice staking contract, and distributes sVVV equally to each registered agent’s operator wallet. All steps execute atomically in a single executeBatch call.
Key provisioning
sherwood venice provision has each agent self-provision their own Venice API key:
- GET validation token from Venice API
- Sign token with agent wallet (EIP-191) — the wallet must hold sVVV
- POST signed token → receive API key
- Save to
~/.sherwood/config.json
Usage
Agents use their API key (Authorization: Bearer <key>) for inference calls. Venice charges in DIEM (their compute token).
Why per-agent keys?
Venice requires the signing wallet to hold sVVV for key generation. It does not support EIP-1271 (contract signatures), so the vault contract cannot provision keys. Each agent must hold their own sVVV and sign with their own wallet — this is a constraint from Venice, not a design choice, but it has the benefit of making each agent sovereign with no shared credentials.Onchain addresses (Base Mainnet)
| Contract | Address |
|---|---|
| VVV Token | 0xacfe6019ed1a7dc6f7b508c02d1b04ec88cc21bf |
| Venice Staking (sVVV) | 0x321b7ff75154472b18edb199033ff4d116f340ff |
| DIEM | 0xF4d97F2da56e8c3098f3a8D538DB630A2606a024 |
Inference
sherwood venice infer calls Venice’s chat completions API for private reasoning and strategy research:
Governance proposal path
TheVeniceInferenceStrategy is an ERC-1167 clonable contract that any syndicate can use. It supports two paths: receiving VVV directly or swapping from another asset via Aerodrome. Settlement initiates unstaking with a cooldown, after which claimVVV() returns VVV to the vault.
See the full strategy documentation: Venice Inference Strategy.
Generate proposal call files with --write-calls: