Esempio n. 1
0
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%"))
Esempio n. 2
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%"))
Esempio n. 3
0
def lusd():
    samples = get_samples()
    address = "0x5fA5B62c8AF877CB37031e0a3B2f34A78e3C56A6"
    vault = VaultV2.from_address(address)
    print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
Esempio n. 4
0
def old_dai():
    samples = get_samples()
    address = "0x19D3364A399d251E894aC732651be8B0E4e85001"
    vault = VaultV2.from_address(address)
    print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
Esempio n. 5
0
def dai():
    samples = get_samples()
    address = "0xdA816459F1AB5631232FE5e97a05BBBb94970c95"
    vault = VaultV2.from_address(address)
    print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
Esempio n. 6
0
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))
Esempio n. 7
0
def eurt():
    samples = get_samples()
    address = "0x0d4EA8536F9A13e4FBa16042a46c30f092b06aA5"
    vault = VaultV2.from_address(address)
    print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
Esempio n. 8
0
def pickleJar():
    samples = get_samples()
    special = YveCRVJar()
    print(json.dumps(dataclasses.asdict(special.apy(samples)), indent=2))
Esempio n. 9
0
def sushi():
    samples = get_samples()
    address = "0x6d765CbE5bC922694afE112C140b8878b9FB0390"
    vault = VaultV2.from_address(address)
    print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
Esempio n. 10
0
def yfi():
    samples = get_samples()
    address = "0xdb25cA703181E7484a155DD612b06f57E12Be5F0"
    vault = VaultV2.from_address(address)
    print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
Esempio n. 11
0
def ibJPY():
    samples = get_samples()
    address = "0x59518884EeBFb03e90a18ADBAAAB770d4666471e"
    vault = VaultV2.from_address(address)
    print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
Esempio n. 12
0
def cvxCRV():
    samples = get_samples()
    address = "0x4560b99C904aAD03027B5178CCa81584744AC01f"
    vault = VaultV2.from_address(address)
    print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
Esempio n. 13
0
def yvboost():
    samples = get_samples()
    address = "0x9d409a0A012CFbA9B15F6D4B36Ac57A46966Ab9a"
    vault = VaultV2.from_address(address)
    print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
Esempio n. 14
0
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)
Esempio n. 15
0
def rai():
    samples = get_samples()
    address = "0x873fB544277FD7b977B196a826459a69E27eA4ea"
    vault = VaultV2.from_address(address)
    print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
Esempio n. 16
0
def ibeur():
    samples = get_samples()
    address = "0x67e019bfbd5a67207755D04467D6A70c0B75bF60"
    vault = VaultV2.from_address(address)
    print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
Esempio n. 17
0
def tricrypto():
    samples = get_samples()
    address = "0x3D980E50508CFd41a13837A60149927a11c03731"
    vault = VaultV2.from_address(address)
    print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
Esempio n. 18
0
def ibgbp():
    samples = get_samples()
    address = "0x595a68a8c9D5C230001848B69b1947ee2A607164"
    vault = VaultV2.from_address(address)
    print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
Esempio n. 19
0
def mim():
    samples = get_samples()
    address = "0x2DfB14E32e2F8156ec15a2c21c3A6c053af52Be8"
    vault = VaultV2.from_address(address)
    print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
Esempio n. 20
0
def ibkrw():
    samples = get_samples()
    address = "0x528D50dC9a333f01544177a924893FA1F5b9F748"
    vault = VaultV2.from_address(address)
    print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))
Esempio n. 21
0
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"},
    )
Esempio n. 22
0
def calculate_apy(address):
    samples = get_samples()
    vault = VaultV2.from_address(address)
    print(json.dumps(dataclasses.asdict(vault.apy(samples)), indent=2))