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
| Chain | ID | Type | Status |
|---|
| Robinhood testnet | 46630 | Testnet (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
| Feature | Robinhood testnet (46630) |
|---|
| Vaults + Factory | Yes |
| Governor (proposals, voting) | Yes |
| Guardian layer (registry + sWOOD) | Yes |
| Strategy Factory (keyless deploy) | Yes |
| Live NAV (PriceRouter + adapter) | Yes |
| Portfolio strategy | Yes |
| Synthra DEX (swaps) | Yes |
| Chainlink Data Streams | Yes |
| Stock Tokens (RWA) | Yes (TSLA / AMZN / PLTR / NFLX / AMD) |
| XMTP Chat | Yes |
| WETH (default vault asset) | Yes |
| ERC-8004 Identity | Not yet |
| EAS Attestations | Not yet |
| ENS Subnames (Durin) | Not yet |
| Moonwell / Aerodrome / Venice / Hyperliquid | Not yet |
| USDC | No — 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
| Contract | Address (46630) |
|---|
| SyndicateFactory | 0xB9E71Fb33075328d6e94eCFFf8a8629D6d057cce |
| GovernorBeacon | 0x11B726c49E0bAc95bEafF8d648cf3030Dc11B73a |
| ProtocolConfig | 0xEe6DfE03353CEf1d80F38FbDdD30ce5Fb0531929 |
| SyndicateVaultImpl | 0x189160156d470B9ce8A55206DE19Ea60D2638ec6 |
| BatchExecutorLib | 0xd83dc3A79Bb41a02Ca7aC812c0f52212C1BdBC1B |
| GuardianRegistry | 0x57f0fa384d0d7e2F234535d1235440312866872B |
| StakedWood (sWOOD) | 0x15F48A9f24c8ECaa8f03c28Ecd1a3b4784CdCb3c |
| WOOD token (fixture) | 0xCCb4fB59cf40de1E23083037ee81Da1DD747D8d7 |
| PriceRouter | 0xDd302ffcfA08071780eC1A2f12BccFB9ba6b6731 |
| StrategyFactory | 0xE1D082ef1CE17f9C6a46e97928337267BFF0C309 |
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.
| Template | Address |
|---|
| PortfolioStrategy | 0x67420Cc504d70a42Adfd8867d878afe0978C7d10 |
| 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
| Token | Address (46630) |
|---|
| WETH (default vault asset) | 0x7943e237c7F95DA44E0301572D358911207852Fa |
Stock Tokens
| Token | Address |
|---|
| TSLA | 0xC9f9c86933092BbbfFF3CCb4b105A4A94bf3Bd4E |
| AMZN | 0x5884aD2f920c162CFBbACc88C9C51AA75eC09E02 |
| PLTR | 0x1FBE1a0e43594b3455993B5dE5Fd0A7A266298d0 |
| NFLX | 0x3b8262A63d25f0477c4DDE23F83cfe22Cb768C93 |
| AMD | 0x71178BAc73cBeb415514eB542a8995b82669778d |
External Protocols
Synthra is Uniswap-V3-compatible; the deployed UniswapSwapAdapter is backed by the
Synthra router plus a QuoterV2 shim.
| Contract | Address |
|---|
| Synthra SwapRouter02 | 0x3Ce954107b1A675826B33bF23060Dd655e3758fE |
| Synthra QuoterV2 | 0x231606c321A99DE81e28fE48B07a93F1ba49e713 |
| Synthra QuoterV2 shim | 0xb3C009aECAeDd5ccC62Ec12eDAAA55F19C4A1eFb |
| Synthra V3 Factory | 0x911b4000D3422F482F4062a913885f7b035382Df |
| Chainlink Verifier Proxy | 0x72790f9eB82db492a7DDb6d2af22A270Dcc3Db64 |
| Permit2 | 0x000000000022D473030F116dDEE9F6B43aC78BA3 |
| Multicall3 | 0xcA11bde05977b3631167028862bE2a173976CA11 |
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:
- Define the chain in
cli/src/lib/network.ts (add to the ChainConfig registry)
- Add address entries in
cli/src/lib/addresses.ts (all Record<Network, ...> maps)
- If contracts skip registries: ensure
SyndicateFactory and SyndicateVault handle address(0) (already supported)
- Create a deployment script in
contracts/script/<chain>/Deploy.s.sol
- Add the RPC endpoint to
contracts/foundry.toml
- Deploy and save the record to
contracts/chains/{chainId}.json