Skip to main content
Sherwood currently deploys on Robinhood testnet (chain 46630) — an Arbitrum Orbit L2. This is the initial deployment target; the protocol is chain-native and will expand to other chains over time, but for now every vault, proposal, and strategy lives on Robinhood testnet. The CLI targets it by default — there is no chain to select.

Chain

ChainIDTypeStatus
Robinhood testnet46630Testnet (Arbitrum Orbit)Active
The full V2 stack is deployed: vaults, governance, the guardian layer (GuardianRegistry + StakedWood with a WOOD fixture token), the StrategyFactory keyless clone+init path, and the V2 live-NAV surface (PriceRouter + a Uniswap-compatible swap adapter backed by Synthra via a QuoterV2 shim).

Feature Matrix

FeatureRobinhood testnet (46630)
Vaults + FactoryYes
Governor (proposals, voting)Yes
Guardian layer (registry + sWOOD)Yes
Strategy Factory (keyless deploy)Yes
Live NAV (PriceRouter + adapter)Yes
Portfolio strategyYes
Synthra DEX (swaps)Yes
Chainlink Data StreamsYes
Stock Tokens (RWA)Yes (TSLA / AMZN / PLTR / NFLX / AMD)
XMTP ChatYes
WETH (default vault asset)Yes
ERC-8004 IdentityNot yet
EAS AttestationsNot yet
ENS Subnames (Durin)Not yet
Moonwell / Aerodrome / Venice / HyperliquidNot yet
USDCNo — not deployed

Key details

Robinhood testnet (Arbitrum Orbit, chain 46630) — Vaults, governance, the guardian layer, and the Portfolio (basket) strategy. Swaps route through Synthra (a Uniswap-V3-compatible concentrated-liquidity DEX); pricing uses Chainlink Data Streams via a verifier proxy. Tokenized stock tokens (TSLA, AMZN, PLTR, NFLX, AMD) are available for portfolio strategies. WETH is the default vault asset (no USDC is deployed). Identity verification (ERC-8004), EAS attestations, and ENS registration are not active on this chain yet — the factory and vault accept address(0) for optional registries and skip those checks.
What’s planned. Agentic trading strategies for tokenized real-world assets (RWAs) — stocks, ETFs, and other equities — live on Robinhood testnet today (Synthra DEX + Chainlink Data Streams, with a tokenized stock universe of TSLA, AMZN, PLTR, NFLX, AMD). Sherwood is built to be multi-chain; additional chains will come online over time.

Deployed Addresses

Source of truth: contracts/chains/46630.json.

Sherwood Contracts

ContractAddress (46630)
SyndicateFactory0xB9E71Fb33075328d6e94eCFFf8a8629D6d057cce
GovernorBeacon0x11B726c49E0bAc95bEafF8d648cf3030Dc11B73a
ProtocolConfig0xEe6DfE03353CEf1d80F38FbDdD30ce5Fb0531929
SyndicateVaultImpl0x189160156d470B9ce8A55206DE19Ea60D2638ec6
BatchExecutorLib0xd83dc3A79Bb41a02Ca7aC812c0f52212C1BdBC1B
GuardianRegistry0x57f0fa384d0d7e2F234535d1235440312866872B
StakedWood (sWOOD)0x15F48A9f24c8ECaa8f03c28Ecd1a3b4784CdCb3c
WOOD token (fixture)0xCCb4fB59cf40de1E23083037ee81Da1DD747D8d7
PriceRouter0xDd302ffcfA08071780eC1A2f12BccFB9ba6b6731
StrategyFactory0xE1D082ef1CE17f9C6a46e97928337267BFF0C309
There is no singleton SyndicateGovernor. Since PR #421 each vault’s governor is deployed per-vault — a BeaconProxy the factory creates at createSyndicate, all sharing one implementation through the GovernorBeacon above — and is resolved at runtime via factory.governorOf(vault). Protocol-level fees live on the shared ProtocolConfig (protocol-multisig-owned) and are snapshotted into each proposal at propose time.

Strategy Templates

ERC-1167 clonable singletons. Each proposal clones a template and initializes it with custom parameters.
TemplateAddress
PortfolioStrategy0x67420Cc504d70a42Adfd8867d878afe0978C7d10
UniswapSwapAdapter (Synthra-backed)0x4fc3492117cC3bbcE0b210D22a8DC244f9d86490
Under the V2 live-NAV model the strategy is never trusted for value: each template reports its on-venue holdings via IStrategy.positions(), and the vault prices them through the governance-owned PriceRouter per position kind — but only when that kind’s Lane A instant lane is enabled. The Portfolio strategy reports no priceable positions and is Lane B only — entry/exit during a proposal escrows in the async-redeem queue and settles at one frozen per-proposal price. See Vault Liquidity for the two-lane mechanics.

Tokens

TokenAddress (46630)
WETH (default vault asset)0x7943e237c7F95DA44E0301572D358911207852Fa

Stock Tokens

TokenAddress
TSLA0xC9f9c86933092BbbfFF3CCb4b105A4A94bf3Bd4E
AMZN0x5884aD2f920c162CFBbACc88C9C51AA75eC09E02
PLTR0x1FBE1a0e43594b3455993B5dE5Fd0A7A266298d0
NFLX0x3b8262A63d25f0477c4DDE23F83cfe22Cb768C93
AMD0x71178BAc73cBeb415514eB542a8995b82669778d

External Protocols

Synthra is Uniswap-V3-compatible; the deployed UniswapSwapAdapter is backed by the Synthra router plus a QuoterV2 shim.
ContractAddress
Synthra SwapRouter020x3Ce954107b1A675826B33bF23060Dd655e3758fE
Synthra QuoterV20x231606c321A99DE81e28fE48B07a93F1ba49e713
Synthra QuoterV2 shim0xb3C009aECAeDd5ccC62Ec12eDAAA55F19C4A1eFb
Synthra V3 Factory0x911b4000D3422F482F4062a913885f7b035382Df
Chainlink Verifier Proxy0x72790f9eB82db492a7DDb6d2af22A270Dcc3Db64
Permit20x000000000022D473030F116dDEE9F6B43aC78BA3
Multicall30xcA11bde05977b3631167028862bE2a173976CA11

Deployment Records

Per-chain deployment records are stored in contracts/chains/{chainId}.json (here, 46630.json). These contain the deployer address, contract addresses, and deployment metadata. Deploy scripts auto-write this file.

Address Resolution

Addresses are resolved at runtime in cli/src/lib/addresses.ts. Each address family is a Record<Network, ...> map keyed by chain; Robinhood testnet is the active network:
Per-vault governors are not in this table — each vault’s governor is resolved at runtime via factory.governorOf(vault) (see cli/src/lib/governor.ts). There is no singleton governor address to configure. Zero addresses (0x000...000) indicate a protocol is not deployed. Commands that depend on a zeroed address fail with a clear error at runtime.

Adding a New Chain

Sherwood is built to be multi-chain — Robinhood testnet is simply the first target. To bring up an additional chain:
  1. Define the chain in cli/src/lib/network.ts (add to the 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 a deployment script in contracts/script/<chain>/Deploy.s.sol
  5. Add the RPC endpoint to contracts/foundry.toml
  6. Deploy and save the record to contracts/chains/{chainId}.json