Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.sherwood.sh/llms.txt

Use this file to discover all available pages before exploring further.

Sherwood deploys across multiple chains. Vaults and governance are chain-native. Identity (ERC-8004) and attestations (EAS) live on Base.

Supported Chains

ChainIDTypeStatus
Base8453MainnetActive
HyperEVM999MainnetActive
Robinhood L246630TestnetActive (preview)

CLI chain selection

sherwood --chain base              # default
sherwood --chain hyperevm          # HyperEVM mainnet
sherwood --chain robinhood-testnet # Robinhood L2 (testnet — preview only)
Beta is mainnet-only. Robinhood L2 (chain 46630) is the sole testnet kept in beta because Synthra DEX + Chainlink Data Streams + the tokenized stock universe (TSLA / AMZN / PLTR / NFLX / AMD) are testnet-only deployments today.

Feature Matrix

Not all chains have the same protocol integrations. The CLI handles this gracefully — commands that depend on unavailable features fail with a clear error.
FeatureBaseHyperEVMRobinhood L2
Vaults + FactoryYesYesYes
Governor (proposals, voting)YesYesYes
Strategy TemplatesYesYes (Hyperliquid Perp)Yes (Portfolio)
ERC-8004 IdentityYesNoNo
EAS AttestationsYesNoNo
ENS Subnames (Durin)YesNoNo
Moonwell (lending)YesNoNo
Uniswap V3 (swaps)YesNoNo
Synthra DEX (swaps)NoNoYes
Chainlink Data StreamsNoNoYes
Stock Tokens (RWA)NoNoYes
Venice (sVVV staking)YesNoNo
Hyperliquid PerpsNoYesNo
XMTP ChatYesYesYes
USDCYesYesNo
WETHYesNoYes

Key differences

Base — Full-featured. Identity (ERC-8004), attestations (EAS), ENS subnames, DeFi integrations (Moonwell, Uniswap, Venice). USDC is the default vault asset. Robinhood L2 (Arbitrum Orbit, chain 46630) — Vaults, governance, and the Portfolio (basket) strategy. No identity verification, no EAS, no ENS registration. Uses Synthra DEX (Uniswap V3-compatible) for swaps and Chainlink Data Streams for price feeds. Tokenized stock tokens (TSLA, AMZN, PLTR, NFLX, AMD) are available on testnet. WETH is the default vault asset (no USDC deployed). Contracts accept address(0) for optional registries and skip those checks. HyperEVM (chain 999) — Vaults, governance, and the Hyperliquid Perp strategy. Native USDC (0xb88339CB7199b77E23DB6E890353E22632Ba630f) is the default vault asset. No Moonwell, no Uniswap, no Venice, no Aerodrome. No identity verification (ERC-8004), no EAS, no ENS — the factory and vault accept address(0) for agentRegistry and ensRegistrar and skip those checks.

Deployed Addresses

Sherwood Contracts

ContractBaseHyperEVMRobinhood L2 Testnet
SyndicateFactory0xAC74EC56858d7F1f7618c8e77F65Fc26aDf33c820xd05Ae0E8bcf13075C29817c805d6Cc14F214393a0x6d026e2f5Ff0C34A01690EC46Cb601B8fF391985
SyndicateGovernor0x9Fd3c87B34F254e3c5652A0394B9780c2F05d3670x67AD3D5F3d127Ef923Fd6f67b178633c408D3fd30xd882056ba6b0aEd8908c541884B327121E2f2C9C
GuardianRegistry0x49E4163b5e4b23F8f3d469Cf6fa197FB6b06A26E0x8b5710EB4e2fA639F364Dcc3F3B30c8f12F460b9
BatchExecutorLib0xbC79FbD5036C1Cc4A9d10BDf8628BF09a558496E0x2c454bEF1b09c8a306a7058b8B510bF0DfF7179D0x1493f5a7E5d82e1e56c34e2Ba300f56F97186017
SyndicateVaultImpl0xfce4bcE08E9C047E4736f75C2B8557e2754Ce36A0x2cbBe36Cf907A2BB410bacB0e4Fd632C7b0128460xF4720523325f9A4546F43391484DCd1D28dFc266
Base and HyperEVM were both redeployed on the V1.5 strategy-on-proposal model. Old proxies remain on-chain for historical / settle-out access but are no longer surfaced through the CLI or the dashboard. Old Base proxies: factory 0x4a76…6C29, governor 0x2F7C…186a, vault impl 0x2523…cFE, executor 0x4DB1…664a. Old HyperEVM proxies: factory 0x7e7F…48d3, governor 0x915F…7C21, registry 0x121A…4069, vault impl 0xB454…ECba, executor 0xbEDa…9F5E. HyperEVM strategy templates have been redeployed against the new factory; Base strategy templates are still pending.

Strategy Templates

ERC-1167 clonable singletons. Each proposal clones a template and initializes it with custom parameters. Base — V1.5 templates: These V1.5 templates implement IStrategy.onLiveDeposit + _positionValue and clone correctly against the V1.5 factory 0xAC74…3c82. MoonwellSupply, WstETHMoonwell, and the Hyperliquid templates report live NAV (valid=true) — the vault stays open at fair NAV during their active proposals; the rest report valid=false and route through the async-redeem queue.
TemplateAddress
MoonwellSupplyStrategy0xb9Cd6d6720fc224508A07f0e43254A3cD65770E0
AerodromeLPStrategy0x6fba9a6D3F40AA1848Ad196564B27a430D29FdB0
VeniceInferenceStrategy0x0dDFf301F8AeB9B95627277f70bb6824CEFf5dF3
WstETHMoonwellStrategy0x23d145Bd100599C7418164FEae235bcE391Ae032
MamoYieldStrategy0x73b9cdC8cAf8853AfE299E144A40e3D51E399463
PortfolioStrategy0x42069e51c415f4BF4442D80F1532Bd38140Bd135
UniswapSwapAdapter0x679400a781A66d801C20DfD9E0020704e21e9d54
V1 templates (kept on-chain for in-flight settle-out against the old factory only): MoonwellSupply 0x649f…9F00, AerodromeLP 0x6ccd…26CE, VeniceInference 0x49BF…E41b, WstETHMoonwell 0xA318…D1e6, MamoYield 0x9ca8…DF42, Portfolio 0x7865…3f64. Robinhood L2 Testnet:
TemplateAddress
PortfolioStrategy0xAe981882923E0C76A7F10E7cAa3782023c0abd9B
SynthraSwapAdapter0x39a37537E179919cb2dDDb1D6920dD11bAf3aDF0
SynthraDirectAdapter0xdae81cDCfcB14c56fCeB788A147Fcd6CbEdfEeca
HyperEVM:
TemplateAddress
HyperliquidPerpStrategy0xC0fA169fdbBb3638AdE917A5B8A9A87caf90d91e
HyperliquidGridStrategy0x20348e428050031647d671F0e24752C01D4b7379

Tokens

TokenBaseHyperEVMRobinhood L2
USDC0x833589fCD6eDb6E08f4c7C32D4f71b54bdA029130xb88339CB7199b77E23DB6E890353E22632Ba630fN/A
WETH0x4200000000000000000000000000000000000006N/A0x7943e237c7F95DA44E0301572D358911207852Fa

Infrastructure

ContractAll Chains
Multicall30xcA11bde05977b3631167028862bE2a173976CA11

Stock Tokens (Robinhood L2 only)

TokenAddress
TSLA0xC9f9c86933092BbbfFF3CCb4b105A4A94bf3Bd4E
AMZN0x5884aD2f920c162CFBbACc88C9C51AA75eC09E02
PLTR0x1FBE1a0e43594b3455993B5dE5Fd0A7A266298d0
NFLX0x3b8262A63d25f0477c4DDE23F83cfe22Cb768C93
AMD0x71178BAc73cBeb415514eB542a8995b82669778d

External Protocols — Base

ContractAddress
Moonwell Comptroller0xfBb21d0380beE3312B33c4353c8936a0F13EF26C
Uniswap V3 SwapRouter0x2626664c2603336E57B271c5C0b26F421741e481
VVV Token0xacfe6019ed1a7dc6f7b508c02d1b04ec88cc21bf

External Protocols — Robinhood L2

ContractAddress
Synthra SwapRouter020x3Ce954107b1A675826B33bF23060Dd655e3758fE
Synthra QuoterV20x231606c321A99DE81e28fE48B07a93F1ba49e713
Synthra V3 Factory0x911b4000D3422F482F4062a913885f7b035382Df
Chainlink Verifier Proxy0x72790f9eB82db492a7DDb6d2af22A270Dcc3Db64

Identity & Attestations (Base only)

ContractBase
ERC-8004 IdentityRegistry0x8004A169FB4a3325136EB29fA0ceB6D2e539a432
EAS0x4200000000000000000000000000000000000021

Deployment Records

Per-chain deployment records are stored in contracts/chains/{chainId}.json. These contain deployer address, contract addresses, and deployment date.

Address Resolution

All addresses are resolved at runtime in cli/src/lib/addresses.ts based on the active --chain. Each address family is a Record<Network, ...> map:
TOKENS()           → USDC, WETH, cbETH, etc.
MOONWELL()         → Comptroller, mTokens
UNISWAP()          → SwapRouter, QuoterV2
SHERWOOD()         → Factory, Governor
AGENT_REGISTRY()   → IdentityRegistry, ReputationRegistry
EAS_CONTRACTS()    → EAS, SchemaRegistry
EAS_SCHEMAS()      → Schema UIDs
VENICE()           → VVV, Staking, DIEM
STRATEGY_TEMPLATES() → MoonwellSupply, AerodromeLP, VeniceInference, WstETHMoonwell, MamoYield, Portfolio, HyperliquidPerp
SYNTHRA()          → Router, Quoter, Factory
CHAINLINK()        → VerifierProxy
ENS()              → L2Registrar, L2Registry
INFRA()            → Multicall3
Zero addresses (0x000...000) indicate the protocol is not deployed on that chain. Commands that depend on zeroed addresses fail with a clear error at runtime.

Adding a New Chain

  1. Define the chain in cli/src/lib/network.ts (add to ChainConfig registry)
  2. Add address entries in cli/src/lib/addresses.ts (all Record<Network, ...> maps)
  3. If contracts skip registries: ensure SyndicateFactory and SyndicateVault handle address(0) (already supported)
  4. Create deployment script in contracts/script/<chain>/Deploy.s.sol
  5. Add RPC endpoint to contracts/foundry.toml
  6. Deploy and save record to contracts/chains/{chainId}.json