Created
May 4, 2023 11:03
-
-
Save rafaelugolini/1cb0242749c7062f7069d970b0d80ed4 to your computer and use it in GitHub Desktop.
origin apy calculation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 133, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from __future__ import annotations\n", | |
"\n", | |
"import datetime as dt\n", | |
"from decimal import Decimal\n", | |
"\n", | |
"import numpy as np\n", | |
"import pandas as pd\n", | |
"from ctc import evm, rpc, spec" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 134, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# Addresses\n", | |
"OETH = \"0x856c4efb76c1d1ae02e20ceb03a2a6a08b0b8dc3\".lower()\n", | |
"OUSD = \"0x2a8e1e676ec238d8a992307b495b45b3feaa5e86\".lower()\n", | |
"\n", | |
"# block\n", | |
"block_number = 16430217 # 2023-01-18\n", | |
"ousdv2_start_block = 11596940 # OUSD v2 launch block\n", | |
"\n", | |
"\n", | |
"# ABI\n", | |
"evt_total_supply_updated_abi: spec.FunctionABI = {\n", | |
" \"anonymous\": False,\n", | |
" \"inputs\": [\n", | |
" {\n", | |
" \"indexed\": False,\n", | |
" \"internalType\": \"uint256\",\n", | |
" \"name\": \"totalSupply\",\n", | |
" \"type\": \"uint256\",\n", | |
" },\n", | |
" {\n", | |
" \"indexed\": False,\n", | |
" \"internalType\": \"uint256\",\n", | |
" \"name\": \"rebasingCredits\",\n", | |
" \"type\": \"uint256\",\n", | |
" },\n", | |
" {\n", | |
" \"indexed\": False,\n", | |
" \"internalType\": \"uint256\",\n", | |
" \"name\": \"rebasingCreditsPerToken\",\n", | |
" \"type\": \"uint256\",\n", | |
" },\n", | |
" ],\n", | |
" \"name\": \"TotalSupplyUpdatedHighres\",\n", | |
" \"type\": \"event\",\n", | |
"}" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 135, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# utils\n", | |
"\n", | |
"def to_date(timestamp: int) -> str:\n", | |
" dtt = dt.datetime.fromtimestamp(timestamp, tz=dt.timezone.utc)\n", | |
" return dtt.date()\n", | |
" # return dtt.strftime(\"%Y-%m-%d\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"ts_ousd: pd.DataFrame = (\n", | |
" await evm.async_get_events(\n", | |
" contract_address=OUSD,\n", | |
" event_abi=evt_total_supply_updated_abi,\n", | |
" start_block=block_number,\n", | |
" include_timestamps=True,\n", | |
" )\n", | |
").reset_index()\n", | |
"\n", | |
"ts_oeth: pd.DataFrame = (\n", | |
" await evm.async_get_events(\n", | |
" contract_address=OETH,\n", | |
" event_abi=evt_total_supply_updated_abi,\n", | |
" start_block=block_number,\n", | |
" include_timestamps=True,\n", | |
" )\n", | |
").reset_index()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 137, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# date\n", | |
"\n", | |
"def get_apy(total_supply_df: pd.DataFrame):\n", | |
" total_supply_df[\"date\"] = total_supply_df[\"timestamp\"].apply(to_date)\n", | |
" total_supply_df[\"prev_date\"] = total_supply_df[\"date\"].shift(1)\n", | |
" total_supply_df[\"days\"] = total_supply_df[\"date\"] - total_supply_df[\"prev_date\"]\n", | |
" total_supply_df[\"days\"] = total_supply_df[\"days\"].apply(lambda x: Decimal(x.days))\n", | |
"\n", | |
" # cast\n", | |
" total_supply_df[\"arg__rebasingCreditsPerToken\"] = total_supply_df[\"arg__rebasingCreditsPerToken\"].apply(\n", | |
" Decimal\n", | |
" )\n", | |
"\n", | |
" # aggregate and get max\n", | |
" df = total_supply_df.groupby(\"date\").agg(\n", | |
" {\n", | |
" \"arg__rebasingCreditsPerToken\": \"max\",\n", | |
" \"days\": \"max\",\n", | |
" }\n", | |
" ).reset_index()\n", | |
"\n", | |
" df[\"rebasingCreditsPerTokenRatio\"] = (\n", | |
" df[\"arg__rebasingCreditsPerToken\"].shift(1).fillna(0)\n", | |
" )\n", | |
" df[\"rebasingCreditsPerTokenRatio\"] = (\n", | |
" df[\"rebasingCreditsPerTokenRatio\"] / df[\"arg__rebasingCreditsPerToken\"]\n", | |
" )\n", | |
"\n", | |
" # apr\n", | |
" df[\"apr\"] = (df[\"rebasingCreditsPerTokenRatio\"] - Decimal(1)) * Decimal(100) * Decimal(365.25) / df[\"days\"]\n", | |
" # apy\n", | |
" df[\"apy\"] = ((1 + df[\"apr\"] / (Decimal(365.25) / df[\"days\"]) / Decimal(100)) ** (Decimal(365.25) / df[\"days\"]) - Decimal(1)) * Decimal(100)\n", | |
"\n", | |
" return df\n", | |
"\n", | |
"ousd_apy = get_apy(ts_ousd)\n", | |
"oeth_apy = get_apy(ts_oeth)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 138, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>date</th>\n", | |
" <th>arg__rebasingCreditsPerToken</th>\n", | |
" <th>days</th>\n", | |
" <th>rebasingCreditsPerTokenRatio</th>\n", | |
" <th>apr</th>\n", | |
" <th>apy</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>97</th>\n", | |
" <td>2023-04-25</td>\n", | |
" <td>759786764003557820478489277</td>\n", | |
" <td>1</td>\n", | |
" <td>1.000158241529976407206176331</td>\n", | |
" <td>5.779771882388273205590489775</td>\n", | |
" <td>5.949581241961028631474097700</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>98</th>\n", | |
" <td>2023-04-26</td>\n", | |
" <td>759675339452849020435504284</td>\n", | |
" <td>1</td>\n", | |
" <td>1.000146673907815742466147353</td>\n", | |
" <td>5.357264482969993576032068325</td>\n", | |
" <td>5.502948706200521514990940400</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>99</th>\n", | |
" <td>2023-04-27</td>\n", | |
" <td>759566716059680401000344939</td>\n", | |
" <td>1</td>\n", | |
" <td>1.000143007047138812118829369</td>\n", | |
" <td>5.223332396745112640242702725</td>\n", | |
" <td>5.361761424240679806970012700</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>100</th>\n", | |
" <td>2023-04-28</td>\n", | |
" <td>759403129314870600886509476</td>\n", | |
" <td>1</td>\n", | |
" <td>1.000215414894270171352739725</td>\n", | |
" <td>7.868029013218008658818455625</td>\n", | |
" <td>8.184921916910229859350741600</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>101</th>\n", | |
" <td>2023-04-29</td>\n", | |
" <td>759254268836775670753972600</td>\n", | |
" <td>1</td>\n", | |
" <td>1.000196061430544201692237663</td>\n", | |
" <td>7.161143750626966808980641075</td>\n", | |
" <td>7.423031415198646086029046400</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>102</th>\n", | |
" <td>2023-04-30</td>\n", | |
" <td>759122327766040010520396224</td>\n", | |
" <td>1</td>\n", | |
" <td>1.000173807390337126546475560</td>\n", | |
" <td>6.348314932063547110019829000</td>\n", | |
" <td>6.553565274112792922258263300</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>103</th>\n", | |
" <td>2023-05-01</td>\n", | |
" <td>758996071784674431212304177</td>\n", | |
" <td>1</td>\n", | |
" <td>1.000166346027415801779091326</td>\n", | |
" <td>6.075788651362159981310682150</td>\n", | |
" <td>6.263623381426941384131579100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>104</th>\n", | |
" <td>2023-05-02</td>\n", | |
" <td>758847081661784010130708106</td>\n", | |
" <td>1</td>\n", | |
" <td>1.000196337478908333677131402</td>\n", | |
" <td>7.171226417126887557224458050</td>\n", | |
" <td>7.433860942396397392021667100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>105</th>\n", | |
" <td>2023-05-03</td>\n", | |
" <td>758704170428951763662508985</td>\n", | |
" <td>1</td>\n", | |
" <td>1.000188362260815632717841524</td>\n", | |
" <td>6.879931576290985019161664100</td>\n", | |
" <td>7.121427017616739367599614900</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>106</th>\n", | |
" <td>2023-05-04</td>\n", | |
" <td>758571168699717689307069357</td>\n", | |
" <td>1</td>\n", | |
" <td>1.000175331906513208684135491</td>\n", | |
" <td>6.403997885394947188048808775</td>\n", | |
" <td>6.612903606600552733315787700</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" date arg__rebasingCreditsPerToken days \\\n", | |
"97 2023-04-25 759786764003557820478489277 1 \n", | |
"98 2023-04-26 759675339452849020435504284 1 \n", | |
"99 2023-04-27 759566716059680401000344939 1 \n", | |
"100 2023-04-28 759403129314870600886509476 1 \n", | |
"101 2023-04-29 759254268836775670753972600 1 \n", | |
"102 2023-04-30 759122327766040010520396224 1 \n", | |
"103 2023-05-01 758996071784674431212304177 1 \n", | |
"104 2023-05-02 758847081661784010130708106 1 \n", | |
"105 2023-05-03 758704170428951763662508985 1 \n", | |
"106 2023-05-04 758571168699717689307069357 1 \n", | |
"\n", | |
" rebasingCreditsPerTokenRatio apr \\\n", | |
"97 1.000158241529976407206176331 5.779771882388273205590489775 \n", | |
"98 1.000146673907815742466147353 5.357264482969993576032068325 \n", | |
"99 1.000143007047138812118829369 5.223332396745112640242702725 \n", | |
"100 1.000215414894270171352739725 7.868029013218008658818455625 \n", | |
"101 1.000196061430544201692237663 7.161143750626966808980641075 \n", | |
"102 1.000173807390337126546475560 6.348314932063547110019829000 \n", | |
"103 1.000166346027415801779091326 6.075788651362159981310682150 \n", | |
"104 1.000196337478908333677131402 7.171226417126887557224458050 \n", | |
"105 1.000188362260815632717841524 6.879931576290985019161664100 \n", | |
"106 1.000175331906513208684135491 6.403997885394947188048808775 \n", | |
"\n", | |
" apy \n", | |
"97 5.949581241961028631474097700 \n", | |
"98 5.502948706200521514990940400 \n", | |
"99 5.361761424240679806970012700 \n", | |
"100 8.184921916910229859350741600 \n", | |
"101 7.423031415198646086029046400 \n", | |
"102 6.553565274112792922258263300 \n", | |
"103 6.263623381426941384131579100 \n", | |
"104 7.433860942396397392021667100 \n", | |
"105 7.121427017616739367599614900 \n", | |
"106 6.612903606600552733315787700 " | |
] | |
}, | |
"execution_count": 138, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"ousd_apy.tail(10)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 139, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>date</th>\n", | |
" <th>arg__rebasingCreditsPerToken</th>\n", | |
" <th>days</th>\n", | |
" <th>rebasingCreditsPerTokenRatio</th>\n", | |
" <th>apr</th>\n", | |
" <th>apy</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>2023-04-26</td>\n", | |
" <td>999147833631217615079819987</td>\n", | |
" <td>NaN</td>\n", | |
" <td>0</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>2023-04-28</td>\n", | |
" <td>998266025936088046385350165</td>\n", | |
" <td>2</td>\n", | |
" <td>1.000883339382708817779724281</td>\n", | |
" <td>16.13198547671978470221468176</td>\n", | |
" <td>17.49770865619387581381386180</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>2023-04-29</td>\n", | |
" <td>981904910365195432582980249</td>\n", | |
" <td>1</td>\n", | |
" <td>1.016662627305537659869279105</td>\n", | |
" <td>608.6024623347630267254193101</td>\n", | |
" <td>41716.51058660586787849046226</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>2023-04-30</td>\n", | |
" <td>980772607295983824680785657</td>\n", | |
" <td>1</td>\n", | |
" <td>1.001154501115537267698606959</td>\n", | |
" <td>42.16815324499870269161917748</td>\n", | |
" <td>52.41521736216318807727357890</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>2023-05-02</td>\n", | |
" <td>980094110939187871679241896</td>\n", | |
" <td>2</td>\n", | |
" <td>1.000692276740797651648718685</td>\n", | |
" <td>12.64270397881711323472498481</td>\n", | |
" <td>13.47170205254778990713744090</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>2023-05-03</td>\n", | |
" <td>979773547215571404918160616</td>\n", | |
" <td>1</td>\n", | |
" <td>1.000327181443638155090558952</td>\n", | |
" <td>11.95030222888361468266572180</td>\n", | |
" <td>12.69146238650552821083533100</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>2023-05-04</td>\n", | |
" <td>979469030170281006551813101</td>\n", | |
" <td>1</td>\n", | |
" <td>1.000310900126405689396719433</td>\n", | |
" <td>11.35562711696780521517729032</td>\n", | |
" <td>12.02351543369132500705441010</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" date arg__rebasingCreditsPerToken days \\\n", | |
"0 2023-04-26 999147833631217615079819987 NaN \n", | |
"1 2023-04-28 998266025936088046385350165 2 \n", | |
"2 2023-04-29 981904910365195432582980249 1 \n", | |
"3 2023-04-30 980772607295983824680785657 1 \n", | |
"4 2023-05-02 980094110939187871679241896 2 \n", | |
"5 2023-05-03 979773547215571404918160616 1 \n", | |
"6 2023-05-04 979469030170281006551813101 1 \n", | |
"\n", | |
" rebasingCreditsPerTokenRatio apr \\\n", | |
"0 0 NaN \n", | |
"1 1.000883339382708817779724281 16.13198547671978470221468176 \n", | |
"2 1.016662627305537659869279105 608.6024623347630267254193101 \n", | |
"3 1.001154501115537267698606959 42.16815324499870269161917748 \n", | |
"4 1.000692276740797651648718685 12.64270397881711323472498481 \n", | |
"5 1.000327181443638155090558952 11.95030222888361468266572180 \n", | |
"6 1.000310900126405689396719433 11.35562711696780521517729032 \n", | |
"\n", | |
" apy \n", | |
"0 NaN \n", | |
"1 17.49770865619387581381386180 \n", | |
"2 41716.51058660586787849046226 \n", | |
"3 52.41521736216318807727357890 \n", | |
"4 13.47170205254778990713744090 \n", | |
"5 12.69146238650552821083533100 \n", | |
"6 12.02351543369132500705441010 " | |
] | |
}, | |
"execution_count": 139, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"oeth_apy.tail(10)" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "tgraph", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.10.8" | |
}, | |
"orig_nbformat": 4 | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment