def describe_vault(vault: Vault): info = { 'vault balance': vault.vault.balance() / vault.scale, 'share price': vault.vault.getPricePerFullShare() / 1e18, 'vault total': vault.vault.totalSupply() / vault.scale, 'strategy balance': vault.strategy.balanceOf() / vault.scale, } # some of the oldest vaults don't implement these methods if hasattr(vault.vault, 'available'): info['available'] = vault.vault.available() / vault.scale if hasattr(vault.vault, 'min') and hasattr(vault.vault, 'max'): info['strategy buffer'] = vault.vault.min() / vault.vault.max() # new curve voter proxy vaults if hasattr(vault.strategy, 'proxy'): strategy_proxy = interface.StrategyProxy(vault.strategy.proxy()) vote_proxy = interface.CurveYCRVVoter(vault.strategy.voter()) escrow = interface.CurveVotingEscrow(vote_proxy.escrow()) swap = interface.CurveSwap(vault.strategy.curve()) gauge = interface.CurveGauge(vault.strategy.gauge()) info.update(curve.calculate_boost(gauge, vote_proxy)) info.update(curve.calculate_apy(gauge, swap)) if vault.strategy._name == 'StrategyYFIGovernance': ygov = interface.YearnGovernance(vault.strategy.gov()) info['earned'] = ygov.earned(vault.strategy) / 1e18 info['ygov balance'] = ygov.balanceOf(vault.strategy) / 1e18 return info
from brownie import interface from yearn import constants from yearn import uniswap crv = interface.ERC20("0xD533a949740bb3306d119CC777fa900bA034cd52") voting_escrow = interface.CurveVotingEscrow("0x5f3b5DfEb7B28CDbD7FAba78963EE202a494e2A2") registry = interface.CurveRegistry("0x7D86446dDb609eD0F5f8684AcF30380a356b2B4c") def get_base_price(pool): coins = set(registry.get_underlying_coins(pool)) if coins & constants.BTC_LIKE: return uniswap.price_router(uniswap.wbtc, uniswap.usdc) elif coins & constants.ETH_LIKE: return uniswap.price_router(uniswap.weth, uniswap.usdc) else: return 1 def calculate_boost(gauge, addr): gauge_balance = gauge.balanceOf(addr) / 1e18 gauge_total = gauge.totalSupply() / 1e18 working_balance = gauge.working_balances(addr) / 1e18 working_supply = gauge.working_supply() / 1e18 vecrv_balance = voting_escrow.balanceOf(addr) / 1e18 vecrv_total = voting_escrow.totalSupply() / 1e18 try: boost = working_balance / gauge_balance * 2.5 except ZeroDivisionError: