Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from datetime import datetime
- import requests
- oracle_address = "0x8a78e6b7E15C4Ae3aeAeE3bf0DE4F2de4078c1cD"
- topic0 = "0x6207881df9938c524ec52b013997b3ef32ee1920c23952e3c43835a4136ba330"
- YEAR = 365 * 24 * 3600
- base_url = f"https://eth.blockscout.com/api/v2/addresses/{oracle_address}/logs"
- base_asset = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
- pagination = {}
- oracle_reports = []
- number_of_reports = 8
- while True:
- url = base_url
- separator = "?"
- for key, value in pagination.items():
- url += f"{separator}{key}={value}"
- separator = "&"
- response: dict[str, any] = requests.get(url).json()
- for item in response["items"]:
- if item["topics"][0] != topic0:
- continue
- reports = item["decoded"]["parameters"][0]["value"]
- base_report_price = None
- for report in reports:
- if report[0] == base_asset:
- base_report_price = report[1]
- break
- if base_report_price is None:
- continue
- oracle_reports.append((item["block_number"], int(base_report_price)))
- if len(oracle_reports) >= number_of_reports:
- break
- pagination = response.get("next_page_params", {})
- if not pagination or len(oracle_reports) >= number_of_reports:
- break
- oracle_reports = oracle_reports[::-1]
- block_timestamps = {}
- for block_number, _ in oracle_reports:
- timestamp = requests.get(
- f"https://eth.blockscout.com/api/v2/blocks/{block_number}"
- ).json()["timestamp"]
- timestamp = datetime.fromisoformat(timestamp.replace("Z", "+00:00")).timestamp()
- block_timestamps[block_number] = int(timestamp)
- apys = []
- for i in range(1, len(oracle_reports)):
- prev_report_block, prev_report_price = oracle_reports[i - 1]
- curr_report_block, curr_report_price = oracle_reports[i]
- prev_report_timestamp = block_timestamps[prev_report_block]
- curr_report_timestamp = block_timestamps[curr_report_block]
- apy = (prev_report_price / curr_report_price) ** (
- YEAR / (curr_report_timestamp - prev_report_timestamp)
- )
- apy = (apy - 1) * 100
- apys.append({"timestamp": curr_report_timestamp, "apy": apy})
- apy_7d_sma = sum(item["apy"] for item in apys) / len(apys)
- print("apy(7d sma): ", apy_7d_sma)
Advertisement
Add Comment
Please, Sign In to add comment