- Node.js 22.16.0
- Foundry Stable
- Clone the repository:
# Clone repository
git clone https://github.com/golemfoundation/octant-v2-core.git
cd octant-v2-core- Install dependencies:
# Install Node.js and Foundry dependencies
corepack enable
yarn install
forge soldeer installWe're using soldeer as dependency manager for Solidity contracts, which allows us to manage Solidity versions and dependencies in a consistent manner.
- Configure environment:
Setup lint hooks
yarn initCopy the environment template
cp .env.template .env
# Edit .env with your configuration
# Required fields:
# - RPC_URL: Your RPC endpoint
# - PRIVATE_KEY: Your wallet private key
# - ETHERSCAN_API_KEY: For contract verification
# - Other fields as needed for your use caseYield Strategies: Generate yield from external protocols (Lido, Sky, Morpho, etc.) Allocation Mechanisms: Democratic systems for deciding resource distribution Dragon Protocol: Advanced Safe integration for automated cross-protocol operations Factories: Standardized deployment contracts with parameter validation Utilities: Shared libraries and helper contracts
Vaults
↓
External Protocols → Strategies → → → →
↓ ↓
Safe Modules → Dragon Routers → Allocation Mechanisms
The foundational vault and strategy infrastructure:
- BaseStrategy.sol: Abstract base class for all yield-generating strategies
- MultistrategyVault.sol: Main vault implementation managing multiple strategies with risk distribution
- MultistrategyLockedVault.sol: Vault variant with lockup periods and non-transferable shares
- PaymentSplitter.sol: Handles proportional distribution of funds among recipients
- TokenizedStrategy.sol: ERC-4626 compliant strategy implementation with proxy pattern
- interfaces/: Core protocol interfaces
IBaseStrategy.sol,IMultistrategyVault.sol,ITokenizedStrategy.sol, etc.
- libs/: Core-specific utility libraries
DebtManagementLib.sol: Vault debt management logicERC20SafeLib.sol: Safe ERC20 operations for vaultsStrategyManagementLib.sol: Vault strategy management logic
Yield-generating strategy contracts:
- interfaces/: Strategy-specific interfaces
IBaseHealthCheck.sol,IVault.sol,IPSM.sol,ISky.sol
- periphery/: Common strategy utilities
BaseHealthCheck.sol: Health monitoring for strategiesUniswapV3Swapper.sol: Uniswap V3 integration utilities
- yieldDonating/: Strategies that donate generated yield
SkyCompounderStrategy.sol: Sky protocol yield donation strategyUsdsFarmerUsdcStrategy.sol: USDS farming strategyYieldDonatingTokenizedStrategy.sol: Generic yield donation base
- yieldSkimming/: Strategies that capture yield for protocol benefit
LidoStrategy.sol: Lido staking strategyMorphoCompounderStrategy.sol: Morpho protocol compounding strategyYieldSkimmingTokenizedStrategy.sol: Generic yield capture base
Deployment and creation contracts:
- LidoStrategyFactory.sol: Factory for Lido strategy vaults
- MorphoCompounderStrategyFactory.sol: Factory for Morpho strategy vaults
- MultistrategyVaultFactory.sol: Factory for core multistrategy vaults
- PaymentSplitterFactory.sol: Factory for payment splitter contracts
- SkyCompounderStrategyFactory.sol: Factory for Sky strategy contracts
- interfaces/: Factory-related interfaces
IMultistrategyVaultFactory.sol
Impact and regenerative finance functionality:
- RegenEarningPowerCalculator.sol: Calculates earning power for regen participants
- RegenStaker.sol: Staking functionality for regenerative finance
- interfaces/: Regen-specific interfaces
IFundingRound.sol: Funding round interfaceIAccessControlledEarningPowerCalculator.sol: Access-controlled earning power
Advanced Safe integration and cross-protocol operations:
- BaseStrategy.sol: Dragon-specific strategy base class
- DragonRouter.sol: Central routing and coordination for cross-protocol operations
- LinearAllowanceExecutor.sol: Controlled spending limit execution
- ModuleProxyFactory.sol: Factory for creating Safe modules
- SplitChecker.sol: Validation for fund splitting operations
- TokenizedStrategy.sol: Dragon-specific tokenized strategy implementation
- guards/: Safe transaction guards
antiLoopHoleGuard.sol: Prevents malicious transaction patterns
- interfaces/: Dragon-specific interfaces
- modules/: Safe modules for automated execution
LinearAllowanceSingletonForGnosisSafe.sol: Linear allowance Safe integrationMethYieldStrategy.sol: Meth yield strategy moduleOctantRewardsSafe.sol: Octant rewards distribution moduleYearnPolygonUsdcStrategy.sol: Yearn strategy module
- vaults/: Dragon-specific vault implementations
DragonBaseStrategy.sol: Base dragon strategy with router integrationDragonTokenizedStrategy.sol: Dragon strategy with lockup + non-transferable sharesPassport.sol: Identity and access managementYieldBearingDragonTokenizedStrategy.sol: Dragon strategy with yield distribution
Shared utilities and helper contracts:
- IAddressSet.sol: Address set interface for access control
- AddressSet.sol: Address set implementation (allowsets and blocksets)
- interfaces/: Utility interfaces
- hats/: Hats protocol integration utilities
AbstractHatsManager.sol: Abstract base for hat managementDragonHatter.sol: Dragon-specific hat managementHatsErrors.sol: Hat-related error definitionsSimpleEligibilityAndToggle.sol: Basic hat eligibility logicinterfaces/: Hat-specific interfaces (IHatsEligibility.sol,IHatsToggle.sol)
- libs/: Utility libraries
Maths/WadRay.sol: Mathematical operations with WAD/RAY precisionSafe/MultiSendCallOnly.sol: Safe multi-transaction utilities
- routers-transformers/: Trading and transformation utilities
Trader.sol: DCA trading functionalityTraderBotEntry.sol: Bot entry point for automated trading
- vendor/: Third-party integrations and interfaces
0xSplits/: 0xSplits protocol interfaces and utilitiesshamirlabs/: Shamir Labs interfacesuniswap/: Uniswap protocol interfaces
- constants.sol: Protocol-wide constants and parameters
- errors.sol: Shared error definitions for gas efficiency
- interfaces/: Global interfaces not specific to any module
IAccountant.sol,IDragon.sol,IEvents.sol,IFactory.sol, etc.deprecated/: Legacy interfaces maintained for compatibility
Module-specific focused testing:
- core/: Core vault and strategy unit tests
vaults/: MultistrategyVault and related testssplitter/: PaymentSplitter tests
- mechanisms/: Allocation mechanism tests
voting-strategy/: Voting mechanism testsharness/: Test harness contracts
- factories/: Factory contract tests
- utils/: Utility contract tests
routers-transformers/: Trading functionality testsaddressset/: Address set functionality tests
- zodiac-core/: Dragon protocol unit tests
vaults/: Dragon-specific vault testsmodules/: Safe module tests
Cross-module workflow testing:
- Setup.t.sol: Shared integration test setup
- core/: Core protocol integration tests
vaults/: Vault workflow integration tests
- factories/: Factory integration and deployment tests
- hats/: Hats protocol integration tests
- regen/: Regenerative finance integration tests
- strategies/: Strategy integration tests
yieldDonating/: Yield donation strategy testsyieldSkimming/: Yield capture strategy tests
- zodiac-core/: Dragon protocol integration tests
- core/: Core protocol mocks
tokenized-strategies/: Strategy mocks for testing
- zodiac-core/: Dragon protocol mocks
TokenizedStrategy (Implementation)
├── DragonTokenizedStrategy (Adds lockup + non-transferable shares)
└── YieldBearingDragonTokenizedStrategy (Adds yield distribution)
BaseStrategy (Abstract)
├── DragonBaseStrategy (Adds router integration)
├── YieldDonatingTokenizedStrategy (Donates yield)
└── YieldSkimmingTokenizedStrategy (Skims yield)
Testing Strategy:
- Unit tests in
test/unit/focus on individual contract logic - Integration tests in
test/integration/test cross-contract workflows - Mock contracts in
test/mocks/provide controlled testing environments - Use
--isolateflag for accurate gas measurements
Adding New Strategy:
- Inherit from appropriate base strategy contract in
src/core/orsrc/zodiac-core/ - Implement required abstract functions (
_deployFunds,_freeFunds, etc.) - Add strategy-specific tests in
test/unit/core/ortest/unit/zodiac-core/ - Create factory in
src/factories/if permissionless deployment needed - Update documentation with strategy-specific details