The ImpactVault smart contract is an ERC 4626 Vault, which is used to donate the revenues of a value-accruing token to a NGO. In the present case, users will deposit Lido ST-ETH and the staking yield will be distributed to Doctors Without Borders (MSF).
On Deposit of stETH, the user receives MSF-ETH. Withdrawals are instantaneous and handled in stETH only.
Deposits into the ImpactVault are further mediated by the LidoImpactVaultDepositor to convert-and-deposit ETH as well. When converting ETH, the user can choose which proportion of the obtained stETH is to be deposited into the Impact Vault while the remainder is sent back to them.
The depositor has the option of staking the obtained msfETH through the charityEscrow contract and receive MSF-Karma rewards. The charityEscrow implements a modified voting-escrow mechanism with several distinct features:
- Upon staking, users receive upfront a bonus in a transferrable ERC-20 token, the "MSF-Karma".
- The Bonus increases quadratically with the time locked.
- Users may unstake before the unlock if they burn MSF-Karma tokens.
- MSF-Karma tokens can be directly purchased from the smart contract.
A precise whitepaper on the charity-escrow logic is available here.
The system has been generalised to donate the revenues of any value-accruing ERC4626 Vault. FIrst Deployments are Done using mainnet Morpho Steakhouse SteakHouse USDC and Morpho Steakhouse SteakHouse USDT as underlyings.
- install
npm i - build contract using solidity :
npx hardhat compile - run tests
npx hardhat test - deploy
npx hardhat run scripts/deploy.ts --network mainnet
You can find all audit reports under the audits folder:
Contracts have been deployed to Ethereum Mainnet:
- msfETH (ImpactVault): 0x34f4e4b964a3e648723aE71AF5550FbC85E2e534
- ImpactVaultDepositor: 0x24fA1BaE144Bd97aF2875AE782299B6549726437
- MSF-Karma: 0x9ec579a11d0d9a866f4910bfeb6234e77a02cd5f
- Charity Escrow: 0x0b63AeFCf391122878f5b05CF345b9D1702064c4
- MetaMorphoImpactVault USDT: 0x4daE7B08BA283B2ddFC316846cFe247a69EbA097
- MetaMorphoImpactVault USDC: 0x364AB37c89acC82C1F07A26cc3C12185BF858E14
Stake2Care official website.
- โ Deployer has correct stETH balance at test start and can set stETH accrual
- โ Only deployer can set stETH accrual and call the mint function
- โ Anyone can submit by sending ETH directly to the stETH contract
- โ Deployer has correct msfETH balance at test start
- โ Depositor can Mint Asset by sending ETH to
receive()oflidoImpactVaultDepositorand then Withdraw - โ Depositor can Mint Asset by sending stETH via
depositAsset()function oflidoImpactVaultDepositor - โ Depositor can Mint Asset by sending ETH to
depositETH()oflidoImpactVaultDepositorwith a depositProportion of 80% - โ
depositToken()should revert withNotImplementedError - โ Only owner can set AutoCollectThreshold
- โ Depositor can mint shares by sending ETH via
mint()ofimpactVaultand then withdraw - โ
collectDonationsis timelocked for 3 days after second deposit - โ
collectDonationsdoes not update pending surplus if it is below autoCollectThreshold - โ
collectDonationscan be called with custom minimalTransfer to bypass minimalCollectAmount
- โ MSFP deployment should set the right name and symbol (1185ms)
- โ Only
MINTER_ROLEcould mint (90ms) - โ Only
DEFAULT_ADMIN_ROLEcouldrecoverERC20(88ms)
- โ CharityEscrow deployment should be possible only if
baseEarnRate_andyearlyBonus_below their max value (143ms)
- โ Only owner could
recoverERC20, but only if token is different from MSF-STETH - โ Only owner could
setPointPrice, but only if new price is not too low nor too high, unless if zero (46ms) - โ Only owner could
setEarnStructure, but only within allowed bounds - โ InvestorA locks his MSF-STETH into CharityEscrow for 3 years
- โ View functions
lockRewardandbaseRewardDeltareturn expected values - โ
totalSupplyreturns ImpactVault Balance - โ The
transfer,transferFromandapprovefunctions exist for CharityEscrow but are not implemented - โ user can buy Points at
pointPrice(42ms) - โ user cannot buy Points when
pointPriceis 0 - โ InvestorA can unlock his MSF-STETH after the end of the lock period (46ms)
- โ InvestorA can
increaseLockwith additional funds and duration - โ InvestorA can
increaseLockwith just additional funds (42ms) - โ InvestorA can
increaseLockwith just additional duration - โ InvestorA cannot
increaseLockifnewEffectiveLockDurationismaximumLockDurationor belowminimumLockDuration - โ InvestorA can
decreaseLockby just decreasing duration (38ms) - โ InvestorA can
decreaseLockby just decreasing amount (43ms) - โ When increasing Lock, due Time Reward stays similar (51ms)
- โ
decreaseLockis equivalent to anunlock, after lock duration ends - โ
decreaseLockdoes anunlock, ifnewEffectiveLockDurationis null if decrease exceeds duration (41ms) - โ
decreaseLockreduces alllockedBalanceifnewLockBalanceis null or if decrease exceeds balance - โ
decreaseLockreverts if new values are below minimums but non-zero
- โ Should deploy with correct name and symbol (50ms)
- โ Should set correct underlying vault
- โ Should set correct asset (same as underlying vault asset)
- โ Should approve underlying vault for max uint256
- โ Should have correct initial total supply after seeding (100 USDC)
- โ Should have correct decimals (6)
- โ Should have correct initial totalAssets (100 USDC)
- โ Should return underlying vault assets via convertToAssets
- โ Should increase by exact yield amount when underlying vault has yield
- โ Should decrease by exact loss amount when underlying vault has loss
- โ Should revert if deposit is below minimum
- โ Should mint shares exactly equal to assets when NAV = 1
- โ Should transfer exact assets to underlying vault
- โ Should emit Deposit event with correct values
- โ Should mint more shares when NAV < 1 (after loss)
- โ Should revert if assets needed are below minimum
- โ Should mint exact number of shares requested
- โ Should take exact assets +1 for shares when NAV = 1
- โ Should take fewer assets when NAV < 1
- โ Should withdraw exact assets requested (72ms)
- โ Should burn exact shares +1 when NAV = 1
- โ Should emit Withdraw event with correct values
- โ Should burn more shares after loss (NAV < 1)
- โ Should burn exact shares specified
- โ Should give exact assets - 1 when NAV = 1
- โ Should give fewer assets when NAV < 1
- โ Should give assets = shares - 1 after yield when NAV >= 1 (post donation collection)
- โ previewDeposit should return exact shares for deposit
- โ previewMint should return exact assets for mint
- โ previewWithdraw should return exact shares for withdraw (82ms)
- โ previewRedeem should return exact assets for redeem
- โ previewDeposit should match actual deposit exactly
- โ previewMint should match actual mint exactly
- โ previewWithdraw should match actual withdraw exactly (91ms)
- โ previewRedeem should match actual redeem exactly
- โ maxDeposit should return underlying vault's maxDeposit
- โ maxMint should return shares corresponding to maxDeposit
- โ maxWithdraw should return exact redeemable assets for owner (73ms)
- โ maxRedeem should return owner's shares
- โ convertToShares should be exact when NAV = 1
- โ convertToAssets should be exact when NAV = 1
- โ convertToShares should return more shares when NAV < 1
- โ convertToAssets should return fewer assets when NAV < 1
- โ convertToShares and convertToAssets should be inverse (within rounding)
- โ Should not update timelock if surplus is below minimal transfer threshold
- โ Should set timelock on first collection with surplus above threshold
- โ Should not transfer during timelock period
- โ Should transfer exact surplus to owner after 3-day timelock
- โ Should use default minimalCollectAmount when 0 is passed
- โ Should trigger collection via deposit when timelock expired
- โ Should only be callable by owner
- โ Should update minimalCollectAmount to exact value
- โ Should emit SetAutoCollectThreshold event with correct values
- โ Should only be callable by owner
- โ Should revert when trying to recover underlying vault tokens
- โ Should transfer exact amount of other ERC20 tokens to owner
- โ Should allow recovering the asset token sent directly
- โ Should emit RecoveredERC20 event with correct values
- โ Should have correct initial owner
- โ Should transfer ownership with 2-step process
- โ Should have decimals equal to asset decimals
- โ Should transfer exact amount between accounts (56ms)
- โ Should set exact allowance on approve
- โ Should transferFrom and reduce allowance exactly
- โ Total supply should equal sum of all balances
- โ User cannot withdraw more than maxWithdraw
- โ User cannot redeem more than maxRedeem
- โ After full redemption, user balance should be exactly zero
- โ Vault should never hold assets directly (all goes to underlying)
- โ totalAssets should equal underlying vault position exactly
- โ collectDonations should preserve user shares exactly
- โ Should handle deposit when totalSupply is 0 after all redemptions
- โ Should track exact balances through multiple deposits and withdrawals
- โ Should handle very large deposits correctly
- โ Should handle yield followed by loss scenario correctly
- โ Should receive fewer underlying shares due to deposit fee (56ms)
- โ Should calculate correct impact vault shares accounting for fee
- โ previewDeposit should match actual deposit with fee
- โ totalAssets should reflect fee impact correctly
- โ Should require more assets to mint due to deposit fee
- โ previewMint should match actual mint with fee
- โ Should burn more shares to withdraw due to fee (72ms)
- โ previewWithdraw should match actual withdraw with fee
- โ Should calculate exact shares burned with fee
- โ Should receive fewer assets when redeeming due to fee
- โ previewRedeem should match actual redeem with fee
- โ Should calculate exact assets received with fee
- โ maxWithdraw should account for withdraw fee
- โ Round-trip deposit then full redeem should reflect both fees (65ms)
- โ previewDeposit should match actual with both fees
- โ previewMint should match actual with both fees
- โ previewWithdraw should match actual with both fees (60ms)
- โ previewRedeem should match actual with both fees
- โ Yield collection should work correctly with fees
- โ Multiple users with fees should maintain fairness
- โ Should handle very small deposits with deposit fee
- โ Should handle maximum fee (99%)
- โ Should handle fee change between operations (71ms)
- โ Loss scenario with fees should work correctly (88ms)
- โ Yield scenario with fees should work correctly (85ms)
- โ totalSupply should equal sum of all balances with fees (65ms)
- โ User cannot withdraw more than maxWithdraw with fees
- โ User cannot redeem more than maxRedeem with fees
- โ Vault should never hold assets directly with fees (72ms)
- โ Full redemption should zero balance with fees
ยท--------------------------------------------------------|---------------------------|--------------|-----------------------------ยท
| Solc version: 0.8.19 ยท Optimizer enabled: true ยท Runs: 1000 ยท Block limit: 30000000 gas โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| Methods โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| Contract ยท Method ยท Min ยท Max ยท Avg ยท # calls ยท usd (avg) โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| CharityEscrow ยท buyPoints ยท - ยท - ยท 89850 ยท 1 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| CharityEscrow ยท decreaseLock ยท 37924 ยท 77438 ยท 64182 ยท 8 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| CharityEscrow ยท increaseLock ยท 55044 ยท 146811 ยท 121511 ยท 20 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| CharityEscrow ยท recoverERC20 ยท - ยท - ยท 62807 ยท 1 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| CharityEscrow ยท setEarnStructure ยท - ยท - ยท 31072 ยท 1 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| CharityEscrow ยท setPointPrice ยท 25359 ยท 47300 ยท 32079 ยท 4 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| CharityEscrow ยท transferOwnership ยท 28036 ยท 47936 ยท 37986 ยท 2 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| CharityEscrow ยท unLock ยท - ยท - ยท 54156 ยท 1 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| ImpactVault ยท approve ยท - ยท - ยท 46713 ยท 13 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| ImpactVault ยท collectDonations ยท - ยท - ยท 38088 ยท 1 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| ImpactVault ยท deposit ยท 85825 ยท 115249 ยท 111188 ยท 31 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| ImpactVault ยท mint ยท 68770 ยท 76294 ยท 72532 ยท 4 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| ImpactVault ยท redeem ยท - ยท - ยท 94719 ยท 2 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| ImpactVault ยท setAutoCollectThreshold ยท 47731 ยท 47755 ยท 47747 ยท 6 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| ImpactVault ยท transfer ยท 46994 ยท 47006 ยท 47000 ยท 2 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| ImpactVault ยท withdraw ยท - ยท - ยท 94785 ยท 2 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| LidoImpactVaultDepositor ยท depositAsset ยท - ยท - ยท 95510 ยท 2 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| LidoImpactVaultDepositor ยท depositETH ยท - ยท - ยท 126445 ยท 3 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| MSFPoint ยท approve ยท 46657 ยท 46669 ยท 46662 ยท 5 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| MSFPoint ยท grantRole ยท - ยท - ยท 51615 ยท 3 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| MSFPoint ยท mint ยท - ยท - ยท 70912 ยท 1 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| MSFPoint ยท recoverERC20 ยท - ยท - ยท 62775 ยท 1 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| SmartAccount ยท executeBatch ยท - ยท - ยท 37064 ยท 1 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| TestStETH ยท approve ยท 46668 ยท 46680 ยท 46673 ยท 35 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| TestStETH ยท changeAccrual ยท - ยท - ยท 28856 ยท 16 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| TestStETH ยท mint ยท 73003 ยท 73027 ยท 73020 ยท 30 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| Deployments ยท ยท % of limit ยท โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| CharityEscrow ยท 2432401 ยท 2432569 ยท 2432485 ยท 8.1 % ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| ERC4626ImpactVault ยท acceptOwnership ยท - ยท - ยท 28335 ยท 1 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| ERC4626ImpactVault ยท approve ยท - ยท - ยท 46665 ยท 2 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| ERC4626ImpactVault ยท collectDonations ยท 44379 ยท 102017 ยท 69311 ยท 17 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| ERC4626ImpactVault ยท deposit ยท 113745 ยท 163050 ยท 138796 ยท 71 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| ERC4626ImpactVault ยท mint ยท 131292 ยท 155747 ยท 139444 ยท 3 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| ERC4626ImpactVault ยท recoverERC20 ยท 55693 ยท 60541 ยท 59329 ยท 4 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| ERC4626ImpactVault ยท redeem ยท 98516 ยท 127688 ยท 109170 ยท 13 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| ERC4626ImpactVault ยท setAutoCollectThreshold ยท 47800 ยท 47812 ยท 47803 ยท 4 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| ERC4626ImpactVault ยท transfer ยท - ยท - ยท 34646 ยท 1 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| ERC4626ImpactVault ยท transferFrom ยท - ยท - ยท 42669 ยท 1 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| ERC4626ImpactVault ยท transferOwnership ยท - ยท - ยท 47936 ยท 1 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| ERC4626ImpactVault ยท withdraw ยท 103711 ยท 128166 ยท 115302 ยท 13 ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| ImpactVault ยท 1977889 ยท 1977913 ยท 1977912 ยท 6.6 % ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| LidoImpactVaultDepositor ยท - ยท - ยท 716156 ยท 2.4 % ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| MSFPoint ยท - ยท - ยท 1549720 ยท 5.2 % ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| SmartAccount ยท - ยท - ยท 525501 ยท 1.8 % ยท - โ
ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท|ยทยทยทยทยทยทยทยทยทยทยทยทยทยท
| TestStETH ยท - ยท - ยท 1086007 ยท 3.6 % ยท - โ
ยท--------------------------------------------------------|-------------|-------------|--------------|---------------|-------------ยท
39 passing (4s)
-------------------------------|----------|----------|----------|----------|----------------|
File | % Stmts | % Branch | % Funcs | % Lines |Uncovered Lines |
-------------------------------|----------|----------|----------|----------|----------------|
src/ | 87.95 | 83.78 | 86.81 | 88.19 | |
CharityEscrow.sol | 100 | 100 | 90.91 | 98.39 | 198,203 |
ERC4626ImpactVault.sol | 86.67 | 77.5 | 100 | 86.47 |... 202,205,532 |
ImpactVault.sol | 100 | 100 | 100 | 100 | |
ImpactVaultDepositor.sol | 77.78 | 100 | 100 | 77.78 |108,109,110,111 |
LidoImpactVaultDepositor.sol | 100 | 100 | 100 | 100 | |
MSFPoint.sol | 100 | 100 | 100 | 100 | |
MetaMorphoImpactVault.sol | 0 | 0 | 0 | 0 | 51,52,53,61,62 |
StEth.sol | 0 | 0 | 0 | 0 |... 40,44,45,49 |
testStEth.sol | 75 | 62.5 | 85.71 | 83.33 | 38,39 |
src/intf/ | 100 | 100 | 100 | 100 | |
ICharityEscrow.sol | 100 | 100 | 100 | 100 | |
IERC4626ImpactVault.sol | 100 | 100 | 100 | 100 | |
IImpactVault.sol | 100 | 100 | 100 | 100 | |
IImpactVaultDepositor.sol | 100 | 100 | 100 | 100 | |
IMSFPoint.sol | 100 | 100 | 100 | 100 | |
src/test/ | 100 | 50 | 100 | 100 | |
SmartAccount.sol | 100 | 50 | 100 | 100 | |
src/test/mocks/ | 68.42 | 37.5 | 88.24 | 67.39 | |
MockERC20.sol | 100 | 100 | 100 | 100 | |
UnderlyingVaultMock.sol | 66.67 | 37.5 | 85.71 | 65.12 |... 112,114,115 |
-------------------------------|----------|----------|----------|----------|----------------|
All files | 85.57 | 78.57 | 87.27 | 85.99 | |
-------------------------------|----------|----------|----------|----------|----------------|
