999ms

Untitled

Dec 8th, 2025
19
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.30 KB | None | 0 0
  1. from datetime import datetime
  2. import requests
  3.  
  4. oracle_address = "0x8a78e6b7E15C4Ae3aeAeE3bf0DE4F2de4078c1cD"
  5. topic0 = "0x6207881df9938c524ec52b013997b3ef32ee1920c23952e3c43835a4136ba330"
  6. YEAR = 365 * 24 * 3600
  7.  
  8. base_url = f"https://eth.blockscout.com/api/v2/addresses/{oracle_address}/logs"
  9. base_asset = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
  10. pagination = {}
  11.  
  12. oracle_reports = []
  13. number_of_reports = 8
  14.  
  15.  
  16. while True:
  17.     url = base_url
  18.     separator = "?"
  19.     for key, value in pagination.items():
  20.         url += f"{separator}{key}={value}"
  21.         separator = "&"
  22.  
  23.     response: dict[str, any] = requests.get(url).json()
  24.     for item in response["items"]:
  25.         if item["topics"][0] != topic0:
  26.             continue
  27.  
  28.         reports = item["decoded"]["parameters"][0]["value"]
  29.         base_report_price = None
  30.         for report in reports:
  31.             if report[0] == base_asset:
  32.                 base_report_price = report[1]
  33.                 break
  34.  
  35.         if base_report_price is None:
  36.             continue
  37.  
  38.         oracle_reports.append((item["block_number"], int(base_report_price)))
  39.         if len(oracle_reports) >= number_of_reports:
  40.             break
  41.  
  42.     pagination = response.get("next_page_params", {})
  43.     if not pagination or len(oracle_reports) >= number_of_reports:
  44.         break
  45.  
  46. oracle_reports = oracle_reports[::-1]
  47. block_timestamps = {}
  48. for block_number, _ in oracle_reports:
  49.     timestamp = requests.get(
  50.         f"https://eth.blockscout.com/api/v2/blocks/{block_number}"
  51.     ).json()["timestamp"]
  52.     timestamp = datetime.fromisoformat(timestamp.replace("Z", "+00:00")).timestamp()
  53.     block_timestamps[block_number] = int(timestamp)
  54.  
  55.  
  56. apys = []
  57.  
  58. for i in range(1, len(oracle_reports)):
  59.     prev_report_block, prev_report_price = oracle_reports[i - 1]
  60.     curr_report_block, curr_report_price = oracle_reports[i]
  61.  
  62.     prev_report_timestamp = block_timestamps[prev_report_block]
  63.     curr_report_timestamp = block_timestamps[curr_report_block]
  64.  
  65.     apy = (prev_report_price / curr_report_price) ** (
  66.         YEAR / (curr_report_timestamp - prev_report_timestamp)
  67.     )
  68.     apy = (apy - 1) * 100
  69.     apys.append({"timestamp": curr_report_timestamp, "apy": apy})
  70.  
  71.  
  72. apy_7d_sma = sum(item["apy"] for item in apys) / len(apys)
  73.  
  74. print("apy(7d sma): ", apy_7d_sma)
  75.  
Advertisement
Add Comment
Please, Sign In to add comment