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

Supported Chains

ChainIDTypeStatus
Base8453MainnetActive
Base Sepolia84532TestnetActive
Robinhood L246630TestnetActive
HyperEVM999MainnetActive

CLI chain selection

sherwood --chain base              # default
sherwood --chain base-sepolia      # Base Sepolia testnet
sherwood --chain robinhood-testnet # Robinhood L2 testnet
sherwood --chain hyperevm          # HyperEVM mainnet
sherwood --testnet                 # alias for --chain base-sepolia (deprecated)
Testnets require ENABLE_TESTNET=true in your environment.

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.
FeatureBaseBase SepoliaRobinhood L2HyperEVM
Vaults + FactoryYesYesYesYes
Governor (proposals, voting)YesYesYesYes
Strategy TemplatesYesYesYes (Portfolio)Yes (Hyperliquid Perp)
ERC-8004 IdentityYesYesNoNo
EAS AttestationsYesYesNoNo
ENS Subnames (Durin)YesYesNoNo
Moonwell (lending)YesNoNoNo
Uniswap V3 (swaps)YesYesNoNo
Synthra DEX (swaps)NoNoYesNo
Chainlink Data StreamsNoNoYesNo
Stock Tokens (RWA)NoNoYesNo
Venice (sVVV staking)YesNoNoNo
Hyperliquid PerpsNoNoNoYes
XMTP ChatYesYesYesYes
USDCYesYesNoYes
WETHYesYesYesNo

Key differences

Base / Base Sepolia — 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

ContractBaseBase SepoliaRobinhood L2 TestnetHyperEVM
SyndicateFactory0xd5C4eE2E4c5B606b9401E69A3B3FeE169037C2840x121AaC2B96Ec365e457fcCc1C2ED5a61420640690x6d026e2f5Ff0C34A01690EC46Cb601B8fF3919850x4085EEa1E6d3D20E84D8Ae14964FAb8b899DA40a
SyndicateGovernor0x358AD8B492BcC710BE0D7c902D8702164c35DC340xE5ecf2B06E3f3e298B632C0cf6575f9d9422F55E0xd882056ba6b0aEd8908c541884B327121E2f2C9C0x7B4a2f3480FE101f88b2e3547A1bCf3eaaDE46bc
BatchExecutorLib0x1E831aB61Dc423bF678a2Ff8d9ce768E1e6D23380x847758DDb37F1709da5bB3d3F8aC395938e6a84f0x1493f5a7E5d82e1e56c34e2Ba300f56F971860170xdE317B80E66c5E8872C63B0620E2CbB73b5Bcd49
SyndicateVaultImpl0x7Fc3CD3Cfd3c5042b5ceA08D7144E2Bd5f53824B0xF4720523325f9A4546F43391484DCd1D28dFc2660x09005FEF3EF1879Af207C79416ae9d5059437bd4

Strategy Templates

ERC-1167 clonable singletons. Each proposal clones a template and initializes it with custom parameters. Base:
TemplateAddress
MoonwellSupplyStrategy0x72216571Ac847b29E1a5e3378e6ebCca3C2882da
AerodromeLPStrategy0x1c61c740702690B86b874ab929A6F04A4Ec56C1c
VeniceInferenceStrategy0xd882056ba6b0aEd8908c541884B327121E2f2C9C
WstETHMoonwellStrategy0x6d026e2f5Ff0C34A01690EC46Cb601B8fF391985
MamoYieldStrategy0x5c98808Ce5e51767ba2d969F75312eEFF0b14a6A
PortfolioStrategy0x7865eEA4063c22d0F55FdD412D345495c7b73f64
UniswapSwapAdapter0x121AaC2B96Ec365e457fcCc1C2ED5a6142064069
Robinhood L2 Testnet:
TemplateAddress
PortfolioStrategy0xAe981882923E0C76A7F10E7cAa3782023c0abd9B
SynthraSwapAdapter0x39a37537E179919cb2dDDb1D6920dD11bAf3aDF0
SynthraDirectAdapter0xdae81cDCfcB14c56fCeB788A147Fcd6CbEdfEeca
HyperEVM:
TemplateAddress
HyperliquidPerpStrategy0x1E831aB61Dc423bF678a2Ff8d9ce768E1e6D2338

Tokens

TokenBaseBase SepoliaRobinhood L2HyperEVM
USDC0x833589fCD6eDb6E08f4c7C32D4f71b54bdA029130x036CbD53842c5426634e7929541eC2318f3dCF7eN/A0xb88339CB7199b77E23DB6E890353E22632Ba630f
WETH0x42000000000000000000000000000000000000060x42000000000000000000000000000000000000060x7943e237c7F95DA44E0301572D358911207852FaN/A

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)

ContractBaseBase Sepolia
ERC-8004 IdentityRegistry0x8004A169FB4a3325136EB29fA0ceB6D2e539a4320x8004A818BFB912233c491871b3d84c89A494BD9e
EAS0x42000000000000000000000000000000000000210x4200000000000000000000000000000000000021

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