def main(): data = [] samples = get_samples() v1_registry = RegistryV1() for vault in v1_registry.vaults: apy = vault.apy(samples) data.append({ "product": apy.type, "name": vault.name, "apy": apy.net_apy }) v2_registry = RegistryV2() for vault in v2_registry.vaults: try: apy = vault.apy(samples) data.append({ "product": apy.type, "name": vault.name, "apy": apy.net_apy }) except ApyError as error: logger.error(error) except Exception as error: print(vault) raise error data.sort(key=lambda x: -x["apy"]) print(tabulate(data, floatfmt=",.0%"))
def main(): data = [] samples = apy.get_samples() v1_registry = vaults_v1.Registry() for vault in v1_registry.vaults: if is_curve_lp_token(vault.token.address): vault_apy = apy.curve.simple(vault, samples) else: vault_apy = apy.v1.simple(vault, samples) data.append({ "product": vault_apy.type, "name": vault.name, "apy": vault_apy.net_apy }) v2_registry = v2.registry.Registry() for vault in v2_registry.vaults: try: if is_curve_lp_token(vault.token.address): vault_apy = apy.curve.simple(vault, samples) elif Version(vault.api_version) >= Version("0.3.2"): vault_apy = apy.v2.average(vault, samples) else: vault_apy = apy.v2.simple(vault, samples) data.append({ "product": vault_apy.type, "name": vault.name, "apy": vault_apy.net_apy }) except apy.ApyError as error: logger.error(error) except Exception as error: print(vault) raise error data.sort(key=lambda x: -x["apy"]) print(tabulate(data, floatfmt=",.0%"))
def lusd(): samples = get_samples() address = "0x5fA5B62c8AF877CB37031e0a3B2f34A78e3C56A6" vault = VaultV2.from_address(address) print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
def old_dai(): samples = get_samples() address = "0x19D3364A399d251E894aC732651be8B0E4e85001" vault = VaultV2.from_address(address) print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
def dai(): samples = get_samples() address = "0xdA816459F1AB5631232FE5e97a05BBBb94970c95" vault = VaultV2.from_address(address) print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
def fetch_apy(vault_address): if chain.id != Network.Fantom: raise Exception("run on fantom") samples = get_samples() vault = VaultV2.from_address(vault_address) print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
def eurt(): samples = get_samples() address = "0x0d4EA8536F9A13e4FBa16042a46c30f092b06aA5" vault = VaultV2.from_address(address) print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
def pickleJar(): samples = get_samples() special = YveCRVJar() print(json.dumps(dataclasses.asdict(special.apy(samples)), indent=2))
def sushi(): samples = get_samples() address = "0x6d765CbE5bC922694afE112C140b8878b9FB0390" vault = VaultV2.from_address(address) print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
def yfi(): samples = get_samples() address = "0xdb25cA703181E7484a155DD612b06f57E12Be5F0" vault = VaultV2.from_address(address) print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
def ibJPY(): samples = get_samples() address = "0x59518884EeBFb03e90a18ADBAAAB770d4666471e" vault = VaultV2.from_address(address) print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
def cvxCRV(): samples = get_samples() address = "0x4560b99C904aAD03027B5178CCa81584744AC01f" vault = VaultV2.from_address(address) print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
def yvboost(): samples = get_samples() address = "0x9d409a0A012CFbA9B15F6D4B36Ac57A46966Ab9a" vault = VaultV2.from_address(address) print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
def main(): samples = get_samples() registry_v2 = RegistryV2() assets_metadata = get_assets_metadata(registry_v2.vaults) loanscan_vault_symbols = [] loanscan_vault_json = [] yveCrvVault = Backscratcher() try: # Get vault symbol and lend rates BEFORE appending to corresponding lists # If there is an exception with either, lists won't de-sync # Don't simplify below this comment yveCrv_symbol = yveCrvVault.vault.symbol() yveCrv_lend_rates = get_formatted_lend_rates(yveCrvVault, samples) loanscan_vault_symbols.append(yveCrv_symbol) loanscan_vault_json.append({"symbol": yveCrv_symbol, "lendRates": yveCrv_lend_rates}) # Don't simplify above this comment except Exception as yveCrvException: logger.info(f'failed to reduce yveCrv lendRate, {str(yveCrvVault.vault)} {yveCrvVault}') logger.error(yveCrvException) for vault in registry_v2.vaults: try: vault_not_endorsed = not (hasattr(vault, "is_endorsed") and vault.is_endorsed) if vault_not_endorsed: continue current_vault_address = str(vault.vault) next_vault_address = assets_metadata[current_vault_address][2] vault_not_migrated = current_vault_address != next_vault_address if vault_not_migrated: continue # Get vault symbol and lend rates BEFORE appending to corresponding lists # If there is an exception with either, lists won't de-sync # Don't simplify below this comment vault_symbol = vault.vault.symbol() vault_lend_rates = get_formatted_lend_rates(vault, samples) loanscan_vault_symbols.append(vault_symbol) loanscan_vault_json.append({"symbol": vault_symbol, "lendRates": vault_lend_rates}) # Don't simplify above this comment except Exception as error: logger.info(f'failed to reduce loanscan lendRate for vault {str(vault.vault)} {vault}') logger.error(error) out_path = "generated" base_path_s3 = os.path.join("v1", "chains", "1", "loanscan") loanscan_path = os.path.join(out_path, base_path_s3) os.makedirs(out_path, exist_ok=True) if os.path.isdir(loanscan_path): shutil.rmtree(loanscan_path) os.makedirs(loanscan_path, exist_ok=True) write_json(loanscan_vault_symbols, os.path.join(loanscan_path, "manifest")) write_json(loanscan_vault_json, os.path.join(loanscan_path, "all")) for loanscan_vault in loanscan_vault_json: write_json({"lendRates": loanscan_vault["lendRates"]}, os.path.join(loanscan_path, loanscan_vault["symbol"])) aws_bucket = os.environ.get("AWS_BUCKET") s3 = boto3.client( "s3", aws_access_key_id=os.environ.get("AWS_ACCESS_KEY"), aws_secret_access_key=os.environ.get("AWS_ACCESS_SECRET"), ) for loanscan_json_filename in os.listdir(loanscan_path): try: file_path = os.path.join(loanscan_path, loanscan_json_filename) file_path_s3 = os.path.join(base_path_s3, loanscan_json_filename) s3.upload_file( file_path, aws_bucket, file_path_s3, ExtraArgs={'ContentType': "application/json", 'CacheControl': "max-age=1800"}, ) except Exception as error: logger.info(f'failed to upload {file_path} to s3') logger.error(error)
def rai(): samples = get_samples() address = "0x873fB544277FD7b977B196a826459a69E27eA4ea" vault = VaultV2.from_address(address) print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
def ibeur(): samples = get_samples() address = "0x67e019bfbd5a67207755D04467D6A70c0B75bF60" vault = VaultV2.from_address(address) print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
def tricrypto(): samples = get_samples() address = "0x3D980E50508CFd41a13837A60149927a11c03731" vault = VaultV2.from_address(address) print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
def ibgbp(): samples = get_samples() address = "0x595a68a8c9D5C230001848B69b1947ee2A607164" vault = VaultV2.from_address(address) print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
def mim(): samples = get_samples() address = "0x2DfB14E32e2F8156ec15a2c21c3A6c053af52Be8" vault = VaultV2.from_address(address) print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
def ibkrw(): samples = get_samples() address = "0x528D50dC9a333f01544177a924893FA1F5b9F748" vault = VaultV2.from_address(address) print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
def main(): data = [] aliases_repo_url = "https://api.github.com/repos/yearn/yearn-assets/git/refs/heads/master" aliases_repo = requests.get(aliases_repo_url).json() commit = aliases_repo["object"]["sha"] icon_url = f"https://rawcdn.githack.com/yearn/yearn-assets/{commit}/icons/multichain-tokens/1/%s/logo-128.png" aliases_url = "https://raw.githubusercontent.com/yearn/yearn-assets/master/icons/aliases.json" aliases = requests.get(aliases_url).json() aliases = {alias["address"]: alias for alias in aliases} samples = get_samples() registry_v2 = RegistryV2() if chain.id == Network.Mainnet: special = [YveCRVJar(), Backscratcher()] registry_v1 = RegistryV1() vaults = itertools.chain(special, registry_v1.vaults, registry_v2.vaults, registry_v2.experiments) elif chain.id == Network.Fantom: vaults = registry_v2.vaults assets_metadata = get_assets_metadata(registry_v2.vaults) for vault in vaults: data.append(wrap_vault(vault, samples, aliases, icon_url, assets_metadata)) out = "generated" if os.path.isdir(out): shutil.rmtree(out) os.makedirs(out, exist_ok=True) vaults_api_path = os.path.join("v1", "chains", f"{chain.id}", "vaults") os.makedirs(os.path.join(out, vaults_api_path), exist_ok=True) endorsed = [vault for vault in data if vault["endorsed"]] experimental = [vault for vault in data if not vault["endorsed"]] vault_api_all = os.path.join(vaults_api_path, "all") with open(os.path.join(out, vault_api_all), "w+") as f: json.dump(endorsed, f) vault_api_experimental = os.path.join(vaults_api_path, "experimental") with open(os.path.join(out, vault_api_experimental), "w+") as f: json.dump(experimental, f) aws_key = os.environ.get("AWS_ACCESS_KEY") aws_secret = os.environ.get("AWS_ACCESS_SECRET") aws_bucket = os.environ.get("AWS_BUCKET") s3 = boto3.client("s3", aws_access_key_id=aws_key, aws_secret_access_key=aws_secret) print(json.dumps(data)) s3.upload_file( os.path.join(out, vault_api_all), aws_bucket, vault_api_all, ExtraArgs={'ContentType': "application/json", 'CacheControl': "max-age=1800"}, ) s3.upload_file( os.path.join(out, vault_api_experimental), aws_bucket, vault_api_experimental, ExtraArgs={'ContentType': "application/json", 'CacheControl': "max-age=1800"}, )
def calculate_apy(address): samples = get_samples() vault = VaultV2.from_address(address) print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))