def test_live_dai(accounts): me = accounts.at("0x7495B77b15fCb52fbb7BCB7380335d819ce4c04B", force=True) ygov = accounts.at("0xFEB4acf3df3cDEA7399794D0869ef76A6EfAff52", force=True) usdc_vault = Contract("0x5f18C75AbDAe578b483E5F43f12a39cF75b973a9", owner=ygov) sharerV4 = Contract("0xc491599b9a20c3a2f0a85697ee6d9434efa9f503") idleusdc = Contract("0x2E1ad896D3082C52A5AE7Af307131DE7a37a46a0", owner=ygov) stratFarmer = Contract("0xFc403fd9E7A916eC38437807704e92236cA1f7A5", owner=me) keeper = "0x7495B77b15fCb52fbb7BCB7380335d819ce4c04B" masterchef = "0xd7fa57069E4767ddE13aD7970A562c43f03f8365" reward = "0xf33121A2209609cAdc7349AcC9c40E41CE21c730" router = "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D" pid = 2 tx = stratFarmer.cloneStrategy( usdc_vault, me, sharerV4, keeper, masterchef, reward, router, pid, {"from": me} ) strategy = StrategyLegacy.at(tx.events["Cloned"]["clone"]) # Remove idleusdc to replace it with farmer strat usdc_vault.updateStrategyDebtRatio(idleusdc, 0) # Add strategy to vault usdc_vault.addStrategy(strategy, 500, 0, 1000) # Remove funds from idleusdc idleusdc.harvest() strategy.harvest({"from": me}) # Get initial deposit initialDeposit = strategy.estimatedTotalAssets() for i in range(15): waitBlock = random.randint(10, 20) # print(f'\n----wait {waitBlock} blocks----') chain.mine(waitBlock) strategy.harvest({"from": me}) chain.sleep(waitBlock * 13) strategy.harvest({"from": me}) # check strategy made a profit assert strategy.estimatedTotalAssets() > initialDeposit # Assume farm is over,lets exit the farm # Set emergencyexit strategy.setEmergencyExit({"from": me}) # Call harvest to get funds out strategy.harvest({"from": me}) # Check if the funds got out successfully assert strategy.estimatedTotalAssets() == 0 # Lets add back idleusdc farming to vault usdc_vault.updateStrategyDebtRatio(idleusdc, 500) # we should harvest and get back the tvl on idleusdc idleusdc.harvest({"from": ygov}) assert idleusdc.estimatedTotalAssets() > 0
def test_live_dai(accounts): me = accounts.at("0x7495B77b15fCb52fbb7BCB7380335d819ce4c04B", force=True) ygov = accounts.at("0xFEB4acf3df3cDEA7399794D0869ef76A6EfAff52", force=True) dai_vault = Contract("0x19D3364A399d251E894aC732651be8B0E4e85001", owner=ygov) sharerV4 = Contract("0xc491599b9a20c3a2f0a85697ee6d9434efa9f503") iblevcomp = Contract("0x77b7CD137Dd9d94e7056f78308D7F65D2Ce68910", owner=ygov) keeper = "0x7495B77b15fCb52fbb7BCB7380335d819ce4c04B" masterchef = "0xd7fa57069E4767ddE13aD7970A562c43f03f8365" reward = "0xf33121A2209609cAdc7349AcC9c40E41CE21c730" router = "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D" pid = 3 strategy = StrategyLegacy.deploy( dai_vault, masterchef, reward, router, pid, {"from": me}, ) # Remove iblevcomp to replace it with farmer strat dai_vault.updateStrategyDebtRatio(iblevcomp, 0) # Add strategy to vault dai_vault.addStrategy(strategy, 5.5 * 100, 0, 1000) # Remove funds from iblevcomp iblevcomp.harvest() strategy.harvest({"from": me}) # Get initial deposit initialDeposit = strategy.estimatedTotalAssets() for i in range(15): waitBlock = random.randint(10, 50) # print(f'\n----wait {waitBlock} blocks----') chain.mine(waitBlock) strategy.harvest({"from": me}) chain.sleep(waitBlock * 13) strategy.harvest() # check strategy made a profit assert strategy.estimatedTotalAssets() > initialDeposit # Assume farm is over,lets exit the farm # Set emergencyexit strategy.setEmergencyExit({"from": me}) # Call harvest to get funds out strategy.harvest({"from": me}) # Check if the funds got out successfully assert strategy.estimatedTotalAssets() == 0 # Lets add back iblev farming to vault dai_vault.updateStrategyDebtRatio(iblevcomp, 5.5 * 100) # we should harvest and get back the tvl on iblev iblevcomp.harvest({"from": ygov}) assert iblevcomp.estimatedTotalAssets() > 0
def test_no_emissions(chain, usdc, whale, gov, strategist, rando, vault, Strategy, strategy, GenericAave, aUsdc): # Clone magic vault = Contract("0xa5cA62D95D24A4a350983D5B8ac4EB8638887396" ) # using SUSD vault (it is not in the LP program) tx = strategy.clone(vault) cloned_strategy = Strategy.at(tx.return_value) cloned_strategy.setWithdrawalThreshold(strategy.withdrawalThreshold(), {"from": vault.governance()}) cloned_strategy.setDebtThreshold(strategy.debtThreshold(), {"from": vault.governance()}) cloned_strategy.setProfitFactor(strategy.profitFactor(), {"from": vault.governance()}) cloned_strategy.setMaxReportDelay(strategy.maxReportDelay(), {"from": vault.governance()}) assert cloned_strategy.numLenders() == 0 aSUSD = interface.IAToken( "0x6c5024cd4f8a59110119c56f8933403a539555eb") # aSUSD # Clone the aave lender original_aave = GenericAave.at(strategy.lenders(strategy.numLenders() - 1)) tx = original_aave.cloneAaveLender(cloned_strategy, "ClonedAaveSUSD", aSUSD, False, {"from": vault.governance()}) cloned_lender = GenericAave.at(tx.return_value) assert cloned_lender.lenderName() == "ClonedAaveSUSD" cloned_strategy.addLender(cloned_lender, {"from": vault.governance()}) currency = interface.ERC20( "0x57ab1ec28d129707052df4df418d58a2d46d5f51") #sUSD susd_whale = "0x49be88f0fcc3a8393a59d3688480d7d253c37d2a" currency.transfer(strategist, 100e18, {'from': susd_whale}) starting_balance = currency.balanceOf(strategist) decimals = currency.decimals() currency.approve(vault, 2**256 - 1, {"from": whale}) currency.approve(vault, 2**256 - 1, {"from": strategist}) deposit_limit = 1_000_000_000 * (10**(decimals)) debt_ratio = 10_000 vault.updateStrategyDebtRatio(vault.withdrawalQueue(0), 0, {'from': vault.governance()}) vault.updateStrategyDebtRatio(vault.withdrawalQueue(1), 0, {'from': vault.governance()}) vault.addStrategy(cloned_strategy, debt_ratio, 0, 2**256 - 1, 500, {"from": vault.governance()}) vault.setDepositLimit(deposit_limit, {"from": vault.governance()}) assert deposit_limit == vault.depositLimit() with brownie.reverts(): cloned_lender.setIsIncentivised(True, {'from': strategist}) # ------------------ set up proposal ------------------ # chain.sleep(12 * 3600) # to be able to execute # chain.mine(1) # print("executing proposal 11") # to be able to test before the proposal is executed # executor = Contract.from_abi("AaveGovernanceV2", "0xec568fffba86c094cf06b22134b23074dfe2252c", executor_abi, owner="0x30fe242a69d7694a931791429815db792e24cf97") # tx = executor.execute(11) # should fail because sUSD is not incentivised with brownie.reverts(): cloned_lender.setIsIncentivised(True, {'from': strategist}) # our humble strategist deposits some test funds depositAmount = 50 * (10**(decimals)) vault.deposit(depositAmount, {"from": strategist}) assert cloned_strategy.estimatedTotalAssets() == 0 chain.mine(1) assert cloned_strategy.harvestTrigger(1) == True cloned_strategy.harvest({"from": strategist}) assert (cloned_strategy.estimatedTotalAssets() >= depositAmount * 0.999999 ) # losing some dust is ok assert cloned_strategy.harvestTrigger(1) == False assert cloned_lender.harvestTrigger(1) == False # harvest is unavailable with brownie.reverts(): cloned_lender.harvest({'from': strategist}) # if called, it does not revert assert cloned_lender.harvestTrigger(1) == False chain.sleep(10 * 3600 * 24 + 1) # we wait 10 days for the cooldown period chain.mine(1) assert cloned_lender.harvestTrigger(1) == False # always unavailable cloned_strategy.harvest({'from': strategist}) chain.sleep(6 * 3600) chain.mine(1) vault.withdraw({"from": strategist})