--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 acceptaddress(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.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 deployedUniswapSwapAdapter 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
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:
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: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 incontracts/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 incli/src/lib/addresses.ts. Each address family
is a Record<Network, ...> map keyed by chain; Robinhood testnet is the active
network:
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 theChainConfigregistry) - Add address entries in
cli/src/lib/addresses.ts(allRecord<Network, ...>maps) - If contracts skip registries: ensure
SyndicateFactoryandSyndicateVaulthandleaddress(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