def main(): dai = interface.ERC20('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2') strategy = YearnWethCreamStratV2.at( '0x97785a81B3505Ea9026b2aFFa709dfd0C9Ef24f6') vault = Vault.at('0xf20731f26e98516dd83bb645dd757d33826a37b5') print(f'strategy YearnWethCreamStratV2: {strategy.address}') print(f'Vault: {vault.address}') print(f'Vault name: {vault.name()} and symbol: {vault.symbol()}') strategist_confirmed = strategy.strategist() print(f'Strategy strategist: {strategist_confirmed}') account_name = input(f"What account to use?: ") dev = accounts.load(account_name) print(f"You are using: 'dev' [{dev.address}]") devDai = dai.balanceOf(dev).to('ether') print(f"You're DAI balance is: [{devDai}]") are_you_strategist = strategist_confirmed == dev.address print(f"Are you strategist? {are_you_strategist}") if input("Continue? y/[N]: ").lower() != "y": return deposit_limit = Wei('500 ether') deposit_limit_eth = deposit_limit.to('ether') if input(f"Set deposit limit to: {deposit_limit_eth}?").lower() != "y": return # vault.setDepositLimit(deposit_limit, {"from": dev, 'gas_price':Wei("17 gwei")}) if input(f"Add strategy: {strategy} ?").lower() != "y": return #vault.addStrategy(strategy, deposit_limit, deposit_limit, 500, {"from": dev, 'gas_price':Wei("17 gwei")}) amount = Wei('0.1 ether') amountE = amount.to('ether') if input(f"approve: {amountE} WETH?").lower() != "y": return #dai.approve(vault, amount*100, {"from": dev, 'gas_price':Wei("17 gwei")}) print('deposit amount:', amount.to('ether')) if input("Continue? y/[N]: ").lower() != "y": return #vault.deposit(amount, {"from": dev, 'gas_price':Wei("17 gwei")}) print('harvest time') if input("Continue? y/[N]: ").lower() != "y": return strategy.harvest({"from": dev, 'gas_price': Wei("25 gwei")})
def deposit(amount, whale, dai, vault): weiAmount = Wei(amount) print('\n----user deposits----') dai.approve(vault, weiAmount, {'from': whale}) print('deposit amount:', weiAmount.to('ether')) vault.deposit(weiAmount, {'from': whale}) assert (dai.balanceOf(vault) == weiAmount, "Balance not arrived in vault")
def main(): dai = interface.ERC20('0x6b175474e89094c44da98b954eedeac495271d0f') strategy = YearnDaiCompStratV2.at( '0x5b62F24581Ea4bc6d6C5C101DD2Ae7233E422884') vault = Vault.at('0x9B142C2CDAb89941E9dcd0B6C1cf6dEa378A8D7C') print(f'strategy YearnDaiCompStratV2: {strategy.address}') print(f'Vault: {vault.address}') print(f'Vault name: {vault.name()} and symbol: {vault.symbol()}') strategist_confirmed = strategy.strategist() print(f'Strategy strategist: {strategist_confirmed}') account_name = input(f"What account to use?: ") dev = accounts.load(account_name) print(f"You are using: 'dev' [{dev.address}]") devDai = dai.balanceOf(dev).to('ether') print(f"You're DAI balance is: [{devDai}]") are_you_strategist = strategist_confirmed == dev.address print(f"Are you strategist? {are_you_strategist}") if input("Continue? y/[N]: ").lower() != "y": return deposit_limit = Wei('100000 ether') deposit_limit_eth = deposit_limit.to('ether') if input(f"Set deposit limit to: {deposit_limit_eth}?").lower() != "y": return vault.setDepositLimit(deposit_limit, { "from": dev, 'gas_price': Wei("17 gwei") }) if input(f"Add strategy: {strategy} ?").lower() != "y": return vault.addStrategy(strategy, deposit_limit, deposit_limit, 50, { "from": dev, 'gas_price': Wei("17 gwei") }) amount = Wei('500 ether') amountE = amount.to('ether') if input(f"approve: {amountE} DAI?").lower() != "y": return dai.approve(vault, amount * 100, { "from": dev, 'gas_price': Wei("17 gwei") }) print('deposit amount:', amount.to('ether')) if input("Continue? y/[N]: ").lower() != "y": return vault.deposit(amount, {"from": dev, 'gas_price': Wei("17 gwei")}) print('harvest time') if input("Continue? y/[N]: ").lower() != "y": return strategy.harvest({"from": dev, 'gas_price': Wei("16 gwei")})
def test_strategy(accounts, interface, chain, web3, history, YearnCompDaiStrategy): user = accounts[0] whale = accounts.at("0xBE0eB53F46cd790Cd13851d5EFf43D12404d33E8", force=True) ychad = accounts.at(web3.ens.resolve('ychad.eth'), force=True) solo = interface.ISoloMargin('0x1E0447b19BB6EcFdAe1e4AE1694b0C3659614e4e') comptroller = interface.ComptrollerI( '0x3d9819210a31b4961b30ef54be2aed79b9c9cd3b') dai = interface.ERC20('0x6b175474e89094c44da98b954eedeac495271d0f') cdai = interface.CErc20I('0x5d3a536e4d6dbd6114cc1ead35777bab948e3643') comp = interface.ERC20('0xc00e94cb662c3520282e6f5717214004a7f26888') controller = interface.IController( '0x9E65Ad11b299CA0Abefc2799dDB6314Ef2d91080') vault = interface.IVault(controller.vaults(dai)) strategy = YearnCompDaiStrategy.deploy(controller, {'from': user}) assert strategy.want() == vault.token() == dai strategy.setWithdrawalFee(0) strategy.setCollateralTarget('0.745 ether') with brownie.reverts("Target higher than collateral factor"): strategy.setCollateralTarget('0.75 ether') print('migrate strategy') controller.approveStrategy(dai, strategy, {'from': ychad}) controller.setStrategy(dai, strategy, {'from': ychad}) vault.setMin(10000, {'from': ychad}) assert controller.strategies(dai) == strategy print('dai in vault:', dai.balanceOf(vault).to('ether')) print('deposit funds into new strategy') vault.earn({'from': user}) print('balance of strategy:', strategy.balanceOf().to('ether')) amount = Wei('1000 ether') user_before = dai.balanceOf(whale) dai.approve(vault, amount, {'from': whale}) print('deposit amount:', amount.to('ether')) vault.deposit(amount, {'from': whale}) for i in count(1): print(f'\ndeposit {i}') vault.deposit(0, {'from': whale}) vault.earn({'from': user}) print('balance of strategy:', strategy.balanceOf().to('ether')) deposits, borrows = strategy.getCurrentPosition() print('deposits:', Wei(deposits).to('ether')) print('borrows:', Wei(borrows).to('ether')) collat = borrows / deposits leverage = 1 / (1 - collat) print(f'collat: {collat:.5%}') print(f'leverage: {leverage:.5f}x') print('liquidity:', strategy.getLiquidity().to('ether')) if collat >= strategy.collateralTarget() / 1.001e18: print('target leverage reached') break print('\nharvest') before = strategy.balanceOf() blocks_per_year = 2_300_000 sample = 100 chain.mine(sample) strategy.harvest() after = strategy.balanceOf() assert after >= before print('balance increase:', (after - before).to('ether')) print( f'implied apr: {(after / before - 1) * (blocks_per_year / sample):.8%}' ) vault.withdrawAll({'from': whale}) user_after = dai.balanceOf(whale) print(f'\nuser balance increase:', (user_after - user_before).to('ether')) assert user_after >= user_before for i in count(1): print(f'\ndeleverage {i}') strategy.emergencyDeleverage() print('balance of strategy:', strategy.balanceOf().to('ether')) deposits, borrows = strategy.getCurrentPosition() print('deposits:', Wei(deposits).to('ether')) print('borrows:', Wei(borrows).to('ether')) collat = borrows / deposits leverage = 1 / (1 - collat) print(f'collat: {collat:.5%}') print(f'leverage: {leverage:.5f}x') print('liquidity:', strategy.getLiquidity().to('ether')) if borrows == 0: print('successfully deleveraged') break
def test_huge_deposit_and_withdrawal(accounts, interface, chain, web3, history, YearnCompDaiStrategy): user = accounts[0] #whale has 29m dai whale = accounts.at("0xBE0eB53F46cd790Cd13851d5EFf43D12404d33E8", force=True) ychad = accounts.at(web3.ens.resolve('ychad.eth'), force=True) solo = interface.ISoloMargin('0x1E0447b19BB6EcFdAe1e4AE1694b0C3659614e4e') comptroller = interface.ComptrollerI( '0x3d9819210a31b4961b30ef54be2aed79b9c9cd3b') dai = interface.ERC20('0x6b175474e89094c44da98b954eedeac495271d0f') cdai = interface.CErc20I('0x5d3a536e4d6dbd6114cc1ead35777bab948e3643') comp = interface.ERC20('0xc00e94cb662c3520282e6f5717214004a7f26888') controller = interface.IController( '0x9E65Ad11b299CA0Abefc2799dDB6314Ef2d91080') vault = interface.IVault(controller.vaults(dai)) print(dai.balanceOf('0x3dfd23A6c5E8BbcFc9581d2E864a68feb6a076d3')) strategy = YearnCompDaiStrategy.deploy(controller, {'from': user}) assert strategy.want() == vault.token() == dai strategy.setWithdrawalFee(0) print('migrate strategy') controller.approveStrategy(dai, strategy, {'from': ychad}) controller.setStrategy(dai, strategy, {'from': ychad}) vault.setMin(10000, {'from': ychad}) assert controller.strategies(dai) == strategy print('dai in vault:', dai.balanceOf(vault).to('ether')) print('\n----deposit funds into new strategy----') vault.earn({'from': user}) depositsO, borrows = strategy.getCurrentPosition() print('deposits:', Wei(depositsO).to('ether')) print('borrows:', Wei(borrows).to('ether')) if depositsO == 0: collat = 0 else: collat = borrows / depositsO leverage = 1 / (1 - collat) print(f'collat: {collat:.5%}') print(f'leverage: {leverage:.5f}x') print('liquidity:', strategy.getLiquidity().to('ether')) print('\n----whale deposits----') #amount =dai.balanceOf(whale) amount = Wei('10000000 ether') dai.approve(vault, amount, {'from': whale}) print('deposit amount:', amount.to('ether')) vault.deposit(amount, {'from': whale}) vault.earn({'from': user}) deposits, borrows = strategy.getCurrentPosition() assert deposits > depositsO print('deposits:', Wei(deposits).to('ether')) print('borrows:', Wei(borrows).to('ether')) if deposits == 0: collat = 0 else: collat = borrows / deposits leverage = 1 / (1 - collat) print(f'collat: {collat:.5%}') print(f'leverage: {leverage:.5f}x') print('liquidity:', strategy.getLiquidity().to('ether')) #print('\n----disabling Aave----') #strategy.disableAave({'from': user}) for i in count(1): print(f'\ndeposit {i}') strategy.harvest({'from': user}) print('balance of strategy:', strategy.balanceOf().to('ether')) deposits, borrows = strategy.getCurrentPosition() print('deposits:', Wei(deposits).to('ether')) print('borrows:', Wei(borrows).to('ether')) collat = borrows / deposits leverage = 1 / (1 - collat) print(f'collat: {collat:.5%}') print(f'leverage: {leverage:.5f}x') print('liquidity:', strategy.getLiquidity().to('ether')) if collat >= strategy.collateralTarget() / 1.001e18: print('target leverage reached') break blocks_per_year = 2_300_000 monthsTillLiquidation = strategy.getblocksUntilLiquidation() / ( blocks_per_year / 12) print(f'{strategy.getblocksUntilLiquidation()} blocks till liquidation') print(f'{monthsTillLiquidation} months till liquidation') print('\n----whale withdraws large amount----') user_before = dai.balanceOf(whale) tx = vault.withdrawAll({'from': whale}) print(tx.events['Leverage']) #print(tx.info()) user_after = dai.balanceOf(whale) print(f'\nWhale withdrew:', (user_after - user_before).to('ether')) deposits, borrows = strategy.getCurrentPosition() print('deposits:', Wei(deposits).to('ether')) print('borrows:', Wei(borrows).to('ether')) if deposits == 0: collat = 0 else: collat = borrows / deposits leverage = 1 / (1 - collat) print(f'collat: {collat:.5%}') print(f'leverage: {leverage:.5f}x')