
Restake to grow vault
Don’t just stake, restake to grow.
About
The problem it solves The Problem DAOs often stake large amounts of ETH or LSTs (like stETH, eETH, or rETH) to earn yield. However, that yield is usually auto-compounded into the treasury, with no direct link to ecosystem growth. • Idle yield compounds silently • Builders and public goods go underfunded • There’s no automated treasury-to-ecosystem flow The Solution Restake-to-Grow Vault introduces programmable yield routing through Octant v2 vaults. Here’s how it works: 1. DAO deposits ETH, stETH, or eETH into the vault 2. The vault allocates funds to yield strategies (Aave, EigenLayer, Yearn v3, etc.) 3. When yield is harvested: o 70% auto-compounds back to the treasury o 30% flows into a GrowthPool smart contract 4. DAO governance votes on how GrowthPool funds are used (grants, incentives, bounties, etc.) This creates a flywheel, staking yield continuously funds ecosystem growth, attracting more users and developers, and ultimately more deposits.
How it's made
Challenges we ran into Contract Architecture and Interdependencies One of the biggest challenges was structuring how the contracts — ASSETToken, YieldDistributor, and MainVault — would interact securely. Ensuring proper constructor arguments, minting permissions, and ownership between these contracts required careful planning to prevent circular dependencies or unauthorized minting. Constructor Argument Errors While compiling and deploying, I encountered the error: “No arguments passed to the base constructor. Specify the arguments or mark as abstract.” This happened because OpenZeppelin’s Ownable contract in Solidity 0.8.x requires explicit initialization. Understanding how to correctly pass constructor arguments and call the base constructor (Ownable(msg.sender) or Ownable(initialOwner)) helped fix this.