Skip to main content
Not yet available on Robinhood testnet (chain 46630), Sherwood’s current deployment target. This strategy will come online as Sherwood expands to more chains.
The MoonwellSupplyStrategy supplies tokens (USDC, WETH) to Moonwell’s lending market. The strategy holds mTokens that accrue interest over time, then redeems them on settlement.

Architecture

Lifecycle

PhaseWhat happensWho calls
ExecutePull USDC from vault → approve mToken → mint mUSDCGovernor (proposal execution)
ExecutedmUSDC accrues interest in the strategy clone
SettleRedeem all mUSDC → verify min output → push USDC back to vaultGovernor (proposal settlement)

Batch Calls

Execute

Settle

Settlement redeems all mUSDC held by the clone and pushes the underlying back to the vault. The governor calculates P&L from the difference.

InitParams

Init data is an ABI-encoded positional tuple (not a named struct) decoded in this order:
isNativeEthMarket flags markets like Moonwell mWETH that send native ETH (not ERC-20 WETH) on redeem. When set, settlement wraps the received ETH back to WETH via IWETH.deposit so the vault always receives ERC-20 tokens. On non-native markets it stays false, and any stray ETH transfer reverts (EthWrapFailed) as a dust-attack guard.

CLI Usage

FlagDescriptionDefault
--amount <n>Amount of asset to supplyrequired
--min-redeem <n>Min asset on settlementsame as amount
--token <symbol>Asset token (USDC, WETH)USDC

Tunable Parameters

While in Executed state, the proposer can update slippage parameters without a new proposal:
ParameterDescription
supplyAmountAmount of underlying (usually unchanged)
minRedeemAmountMinimum underlying on settlement

Live NAV

The strategy never self-reports a value. It reports one position of kind MOONWELL_SUPPLY (venue + kind + locator) via positions(), and the governance-owned PriceRouter prices it through the MoonwellSupplyAdapter (from mToken balance * exchangeRateStored, with a haircut and instant-size cap). Because Lane A is enabled for MOONWELL_SUPPLY (post-audit), while a proposal is active users get instant deposit / withdraw at live NAV — with a per-share lockup on Lane A entries until that proposal settles. If any pricing precondition fails at call time (and always as the universal fallback), entry / exit routes through the Lane B async queue instead, settling at the frozen per-proposal price. See Deposits & Withdrawals for the full two-lane mechanics.

Addresses (Base reference)

ContractAddress
MoonwellSupplyStrategy template0xb9Cd6d6720fc224508A07f0e43254A3cD65770E0
USDC0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
Moonwell mUSDC0xEdc817A28E8B93B03976FBd4a3dDBc9f7D176c22
Moonwell mWETH0x628ff693426583D9a7FB391E54366292F509D457
Moonwell Comptroller0xfBb21d0380beE3312B33c4353c8936a0F13EF26C