Skip to main content
Sherwood deploys on two chains. Robinhood testnet (chain 46630) — an Arbitrum Orbit L2 — is the CLI’s default target. The Robinhood mainnet fork (chain 9994663), a Tenderly Virtual TestNet, carries the latest protocol build and is where the newest governance and guardian contracts land first; reach it with --chain robinhood-fork.

Chain

On Robinhood testnet the post-audit stack is deployed: vaults, governance, the guardian layer (GuardianRegistry + StakedWood + TierRegistry, with a WOOD fixture token), the StrategyFactory keyless clone+init path, and a Uniswap-compatible swap adapter backed by Synthra via a QuoterV2 shim.

Feature Matrix

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 — Robinhood Testnet (46630)

Source of truth: contracts/chains/46630.json.
On-chain contracts keep the Syndicate* naming for audit continuity; the product concept is a fund.
This stack was redeployed on 2026-08-21 after the security audit. The previous deployment — and the 9 legacy syndicates created under its factory — is superseded: those contracts are still on-chain but are no longer the protocol. Every address below is from the post-audit deploy.

Sherwood Contracts

Guardian layer: The challenge game, token court, proposer-bond escrow, and exposure ledger are not deployed on this chain — they live on the mainnet fork only. On the fork, propose also locks a risk-scaled proposer bond in WOOD. See Proposer bond. That pull is separate from the 10,000 WOOD owner stake required at fund create. 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. Portfolio is the only strategy template approved on this chain. The Morpho supply and concentrated-liquidity templates exist on the mainnet fork only. A strategy is never trusted for value. The vault’s totalAssets() is its own idle float net of the queue reserve and escrowed fees — it carries no strategy-reported term at all. While a proposal is live, entry and exit escrow in the async-redeem queue and settle at one frozen per-proposal price stamped at settlement. See Vault Liquidity for the queue mechanics.

Tokens

Each fund chooses its deposit asset at creation (any ERC-20). On this chain that means WETH — specifically Synthra’s WETH9, which holds all stock-DEX liquidity here. Plain ETH auto-wraps into it on deposit. A second, canonical WETH also exists but its pools are effectively empty; do not target it. The post-audit factory has no funds created against it yet, so pick the Synthra WETH9 below. There is no USDC on this chain. Funds that want a stablecoin base have no deployed option here; use WETH.

Stock Tokens

External Protocols

Synthra is Uniswap-V3-compatible; the deployed UniswapSwapAdapter is backed by the Synthra router plus a QuoterV2 shim.

Robinhood Mainnet Fork (chain 9994663)

A fork of Robinhood Chain mainnet run as a Tenderly Virtual TestNet: real mainnet state — USDG, the official Uniswap v3 and v4 deployments, Chainlink push feeds, and tokenized-stock liquidity — with test capital. It runs the latest protocol build, so contracts that are not on Robinhood testnet yet (the challenge game, token court, proposer-bond escrow, exposure ledger, tier registry) are live here first.

Connecting

This endpoint is public: it serves reads and accepts broadcast transactions, and it is the RPC the CLI and SDK bundle as the default for chain 9994663 — no setup needed. State-cheat access (tenderly_setBalance, tenderly_setStorageAt, evm_increaseTime, and the rest of the vnet admin surface) is not exposed here; those calls need the vnet’s private admin RPC from the Tenderly dashboard. Explorer: dashboard.tenderly.co/explorer/vnet/6ad5961e… Point the CLI at the fork with --chain robinhood-fork:
To use a different endpoint — the admin RPC, or a freshly minted vnet — set ROBINHOOD_FORK_RPC_URL, which takes precedence over the bundled default:
A Tenderly vnet is ephemeral. If the RPC above stops answering, the vnet has been replaced — mint a new one and override it with ROBINHOOD_FORK_RPC_URL until the bundled default catches up.

Test funds

The public RPC serves reads and broadcasts, but it will not mint you a balance — the state cheats that do are behind the admin endpoint. The Explorer runs a faucet for the fork instead. One claim tops your address up by 1 ETH, 15,000 WOOD, and 1,000 USDG, added on top of whatever it already holds:
Any address works, so fund a fresh EOA before you point the CLI at the fork. You get one claim per address and one per IP every 24 hours, whichever limit you reach first; a repeat claim answers 429 with a retryAfter in seconds. The faucet is fork-only — there is nothing at this path for chain 46630.

Fork Addresses (9994663)

Source of truth: contracts/chains/9994663.json. Guardian and challenge layer — the newest contracts, deployed here first: Proposals on this chain pull a second WOOD amount (the proposer bond) into that escrow. Quote via ExposureLedger.proposerBondWood — it scales (~1% of extractable value at the default bps). Full write-up: Proposer bond. Strategy templates and the swap adapter. Portfolio is the strategy exposed by sherwood strategy list on this chain: Tokens. Unlike Robinhood testnet, this chain has USDG — the mainnet stablecoin — alongside WETH, and WOOD here is a real Uniswap-traded token rather than a fixture: The fork also carries the mainnet tokenized-stock universe (AAPL, TSLA, NVDA, MSFT, AMZN, META, AMD, GOOGL, SPY, QQQ, SLV) with Chainlink push feeds for each — a wider set than Robinhood testnet’s five. Those addresses live in contracts/chains/9994663.json.

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