Not yet available on Robinhood testnet (chain 46630), Sherwood’s current deployment target. This strategy will come online as Sherwood expands to more chains.
WstETHMoonwellStrategy is a stacked yield strategy: it swaps WETH to wstETH via Aerodrome, then supplies wstETH to Moonwell’s lending market. The vault earns both Lido staking yield and Moonwell lending interest simultaneously.
Architecture
Yield Sources
Lido Staking
wstETH appreciates relative to ETH as Lido staking rewards accrue. This is embedded in the wstETH/WETH exchange rate.
Moonwell Lending
Supplying wstETH to Moonwell earns lending interest on top of the staking yield.
Lifecycle
| Phase | What happens | Who calls |
|---|---|---|
| Execute | Pull WETH → swap to wstETH (Aerodrome) → mint mwstETH (Moonwell) | Governor (proposal execution) |
| Executed | mwstETH accrues Lido staking + Moonwell lending yield | — |
| Settle | Redeem mwstETH → swap wstETH to WETH (Aerodrome) → push to vault | Governor (proposal settlement) |
Batch Calls
Execute
Settle
InitParams
The two slippage fields are per-unit rates scaled by 1e18, not absolute amounts. At swap time the contract computes
minOut = amountIn * rate / 1e18, so the floor scales with the actual amount swapped (safe for dynamic-all mode and for yield-accrued settle balances). Both rates are required — initialization reverts with InvalidAmount if either is 0.Tunable Parameters
The proposer can update slippage parameters in bothPending and Executed states (unlike other strategies which only allow updates while Executed):
| Parameter | Description |
|---|---|
minWethOutPerWsteth | Per-unit rate (1e18): min WETH per 1e18 wstETH on the settle swap |
minWstethOutPerWeth | Per-unit rate (1e18): min wstETH per 1e18 WETH on the execute swap |
deadlineOffset | Swap deadline in seconds from current block |
(newMinWethOutPerWsteth, newMinWstethOutPerWeth, newDeadlineOffset) — settle-side rate first:
Allowing param updates in
Pending state lets the proposer adjust slippage before execution — useful if the WETH/wstETH rate shifts during the voting period.CLI Usage
| Flag | Description | Default |
|---|---|---|
--amount <n> | Amount of WETH to deploy | required |
--slippage <bps> | Slippage tolerance in basis points | 500 (5%) |
--slippage value into the two 1e18-scaled per-unit rates (minWstethOutPerWeth, minWethOutPerWsteth). For example a 5% (500 bps) tolerance produces a rate near 0.95e18, and the contract enforces minOut = amountIn * rate / 1e18 at each swap.
Vault Liquidity During a Proposal
This strategy is Lane B only — it does not overridepositions(), so the vault reports no priceable position for it and there is no oracle instant-lane. While a proposal on this strategy is active, deposits and redeems go through the Lane B async queue: requestDeposit / requestRedeem escrow in the VaultWithdrawalQueue and settle at the single frozen, realized per-proposal price stamped when the proposal settles. Outside a proposal, entry/exit is instant ERC-4626 against vault float.
The chainlinkWstethEthFeed is retained for off-chain reference only — it is not consumed on-chain and does not drive vault NAV. See Deposits & Withdrawals for the full two-lane model.
Addresses (Base reference)
| Contract | Address |
|---|---|
| WstETHMoonwellStrategy template | 0x23d145Bd100599C7418164FEae235bcE391Ae032 |
| WETH | 0x4200000000000000000000000000000000000006 |
| wstETH | 0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452 |
| Moonwell mwstETH | 0x627Fe393Bc6EdDA28e99AE648fD6fF362514304b |
| Aerodrome Router | 0xcF77a3Ba9A5CA399B7c97c74d54e5b1Beb874E43 |
| Aerodrome Factory | 0x420DD381b31aEf6683db6B902084cB0FFECe40Da |
| Chainlink WSTETH/ETH feed | 0x43a5C292A453A3bF3606fa856197f09D7B74251a |