From fd33f24597e1a08f99419152afbb0eb8f6484105 Mon Sep 17 00:00:00 2001 From: peyha Date: Wed, 17 Apr 2024 17:42:12 +0200 Subject: [PATCH 1/9] feat(examples): implement a jupyter notebook example --- examples/morpho_blue.ipynb | 1013 ++++++++++++++++++++++++++++++++++++ 1 file changed, 1013 insertions(+) create mode 100644 examples/morpho_blue.ipynb diff --git a/examples/morpho_blue.ipynb b/examples/morpho_blue.ipynb new file mode 100644 index 00000000..bacc8fca --- /dev/null +++ b/examples/morpho_blue.ipynb @@ -0,0 +1,1013 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import cryo\n", + "import polars as pl\n", + "import json" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Constants" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "CREATION_MARKET_TOPIC = \"0xac4b2400f169220b0c0afdde7a0b32e775ba727ea1cb30b35f935cdaab8683ac\"\n", + "INTEREST_TOPIC = \"0x9d9bd501d0657d7dfe415f779a620a62b78bc508ddc0891fbbd8b7ac0f8fce87\"\n", + "BORROW_TOPIC = \"0x570954540bed6b1304a87dfe815a5eda4a648f7097a16240dcd85c9b5fd42a43\"\n", + "REPAY_TOPIC = \"0x52acb05cebbd3cd39715469f22afbf5a17496295ef3bc9bb5944056c63ccaa09\"\n", + "SUPPLY_COLLATERAL_TOPIC = \"0xa3b9472a1399e17e123f3c2e6586c23e504184d504de59cdaa2b375e880c6184\"\n", + "WITHDRAW_COLLATERAL_TOPIC = \"0xe80ebd7cc9223d7382aab2e0d1d6155c65651f83d53c8b9b06901d167e321142\"\n", + "SUPPLY_TOPIC = \"0xedf8870433c83823eb071d3df1caa8d008f12f6440918c20d75a3602cda30fe0\"\n", + "WITHDRAW_TOPIC = \"0xa56fc0ad5702ec05ce63666221f796fb62437c32db1aa1aa075fc6484cf58fbf\"\n", + "LIQUIDATION_TOPIC = \"0xa4946ede45d0c6f06a0f5ce92c9ad3b4751452d2fe0e25010783bcab57a67e41\"\n", + "\n", + "CREATION_MARKET_SIG = \"event CreateMarket(Id indexed id, MarketParams marketParams)\".replace('Id', \"bytes32\")\\\n", + " .replace('MarketParams marketParams', 'address loanToken, address collateralToken, address oracle, address irm, uint256 lltv)')\n", + "SUPPLY_SIG = \"event Supply(Id indexed id, address indexed caller, address indexed onBehalf, uint256 assets, uint256 shares)\".replace('Id', \"bytes32\")\n", + "WITHDRAW_SIG = \"event Withdraw(Id indexed id,address caller,address indexed onBehalf,address indexed receiver,uint256 assets,uint256 shares);\".replace('Id', \"bytes32\")\n", + "BORROW_SIG = \"event Borrow(Id indexed id, address caller, address indexed onBehalf, address indexed receiver, uint256 assets, uint256 shares)\".replace('Id', \"bytes32\")\n", + "REPAY_SIG = \"event Repay(Id indexed id, address indexed caller, address indexed onBehalf, uint256 assets, uint256 shares)\".replace('Id', \"bytes32\")\n", + "SUPPLY_COLLATERAL_SIG = \"event SupplyCollateral(Id indexed id, address indexed caller, address indexed onBehalf, uint256 assets)\".replace('Id', \"bytes32\")\n", + "WITHDRAW_COLLATERAL_SIG = \"event WithdrawCollateral(Id indexed id, address caller, address indexed onBehalf, address indexed receiver, uint256 assets)\".replace('Id', \"bytes32\")\n", + "LIQUIDATION_SIG = \"event Liquidate(Id indexed id,address indexed caller,address indexed borrower,uint256 repaidAssets,uint256 repaidShares,uint256 seizedAssets,uint256 badDebtAssets,uint256 badDebtShares);\".replace('Id', \"bytes32\")\n", + "INTEREST_SIG = \"event AccrueInterest(Id indexed id, uint256 prevBorrowRate, uint256 interest, uint256 feeShares);\".replace('Id', \"bytes32\")\n", + "\n", + "BLUE_CONTRACT_ADDRESS = \"0xBBBBBbbBBb9cC5e90e3b3Af64bdAF62C37EEFFCb\"\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Utils" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "def convert_to_type(x, type, name=\"\", data_offset = 0):\n", + " ''' Convert raw data to a specific type\n", + " x: the raw data (bytes)\n", + " type: the type of the data\n", + " name: the name of the data\n", + " data_offset: the offset of the data in the raw data'''\n", + " \n", + " if type == 'string':\n", + " offset = int(x[data_offset+12: data_offset + 32].hex(), 16)\n", + " length = int(x[offset:offset + 32].hex(), 16)\n", + " return x[offset + 32: offset + 32 + length].decode('utf-8')\n", + " elif '[]' in type:\n", + " # TODO\n", + " return '0x'\n", + " elif len(type) > 4 and type[:4] == 'uint':\n", + " return float(int(x[data_offset+22: data_offset+32].hex(), 16))\n", + " elif type == 'address':\n", + " return '0x' + x[12+data_offset:32+data_offset].hex()\n", + " elif type == 'bool':\n", + " return int(x[data_offset: 32 + data_offset], 16) > 0\n", + " elif len(type) > 5 and type[:5] == 'bytes':\n", + " bytes_left = 32 - int(type[5:])\n", + " return '0x' + x[data_offset+bytes_left: data_offset+32].hex()\n", + " else:\n", + " return x\n", + " \n", + "def parse_raw_events(raw_events: pl.DataFrame, signature: str) -> pl.DataFrame:\n", + " '''\n", + " Parse raw events from a DataFrame, this dataframe should contain the following columns:\n", + " - topic0 to topic3: the topics of the event\n", + " - data: the data of the event\n", + " The signature is used to determine the type of the event, it should look like this:\n", + " \"EventName(uint256 indexed arg1, uint256 indexed arg2, T arg3, ...)\"\n", + "\n", + " The function works with basic types (string, uint, address, bool, bytes) but not yet (TODO) with arrays or structs.\n", + " '''\n", + " \n", + " # Parse the signature\n", + " first_parenthesis = signature.find('(')\n", + " last_parenthesis = signature.rfind(')')\n", + "\n", + " print(f'Parsing Event name: {signature[:first_parenthesis]}')\n", + "\n", + " types_str = signature[first_parenthesis + 1:last_parenthesis]\n", + " types = types_str.split(',')\n", + " indexed_types, data_types = [], []\n", + "\n", + " for t in types:\n", + " parts = t.strip().split(' ')\n", + " if 'indexed' in parts:\n", + " indexed_types.append((parts[0], parts[-1]))\n", + " else:\n", + " data_types.append((parts[0], parts[-1]))\n", + "\n", + " dfs = []\n", + " for index, (type, name) in enumerate(data_types):\n", + " data_events_cur_df = raw_events.select([\n", + " pl.col(\"data\").map_elements(lambda x: convert_to_type(x, type, name, 32*index)).alias(name)\n", + " ] + [pl.col(\"block_number\"), pl.col(\"transaction_index\", \"log_index\")])\n", + " dfs.append(data_events_cur_df)\n", + "\n", + " data_events_df = raw_events.select([\n", + " pl.col(\"data\").map_elements(lambda x: convert_to_type(x, type, name, 32*index)).alias(name)\n", + " for index, (type, name) in enumerate(data_types)\n", + " ] + [pl.col(\"block_number\"), pl.col(\"transaction_index\", \"log_index\")])\n", + " indexed_events_df = raw_events.select([\n", + " pl.col(f\"topic{1+index}\").map_elements(lambda x: convert_to_type(x, type)).alias(name)\n", + " for index, (type, name) in enumerate(indexed_types)\n", + " ] + [pl.col(\"block_number\"), pl.col(\"transaction_index\", \"log_index\")])\n", + "\n", + " print(f'Indexed types: {indexed_types}')\n", + " print(f'Data types: {data_types}')\n", + " \n", + "\n", + " res_df = indexed_events_df\n", + " for df in dfs:\n", + " res_df = res_df.join(df, on=[\"block_number\", \"transaction_index\", \"log_index\"], how=\"inner\")\n", + "\n", + " return res_df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Blue market creation\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "shape: (5, 11)
block_numbertransaction_indexlog_indextransaction_hashaddresstopic0topic1topic2topic3datachain_id
u32u32u32binarybinarybinarybinarybinarybinarybinaryu64
1891962373135b"\\x16\\x1c\\x8d\\xb8X\\x86\\x1e\\xa5\\x11\\x9dhl\\xde#\\xe3\\xda\\xbb\\x88\\xd3\\xd2\\xd2\\xa9\\xe1\\x172\\xca=\\x96`\\xfc\\x97\\xf6"b"\\xbb\\xbb\\xbb\\xbb\\xbb\\x9c\\xc5\\xe9\\x0e;:\\xf6K\\xda\\xf6,7\\xee\\xff\\xcb"b"\\xacK$\\x00\\xf1i"\\x0b\\x0c\\x0a\\xfd\\xdez\\x0b2\\xe7u\\xbar~\\xa1\\xcb0\\xb3_\\x93\\\\xda\\xab\\x86\\x83\\xac"b"\\xc5Mz\\xcf\\x14\\xde)\\xe0\\xe5R|\\xab\\xd7\\xa5vPhp4jx\\xa1\\x1agb\\xe2\\xcc\\xa6c"\\xecA"nullnullb"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xc0*\\xaa9\\xb2#\\xfe\\x8d\\x0a\\x0e\\O'\\xea\\xd9\\x08<ul\\xc2\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x7f9\\xc5\\x81\\xf5\\x95\\xb5<\\\\xb1\\x9b\\xd0\\xb3\\xf8\\xdal\\x93^,\\xa0"...1
1891985895141b"\\xea\\x1co\\xae\\xa5\\x17)\\xc6\\x91\\x92\\x98\\xd6\\x0e\\x99\\xee\\x20\\xd1\\xb4^<\\xec\\x993\\xeac\\x8c\\xc1\\xa6\\x96$\\xb9\\xdf"b"\\xbb\\xbb\\xbb\\xbb\\xbb\\x9c\\xc5\\xe9\\x0e;:\\xf6K\\xda\\xf6,7\\xee\\xff\\xcb"b"\\xacK$\\x00\\xf1i"\\x0b\\x0c\\x0a\\xfd\\xdez\\x0b2\\xe7u\\xbar~\\xa1\\xcb0\\xb3_\\x93\\\\xda\\xab\\x86\\x83\\xac"b"T\\xef\\xde\\xe0\\x8e'.\\x92\\x904\\xa8\\xf2o|\\xa3K\\x1e\\xbe6K'S\\x91\\x16\\x9b(\\xc6\\xd7\\xdb$\\xdb\\xc8"nullnullb"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xa0\\xb8i\\x91\\xc6!\\x8b6\\xc1\\xd1\\x9dJ.\\x9e\\xb0\\xce6\\x06\\xebH\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00"...1
1891986080255b"\\xbe\\x0a\\x1a\\x90x\\xef\\xed\\xa0\\xa1\\xbb\\xf0\\x90Lr\\x03\\xa0\\x90Zc\\xb1kc\\xe1\\x05'J*\\x19\\x91_w\\x9d"b"\\xbb\\xbb\\xbb\\xbb\\xbb\\x9c\\xc5\\xe9\\x0e;:\\xf6K\\xda\\xf6,7\\xee\\xff\\xcb"b"\\xacK$\\x00\\xf1i"\\x0b\\x0c\\x0a\\xfd\\xdez\\x0b2\\xe7u\\xbar~\\xa1\\xcb0\\xb3_\\x93\\\\xda\\xab\\x86\\x83\\xac"b"X\\xe2\\x12\\x06\\x06E\\xd1\\x8e\\xabm\\x9b*\\xf3\\xd5o\\xbc\\x90j\\x92\\xffVg8_aof,p7"\\x84"nullnullb"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xc0*\\xaa9\\xb2#\\xfe\\x8d\\x0a\\x0e\\O'\\xea\\xd9\\x08<ul\\xc2\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00"...1
18925864126392b"%L]\\xd1x6\\xbc\\x80\\xa3\\xe4\\xd6\\xfe\\xfe\\xe4|\\xae{N?\\xe6\\x90D\\x19?\\xab##\\x94\\x0e\\xdd8\\xa0"b"\\xbb\\xbb\\xbb\\xbb\\xbb\\x9c\\xc5\\xe9\\x0e;:\\xf6K\\xda\\xf6,7\\xee\\xff\\xcb"b"\\xacK$\\x00\\xf1i"\\x0b\\x0c\\x0a\\xfd\\xdez\\x0b2\\xe7u\\xbar~\\xa1\\xcb0\\xb3_\\x93\\\\xda\\xab\\x86\\x83\\xac"b"\\x08SX\\x10\\xfe\\xad\\xf5-a\\xa1\\x82\\xdcz\\x12\\xbax\\xf9\\xb3\\x8a\\x82\\x9e\\xe4w\\xe0\\xe1\\xd4\\x88\\xd4\\xe2b\\xbc\\x0a"nullnullb"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xa0\\xb8i\\x91\\xc6!\\x8b6\\xc1\\xd1\\x9dJ.\\x9e\\xb0\\xce6\\x06\\xebH\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xab\\xc5a\\x86\\xc2\\xdfc\\xc38\\xe0L\\x9c\\x9b\\x98\\x14\\xe2y\\x83\\xa5\\xa9"...1
1892591094214b"\\xf7f\\xfa\\x95`\\x04\\xbc\\xea\\x9b\\x0eW\\xc4V/\\xf9T\\xed\\xfd0f\\xcd\\x9f!\\xe2\\x8f\\xba\\xba\\xe4\\x01\\xb7\\x8e\\xde"b"\\xbb\\xbb\\xbb\\xbb\\xbb\\x9c\\xc5\\xe9\\x0e;:\\xf6K\\xda\\xf6,7\\xee\\xff\\xcb"b"\\xacK$\\x00\\xf1i"\\x0b\\x0c\\x0a\\xfd\\xdez\\x0b2\\xe7u\\xbar~\\xa1\\xcb0\\xb3_\\x93\\\\xda\\xab\\x86\\x83\\xac"b"\\xb3#I_~AH\\xbeVC\\xa4\\xeaJ\\x82!\\xee\\xf1c\\xe4\\xbc\\xcf\\xde\\xdc*oF\\x96\\xba\\xac\\xbc\\x86\\xcc"nullnullb"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xa0\\xb8i\\x91\\xc6!\\x8b6\\xc1\\xd1\\x9dJ.\\x9e\\xb0\\xce6\\x06\\xebH\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x7f9\\xc5\\x81\\xf5\\x95\\xb5<\\\\xb1\\x9b\\xd0\\xb3\\xf8\\xdal\\x93^,\\xa0"...1
" + ], + "text/plain": [ + "shape: (5, 11)\n", + "┌─────────────┬─────────────┬───────────┬────────────┬───┬────────┬────────┬────────────┬──────────┐\n", + "│ block_numbe ┆ transaction ┆ log_index ┆ transactio ┆ … ┆ topic2 ┆ topic3 ┆ data ┆ chain_id │\n", + "│ r ┆ _index ┆ --- ┆ n_hash ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", + "│ --- ┆ --- ┆ u32 ┆ --- ┆ ┆ binary ┆ binary ┆ binary ┆ u64 │\n", + "│ u32 ┆ u32 ┆ ┆ binary ┆ ┆ ┆ ┆ ┆ │\n", + "╞═════════════╪═════════════╪═══════════╪════════════╪═══╪════════╪════════╪════════════╪══════════╡\n", + "│ 18919623 ┆ 73 ┆ 135 ┆ b\"\\x16\\x1c ┆ … ┆ null ┆ null ┆ b\"\\x00\\x00 ┆ 1 │\n", + "│ ┆ ┆ ┆ \\x8d\\xb8X\\ ┆ ┆ ┆ ┆ \\x00\\x00\\x ┆ │\n", + "│ ┆ ┆ ┆ x86\\x1e\\xa ┆ ┆ ┆ ┆ 00\\x00\\x00 ┆ │\n", + "│ ┆ ┆ ┆ 5\\… ┆ ┆ ┆ ┆ \\x… ┆ │\n", + "│ 18919858 ┆ 95 ┆ 141 ┆ b\"\\xea\\x1c ┆ … ┆ null ┆ null ┆ b\"\\x00\\x00 ┆ 1 │\n", + "│ ┆ ┆ ┆ o\\xae\\xa5\\ ┆ ┆ ┆ ┆ \\x00\\x00\\x ┆ │\n", + "│ ┆ ┆ ┆ x17)\\xc6\\x ┆ ┆ ┆ ┆ 00\\x00\\x00 ┆ │\n", + "│ ┆ ┆ ┆ 91… ┆ ┆ ┆ ┆ \\x… ┆ │\n", + "│ 18919860 ┆ 80 ┆ 255 ┆ b\"\\xbe\\x0a ┆ … ┆ null ┆ null ┆ b\"\\x00\\x00 ┆ 1 │\n", + "│ ┆ ┆ ┆ \\x1a\\x90x\\ ┆ ┆ ┆ ┆ \\x00\\x00\\x ┆ │\n", + "│ ┆ ┆ ┆ xef\\xed\\xa ┆ ┆ ┆ ┆ 00\\x00\\x00 ┆ │\n", + "│ ┆ ┆ ┆ 0\\… ┆ ┆ ┆ ┆ \\x… ┆ │\n", + "│ 18925864 ┆ 126 ┆ 392 ┆ b\"%L]\\xd1x ┆ … ┆ null ┆ null ┆ b\"\\x00\\x00 ┆ 1 │\n", + "│ ┆ ┆ ┆ 6\\xbc\\x80\\ ┆ ┆ ┆ ┆ \\x00\\x00\\x ┆ │\n", + "│ ┆ ┆ ┆ xa3\\xe4\\xd ┆ ┆ ┆ ┆ 00\\x00\\x00 ┆ │\n", + "│ ┆ ┆ ┆ 6\\… ┆ ┆ ┆ ┆ \\x… ┆ │\n", + "│ 18925910 ┆ 94 ┆ 214 ┆ b\"\\xf7f\\xf ┆ … ┆ null ┆ null ┆ b\"\\x00\\x00 ┆ 1 │\n", + "│ ┆ ┆ ┆ a\\x95`\\x04 ┆ ┆ ┆ ┆ \\x00\\x00\\x ┆ │\n", + "│ ┆ ┆ ┆ \\xbc\\xea\\x ┆ ┆ ┆ ┆ 00\\x00\\x00 ┆ │\n", + "│ ┆ ┆ ┆ 9b… ┆ ┆ ┆ ┆ \\x… ┆ │\n", + "└─────────────┴─────────────┴───────────┴────────────┴───┴────────┴────────┴────────────┴──────────┘" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "params = {\n", + " \"datatype\": \"events\",\n", + " \"blocks\": [\"18.9M:\"],\n", + " \"inner_request_size\": 10000,\n", + " \"contract\": [BLUE_CONTRACT_ADDRESS],\n", + " \"topic0\": [CREATION_MARKET_TOPIC],\n", + "}\n", + "blue_market_creations_raw = cryo.collect(\n", + " **params\n", + ")\n", + "\n", + "blue_market_creations_raw.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Parsing Event name: event CreateMarket\n", + "Indexed types: [('bytes32', 'id')]\n", + "Data types: [('address', 'loanToken'), ('address', 'collateralToken'), ('address', 'oracle'), ('address', 'irm'), ('uint256', 'lltv')]\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "shape: (5, 9)
idblock_numbertransaction_indexlog_indexloanTokencollateralTokenoracleirmlltv
stru32u32u32strstrstrstrf64
"0xc54d7acf14de…1891962373135"0xc02aaa39b223…"0x7f39c581f595…"0x2a01eb949609…"0x870ac11d48b1…9.4500e17
"0x54efdee08e27…1891985895141"0xa0b86991c621…"0x000000000000…"0x000000000000…"0x000000000000…0.0
"0x58e212060645…1891986080255"0xc02aaa39b223…"0x000000000000…"0x000000000000…"0x000000000000…0.0
"0x08535810fead…18925864126392"0xa0b86991c621…"0xabc56186c2df…"0x6e8f5b2df218…"0x870ac11d48b1…9.6500e17
"0xb323495f7e41…1892591094214"0xa0b86991c621…"0x7f39c581f595…"0x48f7e36eb6b8…"0x870ac11d48b1…8.6000e17
" + ], + "text/plain": [ + "shape: (5, 9)\n", + "┌───────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬──────────┐\n", + "│ id ┆ block_num ┆ transacti ┆ log_index ┆ … ┆ collatera ┆ oracle ┆ irm ┆ lltv │\n", + "│ --- ┆ ber ┆ on_index ┆ --- ┆ ┆ lToken ┆ --- ┆ --- ┆ --- │\n", + "│ str ┆ --- ┆ --- ┆ u32 ┆ ┆ --- ┆ str ┆ str ┆ f64 │\n", + "│ ┆ u32 ┆ u32 ┆ ┆ ┆ str ┆ ┆ ┆ │\n", + "╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪══════════╡\n", + "│ 0xc54d7ac ┆ 18919623 ┆ 73 ┆ 135 ┆ … ┆ 0x7f39c58 ┆ 0x2a01eb9 ┆ 0x870ac11 ┆ 9.4500e1 │\n", + "│ f14de29e0 ┆ ┆ ┆ ┆ ┆ 1f595b53c ┆ 496094da0 ┆ d48b15db9 ┆ 7 │\n", + "│ e5527cabd ┆ ┆ ┆ ┆ ┆ 5cb19bd0b ┆ 3c4e364de ┆ a138cf899 ┆ │\n", + "│ 7a576… ┆ ┆ ┆ ┆ ┆ 3f8da… ┆ f50f5… ┆ d20f1… ┆ │\n", + "│ 0x54efdee ┆ 18919858 ┆ 95 ┆ 141 ┆ … ┆ 0x0000000 ┆ 0x0000000 ┆ 0x0000000 ┆ 0.0 │\n", + "│ 08e272e92 ┆ ┆ ┆ ┆ ┆ 000000000 ┆ 000000000 ┆ 000000000 ┆ │\n", + "│ 9034a8f26 ┆ ┆ ┆ ┆ ┆ 000000000 ┆ 000000000 ┆ 000000000 ┆ │\n", + "│ f7ca3… ┆ ┆ ┆ ┆ ┆ 00000… ┆ 00000… ┆ 00000… ┆ │\n", + "│ 0x58e2120 ┆ 18919860 ┆ 80 ┆ 255 ┆ … ┆ 0x0000000 ┆ 0x0000000 ┆ 0x0000000 ┆ 0.0 │\n", + "│ 60645d18e ┆ ┆ ┆ ┆ ┆ 000000000 ┆ 000000000 ┆ 000000000 ┆ │\n", + "│ ab6d9b2af ┆ ┆ ┆ ┆ ┆ 000000000 ┆ 000000000 ┆ 000000000 ┆ │\n", + "│ 3d56f… ┆ ┆ ┆ ┆ ┆ 00000… ┆ 00000… ┆ 00000… ┆ │\n", + "│ 0x0853581 ┆ 18925864 ┆ 126 ┆ 392 ┆ … ┆ 0xabc5618 ┆ 0x6e8f5b2 ┆ 0x870ac11 ┆ 9.6500e1 │\n", + "│ 0feadf52d ┆ ┆ ┆ ┆ ┆ 6c2df63c3 ┆ df218443e ┆ d48b15db9 ┆ 7 │\n", + "│ 61a182dc7 ┆ ┆ ┆ ┆ ┆ 38e04c9c9 ┆ 87fe8aa98 ┆ a138cf899 ┆ │\n", + "│ a12ba… ┆ ┆ ┆ ┆ ┆ b9814… ┆ 11e69… ┆ d20f1… ┆ │\n", + "│ 0xb323495 ┆ 18925910 ┆ 94 ┆ 214 ┆ … ┆ 0x7f39c58 ┆ 0x48f7e36 ┆ 0x870ac11 ┆ 8.6000e1 │\n", + "│ f7e4148be ┆ ┆ ┆ ┆ ┆ 1f595b53c ┆ eb6b826b2 ┆ d48b15db9 ┆ 7 │\n", + "│ 5643a4ea4 ┆ ┆ ┆ ┆ ┆ 5cb19bd0b ┆ df4b2e630 ┆ a138cf899 ┆ │\n", + "│ a8221… ┆ ┆ ┆ ┆ ┆ 3f8da… ┆ b62cd… ┆ d20f1… ┆ │\n", + "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "blue_market_creations = parse_raw_events(blue_market_creations_raw, \n", + "\"event CreateMarket(bytes32 indexed id, address loanToken, address collateralToken, address oracle, address irm, uint256 lltv)\")\n", + "\n", + "blue_market_creations.head(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Interactions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Supply" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Parsing Event name: event Supply\n", + "Indexed types: [('bytes32', 'id'), ('address', 'caller'), ('address', 'onBehalf')]\n", + "Data types: [('uint256', 'assets'), ('uint256', 'shares')]\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "shape: (5, 8)
idcalleronBehalfblock_numbertransaction_indexlog_indexassetsshares
strstrstru32u32u32f64f64
"0x4a8221eef163…"0x9106cbf2c882…"0x9106cbf2c882…189261661042081e81.0000e14
"0x4a8221eef163…"0xbeef01735c13…"0xbeef01735c13…18940531932591.0000e99.9999e14
"0xd7a576506870…"0x38989bba00bd…"0x38989bba00bd…18941243381055.0000e165.0000e22
"0x4a8221eef163…"0xbeef01735c13…"0xbeef01735c13…18941650871731.0000e109.9999e15
"0x4a8221eef163…"0xbeef01735c13…"0xbeef01735c13…1894221174972e82.0000e14
" + ], + "text/plain": [ + "shape: (5, 8)\n", + "┌────────────┬────────────┬────────────┬───────────┬───────────┬───────────┬───────────┬───────────┐\n", + "│ id ┆ caller ┆ onBehalf ┆ block_num ┆ transacti ┆ log_index ┆ assets ┆ shares │\n", + "│ --- ┆ --- ┆ --- ┆ ber ┆ on_index ┆ --- ┆ --- ┆ --- │\n", + "│ str ┆ str ┆ str ┆ --- ┆ --- ┆ u32 ┆ f64 ┆ f64 │\n", + "│ ┆ ┆ ┆ u32 ┆ u32 ┆ ┆ ┆ │\n", + "╞════════════╪════════════╪════════════╪═══════════╪═══════════╪═══════════╪═══════════╪═══════════╡\n", + "│ 0x4a8221ee ┆ 0x9106cbf2 ┆ 0x9106cbf2 ┆ 18926166 ┆ 104 ┆ 208 ┆ 1e8 ┆ 1.0000e14 │\n", + "│ f163e4bccf ┆ c882340b23 ┆ c882340b23 ┆ ┆ ┆ ┆ ┆ │\n", + "│ dedc2a6f46 ┆ cc40985c05 ┆ cc40985c05 ┆ ┆ ┆ ┆ ┆ │\n", + "│ 96… ┆ 64… ┆ 64… ┆ ┆ ┆ ┆ ┆ │\n", + "│ 0x4a8221ee ┆ 0xbeef0173 ┆ 0xbeef0173 ┆ 18940531 ┆ 93 ┆ 259 ┆ 1.0000e9 ┆ 9.9999e14 │\n", + "│ f163e4bccf ┆ 5c132ada46 ┆ 5c132ada46 ┆ ┆ ┆ ┆ ┆ │\n", + "│ dedc2a6f46 ┆ aa9aa4c546 ┆ aa9aa4c546 ┆ ┆ ┆ ┆ ┆ │\n", + "│ 96… ┆ 23… ┆ 23… ┆ ┆ ┆ ┆ ┆ │\n", + "│ 0xd7a57650 ┆ 0x38989bba ┆ 0x38989bba ┆ 18941243 ┆ 38 ┆ 105 ┆ 5.0000e16 ┆ 5.0000e22 │\n", + "│ 6870346a78 ┆ 00bdf8181f ┆ 00bdf8181f ┆ ┆ ┆ ┆ ┆ │\n", + "│ a11a6762e2 ┆ 4082995b3d ┆ 4082995b3d ┆ ┆ ┆ ┆ ┆ │\n", + "│ cc… ┆ ea… ┆ ea… ┆ ┆ ┆ ┆ ┆ │\n", + "│ 0x4a8221ee ┆ 0xbeef0173 ┆ 0xbeef0173 ┆ 18941650 ┆ 87 ┆ 173 ┆ 1.0000e10 ┆ 9.9999e15 │\n", + "│ f163e4bccf ┆ 5c132ada46 ┆ 5c132ada46 ┆ ┆ ┆ ┆ ┆ │\n", + "│ dedc2a6f46 ┆ aa9aa4c546 ┆ aa9aa4c546 ┆ ┆ ┆ ┆ ┆ │\n", + "│ 96… ┆ 23… ┆ 23… ┆ ┆ ┆ ┆ ┆ │\n", + "│ 0x4a8221ee ┆ 0xbeef0173 ┆ 0xbeef0173 ┆ 18942211 ┆ 74 ┆ 97 ┆ 2e8 ┆ 2.0000e14 │\n", + "│ f163e4bccf ┆ 5c132ada46 ┆ 5c132ada46 ┆ ┆ ┆ ┆ ┆ │\n", + "│ dedc2a6f46 ┆ aa9aa4c546 ┆ aa9aa4c546 ┆ ┆ ┆ ┆ ┆ │\n", + "│ 96… ┆ 23… ┆ 23… ┆ ┆ ┆ ┆ ┆ │\n", + "└────────────┴────────────┴────────────┴───────────┴───────────┴───────────┴───────────┴───────────┘" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "params = {\n", + " \"datatype\": \"events\",\n", + " \"blocks\": [\"18.9M:\"],\n", + " \"inner_request_size\": 10000,\n", + " \"contract\": [BLUE_CONTRACT_ADDRESS],\n", + " \"topic0\": [SUPPLY_TOPIC],\n", + "}\n", + "blue_supply_raw = cryo.collect(\n", + " **params\n", + ")\n", + "\n", + "blue_supply = parse_raw_events(blue_supply_raw, SUPPLY_SIG)\n", + "\n", + "blue_supply.head(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Withdraw" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Parsing Event name: event Withdraw\n", + "Indexed types: [('bytes32', 'id'), ('address', 'onBehalf'), ('address', 'receiver')]\n", + "Data types: [('address', 'caller'), ('uint256', 'assets'), ('uint256', 'shares')]\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "shape: (5, 9)
idonBehalfreceiverblock_numbertransaction_indexlog_indexcallerassetsshares
strstrstru32u32u32strf64f64
"0xd7a576506870…"0x38989bba00bd…"0x38989bba00bd…1894140766104"0x38989bba00bd…1.2500e161.2500e22
"0x4a8221eef163…"0xbeef01735c13…"0xbeef01735c13…1894165087180"0xbeef01735c13…1.0000e99.9999e14
"0x4a8221eef163…"0xbeef01735c13…"0xbeef01735c13…189632223788"0xbeef01735c13…1.0999992.0
"0xd7a576506870…"0x38989bba00bd…"0x38989bba00bd…1896549693234"0x38989bba00bd…1.0010e151.0010e21
"0xd7a576506870…"0x38989bba00bd…"0x38989bba00bd…1896965676146"0x38989bba00bd…2.3000e152.2999e21
" + ], + "text/plain": [ + "shape: (5, 9)\n", + "┌───────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬──────────┐\n", + "│ id ┆ onBehalf ┆ receiver ┆ block_num ┆ … ┆ log_index ┆ caller ┆ assets ┆ shares │\n", + "│ --- ┆ --- ┆ --- ┆ ber ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", + "│ str ┆ str ┆ str ┆ --- ┆ ┆ u32 ┆ str ┆ f64 ┆ f64 │\n", + "│ ┆ ┆ ┆ u32 ┆ ┆ ┆ ┆ ┆ │\n", + "╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪══════════╡\n", + "│ 0xd7a5765 ┆ 0x38989bb ┆ 0x38989bb ┆ 18941407 ┆ … ┆ 104 ┆ 0x38989bb ┆ 1.2500e16 ┆ 1.2500e2 │\n", + "│ 06870346a ┆ a00bdf818 ┆ a00bdf818 ┆ ┆ ┆ ┆ a00bdf818 ┆ ┆ 2 │\n", + "│ 78a11a676 ┆ 1f4082995 ┆ 1f4082995 ┆ ┆ ┆ ┆ 1f4082995 ┆ ┆ │\n", + "│ 2e2cc… ┆ b3dea… ┆ b3dea… ┆ ┆ ┆ ┆ b3dea… ┆ ┆ │\n", + "│ 0x4a8221e ┆ 0xbeef017 ┆ 0xbeef017 ┆ 18941650 ┆ … ┆ 180 ┆ 0xbeef017 ┆ 1.0000e9 ┆ 9.9999e1 │\n", + "│ ef163e4bc ┆ 35c132ada ┆ 35c132ada ┆ ┆ ┆ ┆ 35c132ada ┆ ┆ 4 │\n", + "│ cfdedc2a6 ┆ 46aa9aa4c ┆ 46aa9aa4c ┆ ┆ ┆ ┆ 46aa9aa4c ┆ ┆ │\n", + "│ f4696… ┆ 54623… ┆ 54623… ┆ ┆ ┆ ┆ 54623… ┆ ┆ │\n", + "│ 0x4a8221e ┆ 0xbeef017 ┆ 0xbeef017 ┆ 18963222 ┆ … ┆ 88 ┆ 0xbeef017 ┆ 1.0 ┆ 999992.0 │\n", + "│ ef163e4bc ┆ 35c132ada ┆ 35c132ada ┆ ┆ ┆ ┆ 35c132ada ┆ ┆ │\n", + "│ cfdedc2a6 ┆ 46aa9aa4c ┆ 46aa9aa4c ┆ ┆ ┆ ┆ 46aa9aa4c ┆ ┆ │\n", + "│ f4696… ┆ 54623… ┆ 54623… ┆ ┆ ┆ ┆ 54623… ┆ ┆ │\n", + "│ 0xd7a5765 ┆ 0x38989bb ┆ 0x38989bb ┆ 18965496 ┆ … ┆ 234 ┆ 0x38989bb ┆ 1.0010e15 ┆ 1.0010e2 │\n", + "│ 06870346a ┆ a00bdf818 ┆ a00bdf818 ┆ ┆ ┆ ┆ a00bdf818 ┆ ┆ 1 │\n", + "│ 78a11a676 ┆ 1f4082995 ┆ 1f4082995 ┆ ┆ ┆ ┆ 1f4082995 ┆ ┆ │\n", + "│ 2e2cc… ┆ b3dea… ┆ b3dea… ┆ ┆ ┆ ┆ b3dea… ┆ ┆ │\n", + "│ 0xd7a5765 ┆ 0x38989bb ┆ 0x38989bb ┆ 18969656 ┆ … ┆ 146 ┆ 0x38989bb ┆ 2.3000e15 ┆ 2.2999e2 │\n", + "│ 06870346a ┆ a00bdf818 ┆ a00bdf818 ┆ ┆ ┆ ┆ a00bdf818 ┆ ┆ 1 │\n", + "│ 78a11a676 ┆ 1f4082995 ┆ 1f4082995 ┆ ┆ ┆ ┆ 1f4082995 ┆ ┆ │\n", + "│ 2e2cc… ┆ b3dea… ┆ b3dea… ┆ ┆ ┆ ┆ b3dea… ┆ ┆ │\n", + "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "params = {\n", + " \"datatype\": \"events\",\n", + " \"blocks\": [\"18.9M:\"],\n", + " \"inner_request_size\": 10000,\n", + " \"contract\": [BLUE_CONTRACT_ADDRESS],\n", + " \"topic0\": [WITHDRAW_TOPIC],\n", + "}\n", + "\n", + "blue_withdraw_raw = cryo.collect(\n", + " **params\n", + ")\n", + "\n", + "blue_withdraw = parse_raw_events(blue_withdraw_raw, WITHDRAW_SIG)\n", + "\n", + "blue_withdraw.head(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Supply collateral " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Parsing Event name: event SupplyCollateral\n", + "Indexed types: [('bytes32', 'id'), ('address', 'caller'), ('address', 'onBehalf')]\n", + "Data types: [('uint256', 'assets')]\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "shape: (5, 7)
idcalleronBehalfblock_numbertransaction_indexlog_indexassets
strstrstru32u32u32f64
"0x4a8221eef163…"0x9106cbf2c882…"0x9106cbf2c882…18926070881355.0000e16
"0xd7a576506870…"0xa7995f71aa11…"0x4563364bd619…189421761092044.0000e16
"0x4a8221eef163…"0xa7995f71aa11…"0x4563364bd619…189421761092074.6777e16
"0xd7a576506870…"0xa7995f71aa11…"0x6e632701fd42…189431341323441.0000e14
"0x4a8221eef163…"0xa7995f71aa11…"0x2b5469940fa5…18943214932521.0000e16
" + ], + "text/plain": [ + "shape: (5, 7)\n", + "┌──────────────┬──────────────┬──────────────┬──────────────┬──────────────┬───────────┬───────────┐\n", + "│ id ┆ caller ┆ onBehalf ┆ block_number ┆ transaction_ ┆ log_index ┆ assets │\n", + "│ --- ┆ --- ┆ --- ┆ --- ┆ index ┆ --- ┆ --- │\n", + "│ str ┆ str ┆ str ┆ u32 ┆ --- ┆ u32 ┆ f64 │\n", + "│ ┆ ┆ ┆ ┆ u32 ┆ ┆ │\n", + "╞══════════════╪══════════════╪══════════════╪══════════════╪══════════════╪═══════════╪═══════════╡\n", + "│ 0x4a8221eef1 ┆ 0x9106cbf2c8 ┆ 0x9106cbf2c8 ┆ 18926070 ┆ 88 ┆ 135 ┆ 5.0000e16 │\n", + "│ 63e4bccfdedc ┆ 82340b23cc40 ┆ 82340b23cc40 ┆ ┆ ┆ ┆ │\n", + "│ 2a6f4696… ┆ 985c0564… ┆ 985c0564… ┆ ┆ ┆ ┆ │\n", + "│ 0xd7a5765068 ┆ 0xa7995f71aa ┆ 0x4563364bd6 ┆ 18942176 ┆ 109 ┆ 204 ┆ 4.0000e16 │\n", + "│ 70346a78a11a ┆ 11525db02fc2 ┆ 1976ba6f1297 ┆ ┆ ┆ ┆ │\n", + "│ 6762e2cc… ┆ 473c37de… ┆ c253beae… ┆ ┆ ┆ ┆ │\n", + "│ 0x4a8221eef1 ┆ 0xa7995f71aa ┆ 0x4563364bd6 ┆ 18942176 ┆ 109 ┆ 207 ┆ 4.6777e16 │\n", + "│ 63e4bccfdedc ┆ 11525db02fc2 ┆ 1976ba6f1297 ┆ ┆ ┆ ┆ │\n", + "│ 2a6f4696… ┆ 473c37de… ┆ c253beae… ┆ ┆ ┆ ┆ │\n", + "│ 0xd7a5765068 ┆ 0xa7995f71aa ┆ 0x6e632701fd ┆ 18943134 ┆ 132 ┆ 344 ┆ 1.0000e14 │\n", + "│ 70346a78a11a ┆ 11525db02fc2 ┆ 42a9b856294a ┆ ┆ ┆ ┆ │\n", + "│ 6762e2cc… ┆ 473c37de… ┆ 2172dd63… ┆ ┆ ┆ ┆ │\n", + "│ 0x4a8221eef1 ┆ 0xa7995f71aa ┆ 0x2b5469940f ┆ 18943214 ┆ 93 ┆ 252 ┆ 1.0000e16 │\n", + "│ 63e4bccfdedc ┆ 11525db02fc2 ┆ a577bc4082c6 ┆ ┆ ┆ ┆ │\n", + "│ 2a6f4696… ┆ 473c37de… ┆ 940ee4d8… ┆ ┆ ┆ ┆ │\n", + "└──────────────┴──────────────┴──────────────┴──────────────┴──────────────┴───────────┴───────────┘" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "params = {\n", + " \"datatype\": \"events\",\n", + " \"blocks\": [\"18.9M:\"],\n", + " \"inner_request_size\": 10000,\n", + " \"contract\": [BLUE_CONTRACT_ADDRESS],\n", + " \"topic0\": [SUPPLY_COLLATERAL_TOPIC]\n", + "}\n", + "\n", + "blue_supply_collateral_raw = cryo.collect(\n", + " **params\n", + ")\n", + "\n", + "blue_supply_collateral = parse_raw_events(blue_supply_collateral_raw, SUPPLY_COLLATERAL_SIG)\n", + "\n", + "blue_supply_collateral.head(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Withdraw collateral" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Parsing Event name: event WithdrawCollateral\n", + "Indexed types: [('bytes32', 'id'), ('address', 'onBehalf'), ('address', 'receiver')]\n", + "Data types: [('address', 'caller'), ('uint256', 'assets')]\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "shape: (5, 8)
idonBehalfreceiverblock_numbertransaction_indexlog_indexcallerassets
strstrstru32u32u32strf64
"0xd7a576506870…"0x4563364bd619…"0xa7995f71aa11…1894267070189"0xa7995f71aa11…1.0000e16
"0x4a8221eef163…"0x2b5469940fa5…"0x2b5469940fa5…1896547431111"0xa7995f71aa11…9.9997e15
"0xd7a576506870…"0x6e632701fd42…"0xa7995f71aa11…18975191117190"0xa7995f71aa11…1.0000e14
"0x4a8221eef163…"0x9cbf099ff424…"0x9cbf099ff424…18977263122221"0xa7995f71aa11…1.0000e19
"0x695d96d685fa…"0x1f381f47b9c7…"0x1f381f47b9c7…18982531160278"0x1f381f47b9c7…2.0000e17
" + ], + "text/plain": [ + "shape: (5, 8)\n", + "┌────────────┬────────────┬────────────┬───────────┬───────────┬───────────┬───────────┬───────────┐\n", + "│ id ┆ onBehalf ┆ receiver ┆ block_num ┆ transacti ┆ log_index ┆ caller ┆ assets │\n", + "│ --- ┆ --- ┆ --- ┆ ber ┆ on_index ┆ --- ┆ --- ┆ --- │\n", + "│ str ┆ str ┆ str ┆ --- ┆ --- ┆ u32 ┆ str ┆ f64 │\n", + "│ ┆ ┆ ┆ u32 ┆ u32 ┆ ┆ ┆ │\n", + "╞════════════╪════════════╪════════════╪═══════════╪═══════════╪═══════════╪═══════════╪═══════════╡\n", + "│ 0xd7a57650 ┆ 0x4563364b ┆ 0xa7995f71 ┆ 18942670 ┆ 70 ┆ 189 ┆ 0xa7995f7 ┆ 1.0000e16 │\n", + "│ 6870346a78 ┆ d61976ba6f ┆ aa11525db0 ┆ ┆ ┆ ┆ 1aa11525d ┆ │\n", + "│ a11a6762e2 ┆ 1297c253be ┆ 2fc2473c37 ┆ ┆ ┆ ┆ b02fc2473 ┆ │\n", + "│ cc… ┆ ae… ┆ de… ┆ ┆ ┆ ┆ c37de… ┆ │\n", + "│ 0x4a8221ee ┆ 0x2b546994 ┆ 0x2b546994 ┆ 18965474 ┆ 31 ┆ 111 ┆ 0xa7995f7 ┆ 9.9997e15 │\n", + "│ f163e4bccf ┆ 0fa577bc40 ┆ 0fa577bc40 ┆ ┆ ┆ ┆ 1aa11525d ┆ │\n", + "│ dedc2a6f46 ┆ 82c6940ee4 ┆ 82c6940ee4 ┆ ┆ ┆ ┆ b02fc2473 ┆ │\n", + "│ 96… ┆ d8… ┆ d8… ┆ ┆ ┆ ┆ c37de… ┆ │\n", + "│ 0xd7a57650 ┆ 0x6e632701 ┆ 0xa7995f71 ┆ 18975191 ┆ 117 ┆ 190 ┆ 0xa7995f7 ┆ 1.0000e14 │\n", + "│ 6870346a78 ┆ fd42a9b856 ┆ aa11525db0 ┆ ┆ ┆ ┆ 1aa11525d ┆ │\n", + "│ a11a6762e2 ┆ 294a2172dd ┆ 2fc2473c37 ┆ ┆ ┆ ┆ b02fc2473 ┆ │\n", + "│ cc… ┆ 63… ┆ de… ┆ ┆ ┆ ┆ c37de… ┆ │\n", + "│ 0x4a8221ee ┆ 0x9cbf099f ┆ 0x9cbf099f ┆ 18977263 ┆ 122 ┆ 221 ┆ 0xa7995f7 ┆ 1.0000e19 │\n", + "│ f163e4bccf ┆ f424979439 ┆ f424979439 ┆ ┆ ┆ ┆ 1aa11525d ┆ │\n", + "│ dedc2a6f46 ┆ dfba03f00b ┆ dfba03f00b ┆ ┆ ┆ ┆ b02fc2473 ┆ │\n", + "│ 96… ┆ 59… ┆ 59… ┆ ┆ ┆ ┆ c37de… ┆ │\n", + "│ 0x695d96d6 ┆ 0x1f381f47 ┆ 0x1f381f47 ┆ 18982531 ┆ 160 ┆ 278 ┆ 0x1f381f4 ┆ 2.0000e17 │\n", + "│ 85fa117c49 ┆ b9c7c5216f ┆ b9c7c5216f ┆ ┆ ┆ ┆ 7b9c7c521 ┆ │\n", + "│ 85b91a7588 ┆ 346bc22501 ┆ 346bc22501 ┆ ┆ ┆ ┆ 6f346bc22 ┆ │\n", + "│ 5c… ┆ a4… ┆ a4… ┆ ┆ ┆ ┆ 501a4… ┆ │\n", + "└────────────┴────────────┴────────────┴───────────┴───────────┴───────────┴───────────┴───────────┘" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "params = {\n", + " \"datatype\": \"events\",\n", + " \"blocks\": [\"18.9M:\"],\n", + " \"inner_request_size\": 10000,\n", + " \"contract\": [BLUE_CONTRACT_ADDRESS],\n", + " \"topic0\": [WITHDRAW_COLLATERAL_TOPIC]\n", + "}\n", + "\n", + "blue_withdraw_collateral_raw = cryo.collect(\n", + " **params\n", + ")\n", + "\n", + "blue_withdraw_collateral = parse_raw_events(blue_withdraw_collateral_raw, WITHDRAW_COLLATERAL_SIG)\n", + "\n", + "blue_withdraw_collateral.head(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Borrow" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Parsing Event name: event Borrow\n", + "Indexed types: [('bytes32', 'id'), ('address', 'onBehalf'), ('address', 'receiver')]\n", + "Data types: [('address', 'caller'), ('uint256', 'assets'), ('uint256', 'shares')]\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "shape: (5, 9)
idonBehalfreceiverblock_numbertransaction_indexlog_indexcallerassetsshares
strstrstru32u32u32strf64f64
"0x4a8221eef163…"0x9106cbf2c882…"0x9106cbf2c882…18926262121190"0x9106cbf2c882…1e71.0000e13
"0xd7a576506870…"0x4563364bd619…"0xa7995f71aa11…18942176109212"0xa7995f71aa11…1.0000e161.0000e22
"0x4a8221eef163…"0x4563364bd619…"0x4563364bd619…18942176109216"0xa7995f71aa11…8.8021751e78.8016e13
"0xd7a576506870…"0x6e632701fd42…"0x6e632701fd42…18943134132349"0xa7995f71aa11…1.0774e141.0774e20
"0x4a8221eef163…"0x2b5469940fa5…"0x2b5469940fa5…1894321493257"0xa7995f71aa11…3.826194e63.8259e12
" + ], + "text/plain": [ + "shape: (5, 9)\n", + "┌───────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬──────────┐\n", + "│ id ┆ onBehalf ┆ receiver ┆ block_num ┆ … ┆ log_index ┆ caller ┆ assets ┆ shares │\n", + "│ --- ┆ --- ┆ --- ┆ ber ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", + "│ str ┆ str ┆ str ┆ --- ┆ ┆ u32 ┆ str ┆ f64 ┆ f64 │\n", + "│ ┆ ┆ ┆ u32 ┆ ┆ ┆ ┆ ┆ │\n", + "╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪══════════╡\n", + "│ 0x4a8221e ┆ 0x9106cbf ┆ 0x9106cbf ┆ 18926262 ┆ … ┆ 190 ┆ 0x9106cbf ┆ 1e7 ┆ 1.0000e1 │\n", + "│ ef163e4bc ┆ 2c882340b ┆ 2c882340b ┆ ┆ ┆ ┆ 2c882340b ┆ ┆ 3 │\n", + "│ cfdedc2a6 ┆ 23cc40985 ┆ 23cc40985 ┆ ┆ ┆ ┆ 23cc40985 ┆ ┆ │\n", + "│ f4696… ┆ c0564… ┆ c0564… ┆ ┆ ┆ ┆ c0564… ┆ ┆ │\n", + "│ 0xd7a5765 ┆ 0x4563364 ┆ 0xa7995f7 ┆ 18942176 ┆ … ┆ 212 ┆ 0xa7995f7 ┆ 1.0000e16 ┆ 1.0000e2 │\n", + "│ 06870346a ┆ bd61976ba ┆ 1aa11525d ┆ ┆ ┆ ┆ 1aa11525d ┆ ┆ 2 │\n", + "│ 78a11a676 ┆ 6f1297c25 ┆ b02fc2473 ┆ ┆ ┆ ┆ b02fc2473 ┆ ┆ │\n", + "│ 2e2cc… ┆ 3beae… ┆ c37de… ┆ ┆ ┆ ┆ c37de… ┆ ┆ │\n", + "│ 0x4a8221e ┆ 0x4563364 ┆ 0x4563364 ┆ 18942176 ┆ … ┆ 216 ┆ 0xa7995f7 ┆ 8.8021751 ┆ 8.8016e1 │\n", + "│ ef163e4bc ┆ bd61976ba ┆ bd61976ba ┆ ┆ ┆ ┆ 1aa11525d ┆ e7 ┆ 3 │\n", + "│ cfdedc2a6 ┆ 6f1297c25 ┆ 6f1297c25 ┆ ┆ ┆ ┆ b02fc2473 ┆ ┆ │\n", + "│ f4696… ┆ 3beae… ┆ 3beae… ┆ ┆ ┆ ┆ c37de… ┆ ┆ │\n", + "│ 0xd7a5765 ┆ 0x6e63270 ┆ 0x6e63270 ┆ 18943134 ┆ … ┆ 349 ┆ 0xa7995f7 ┆ 1.0774e14 ┆ 1.0774e2 │\n", + "│ 06870346a ┆ 1fd42a9b8 ┆ 1fd42a9b8 ┆ ┆ ┆ ┆ 1aa11525d ┆ ┆ 0 │\n", + "│ 78a11a676 ┆ 56294a217 ┆ 56294a217 ┆ ┆ ┆ ┆ b02fc2473 ┆ ┆ │\n", + "│ 2e2cc… ┆ 2dd63… ┆ 2dd63… ┆ ┆ ┆ ┆ c37de… ┆ ┆ │\n", + "│ 0x4a8221e ┆ 0x2b54699 ┆ 0x2b54699 ┆ 18943214 ┆ … ┆ 257 ┆ 0xa7995f7 ┆ 3.826194e ┆ 3.8259e1 │\n", + "│ ef163e4bc ┆ 40fa577bc ┆ 40fa577bc ┆ ┆ ┆ ┆ 1aa11525d ┆ 6 ┆ 2 │\n", + "│ cfdedc2a6 ┆ 4082c6940 ┆ 4082c6940 ┆ ┆ ┆ ┆ b02fc2473 ┆ ┆ │\n", + "│ f4696… ┆ ee4d8… ┆ ee4d8… ┆ ┆ ┆ ┆ c37de… ┆ ┆ │\n", + "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "params = {\n", + " \"datatype\": \"events\",\n", + " \"blocks\": [\"18.9M:\"],\n", + " \"inner_request_size\": 10000,\n", + " \"contract\": [BLUE_CONTRACT_ADDRESS],\n", + " \"topic0\": [BORROW_TOPIC]\n", + "}\n", + "\n", + "blue_borrow_raw = cryo.collect(\n", + " **params\n", + ")\n", + "\n", + "blue_borrow = parse_raw_events(blue_borrow_raw, BORROW_SIG)\n", + "\n", + "blue_borrow.head(5)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Repay" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Parsing Event name: event Repay\n", + "Indexed types: [('bytes32', 'id'), ('address', 'caller'), ('address', 'onBehalf')]\n", + "Data types: [('uint256', 'assets'), ('uint256', 'shares')]\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "shape: (5, 8)
idcalleronBehalfblock_numbertransaction_indexlog_indexassetsshares
strstrstru32u32u32f64f64
"0x4a8221eef163…"0xa7995f71aa11…"0x4563364bd619…18942670701854e73.9997e13
"0x4a8221eef163…"0xa7995f71aa11…"0x2b5469940fa5…1894997481160100000.09.9991e10
"0x4a8221eef163…"0xa7995f71aa11…"0x2b5469940fa5…18965474311093.726e63.7254e12
"0xd7a576506870…"0xa7995f71aa11…"0x6e632701fd42…189751911171791.0775e141.0774e20
"0x4a8221eef163…"0x9106cbf2c882…"0x9106cbf2c882…1898255954779.5115e99.5088e15
" + ], + "text/plain": [ + "shape: (5, 8)\n", + "┌────────────┬────────────┬────────────┬───────────┬───────────┬───────────┬───────────┬───────────┐\n", + "│ id ┆ caller ┆ onBehalf ┆ block_num ┆ transacti ┆ log_index ┆ assets ┆ shares │\n", + "│ --- ┆ --- ┆ --- ┆ ber ┆ on_index ┆ --- ┆ --- ┆ --- │\n", + "│ str ┆ str ┆ str ┆ --- ┆ --- ┆ u32 ┆ f64 ┆ f64 │\n", + "│ ┆ ┆ ┆ u32 ┆ u32 ┆ ┆ ┆ │\n", + "╞════════════╪════════════╪════════════╪═══════════╪═══════════╪═══════════╪═══════════╪═══════════╡\n", + "│ 0x4a8221ee ┆ 0xa7995f71 ┆ 0x4563364b ┆ 18942670 ┆ 70 ┆ 185 ┆ 4e7 ┆ 3.9997e13 │\n", + "│ f163e4bccf ┆ aa11525db0 ┆ d61976ba6f ┆ ┆ ┆ ┆ ┆ │\n", + "│ dedc2a6f46 ┆ 2fc2473c37 ┆ 1297c253be ┆ ┆ ┆ ┆ ┆ │\n", + "│ 96… ┆ de… ┆ ae… ┆ ┆ ┆ ┆ ┆ │\n", + "│ 0x4a8221ee ┆ 0xa7995f71 ┆ 0x2b546994 ┆ 18949974 ┆ 81 ┆ 160 ┆ 100000.0 ┆ 9.9991e10 │\n", + "│ f163e4bccf ┆ aa11525db0 ┆ 0fa577bc40 ┆ ┆ ┆ ┆ ┆ │\n", + "│ dedc2a6f46 ┆ 2fc2473c37 ┆ 82c6940ee4 ┆ ┆ ┆ ┆ ┆ │\n", + "│ 96… ┆ de… ┆ d8… ┆ ┆ ┆ ┆ ┆ │\n", + "│ 0x4a8221ee ┆ 0xa7995f71 ┆ 0x2b546994 ┆ 18965474 ┆ 31 ┆ 109 ┆ 3.726e6 ┆ 3.7254e12 │\n", + "│ f163e4bccf ┆ aa11525db0 ┆ 0fa577bc40 ┆ ┆ ┆ ┆ ┆ │\n", + "│ dedc2a6f46 ┆ 2fc2473c37 ┆ 82c6940ee4 ┆ ┆ ┆ ┆ ┆ │\n", + "│ 96… ┆ de… ┆ d8… ┆ ┆ ┆ ┆ ┆ │\n", + "│ 0xd7a57650 ┆ 0xa7995f71 ┆ 0x6e632701 ┆ 18975191 ┆ 117 ┆ 179 ┆ 1.0775e14 ┆ 1.0774e20 │\n", + "│ 6870346a78 ┆ aa11525db0 ┆ fd42a9b856 ┆ ┆ ┆ ┆ ┆ │\n", + "│ a11a6762e2 ┆ 2fc2473c37 ┆ 294a2172dd ┆ ┆ ┆ ┆ ┆ │\n", + "│ cc… ┆ de… ┆ 63… ┆ ┆ ┆ ┆ ┆ │\n", + "│ 0x4a8221ee ┆ 0x9106cbf2 ┆ 0x9106cbf2 ┆ 18982559 ┆ 54 ┆ 77 ┆ 9.5115e9 ┆ 9.5088e15 │\n", + "│ f163e4bccf ┆ c882340b23 ┆ c882340b23 ┆ ┆ ┆ ┆ ┆ │\n", + "│ dedc2a6f46 ┆ cc40985c05 ┆ cc40985c05 ┆ ┆ ┆ ┆ ┆ │\n", + "│ 96… ┆ 64… ┆ 64… ┆ ┆ ┆ ┆ ┆ │\n", + "└────────────┴────────────┴────────────┴───────────┴───────────┴───────────┴───────────┴───────────┘" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "params = {\n", + " \"datatype\": \"events\",\n", + " \"blocks\": [\"18.9M:\"],\n", + " \"inner_request_size\": 10000,\n", + " \"contract\": [BLUE_CONTRACT_ADDRESS],\n", + " \"topic0\": [REPAY_TOPIC]\n", + "}\n", + "\n", + "blue_repay_raw = cryo.collect(\n", + " **params\n", + ")\n", + "\n", + "blue_repay = parse_raw_events(blue_repay_raw, REPAY_SIG)\n", + "\n", + "blue_repay.head(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Liquidate " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Parsing Event name: event Liquidate\n", + "Indexed types: [('bytes32', 'id'), ('address', 'caller'), ('address', 'borrower')]\n", + "Data types: [('uint256', 'repaidAssets'), ('uint256', 'repaidShares'), ('uint256', 'seizedAssets'), ('uint256', 'badDebtAssets'), ('uint256', 'badDebtShares')]\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "shape: (5, 11)
idcallerborrowerblock_numbertransaction_indexlog_indexrepaidAssetsrepaidSharesseizedAssetsbadDebtAssetsbadDebtShares
strstrstru32u32u32f64f64f64f64f64
"0x4a8221eef163…"0x5343d15decb9…"0x4563364bd619…18976844127341.06555546e81.0653e144.0643e160.00.0
"0xf6ec69ce473d…"0x5343d15decb9…"0xa4459ccbd068…191303605615510425.01.0369e1026.00.00.0
"0xcaafcf8cd4b9…"0xd85e92f58a1f…"0x255c7705e8bb…1920676738411.02435505e81.0000e141.0692e200.00.0
"0xe4b154e16c97…"0x5343d15decb9…"0x04c0fd5032c1…1921600139428.3371085e78.3355e13174417.00.00.0
"0x86b2f3f9d78e…"0x8ce45e650ab1…"0x17fd03969575…192508042191.6490e184.2956e231.6708e180.00.0
" + ], + "text/plain": [ + "shape: (5, 11)\n", + "┌───────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬──────────┐\n", + "│ id ┆ caller ┆ borrower ┆ block_num ┆ … ┆ repaidSha ┆ seizedAss ┆ badDebtAs ┆ badDebtS │\n", + "│ --- ┆ --- ┆ --- ┆ ber ┆ ┆ res ┆ ets ┆ sets ┆ hares │\n", + "│ str ┆ str ┆ str ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │\n", + "│ ┆ ┆ ┆ u32 ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │\n", + "╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪══════════╡\n", + "│ 0x4a8221e ┆ 0x5343d15 ┆ 0x4563364 ┆ 18976844 ┆ … ┆ 1.0653e14 ┆ 4.0643e16 ┆ 0.0 ┆ 0.0 │\n", + "│ ef163e4bc ┆ decb93095 ┆ bd61976ba ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ cfdedc2a6 ┆ bab7e6194 ┆ 6f1297c25 ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ f4696… ┆ 4bea0… ┆ 3beae… ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ 0xf6ec69c ┆ 0x5343d15 ┆ 0xa4459cc ┆ 19130360 ┆ … ┆ 1.0369e10 ┆ 26.0 ┆ 0.0 ┆ 0.0 │\n", + "│ e473daef9 ┆ decb93095 ┆ bd068f1f1 ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ 9e28a64ab ┆ bab7e6194 ┆ b00315110 ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ 2340d… ┆ 4bea0… ┆ b012a… ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ 0xcaafcf8 ┆ 0xd85e92f ┆ 0x255c770 ┆ 19206767 ┆ … ┆ 1.0000e14 ┆ 1.0692e20 ┆ 0.0 ┆ 0.0 │\n", + "│ cd4b91287 ┆ 58a1ff5fe ┆ 5e8bb334d ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ e139a3ec4 ┆ b5071306f ┆ fcae43819 ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ 23f09… ┆ be99b… ┆ 7f7c4… ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ 0xe4b154e ┆ 0x5343d15 ┆ 0x04c0fd5 ┆ 19216001 ┆ … ┆ 8.3355e13 ┆ 174417.0 ┆ 0.0 ┆ 0.0 │\n", + "│ 16c9799d3 ┆ decb93095 ┆ 032c1a6c1 ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ 387076c42 ┆ bab7e6194 ┆ b7d638eac ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ 1423e… ┆ 4bea0… ┆ 2533e… ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ 0x86b2f3f ┆ 0x8ce45e6 ┆ 0x17fd039 ┆ 19250804 ┆ … ┆ 4.2956e23 ┆ 1.6708e18 ┆ 0.0 ┆ 0.0 │\n", + "│ 9d78eb487 ┆ 50ab17b6c ┆ 69575d462 ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ b4ce4d755 ┆ a0dd6071f ┆ 38cdd3a03 ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ 33cd0… ┆ 7c2b5… ┆ 9a779… ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "params = {\n", + " \"datatype\": \"events\",\n", + " \"blocks\": [\"18.9M:\"],\n", + " \"inner_request_size\": 10000,\n", + " \"contract\": [BLUE_CONTRACT_ADDRESS],\n", + " \"topic0\": [LIQUIDATION_TOPIC]\n", + "}\n", + "\n", + "blue_liquidation_raw = cryo.collect(\n", + " **params\n", + ")\n", + "\n", + "blue_liquidation = parse_raw_events(blue_liquidation_raw, LIQUIDATION_SIG)\n", + "\n", + "blue_liquidation.head(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Interest" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Parsing Event name: event AccrueInterest\n", + "Indexed types: [('bytes32', 'id')]\n", + "Data types: [('uint256', 'prevBorrowRate'), ('uint256', 'interest'), ('uint256', 'feeShares')]\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "shape: (5, 7)
idblock_numbertransaction_indexlog_indexprevBorrowRateinterestfeeShares
stru32u32u32f64f64f64
"0xb323495f7e41…189261661042073.16327097e80.00.0
"0xb323495f7e41…189262621211893.15263237e80.00.0
"0xb323495f7e41…18940531932583.73405563e8646.00.0
"0xc54d7acf14de…18941243381042.60458612e80.00.0
"0xc54d7acf14de…18941407661032.08321558e80.00.0
" + ], + "text/plain": [ + "shape: (5, 7)\n", + "┌────────────────┬──────────────┬───────────────┬───────────┬───────────────┬──────────┬───────────┐\n", + "│ id ┆ block_number ┆ transaction_i ┆ log_index ┆ prevBorrowRat ┆ interest ┆ feeShares │\n", + "│ --- ┆ --- ┆ ndex ┆ --- ┆ e ┆ --- ┆ --- │\n", + "│ str ┆ u32 ┆ --- ┆ u32 ┆ --- ┆ f64 ┆ f64 │\n", + "│ ┆ ┆ u32 ┆ ┆ f64 ┆ ┆ │\n", + "╞════════════════╪══════════════╪═══════════════╪═══════════╪═══════════════╪══════════╪═══════════╡\n", + "│ 0xb323495f7e41 ┆ 18926166 ┆ 104 ┆ 207 ┆ 3.16327097e8 ┆ 0.0 ┆ 0.0 │\n", + "│ 48be5643a4ea4a ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ 8221… ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ 0xb323495f7e41 ┆ 18926262 ┆ 121 ┆ 189 ┆ 3.15263237e8 ┆ 0.0 ┆ 0.0 │\n", + "│ 48be5643a4ea4a ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ 8221… ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ 0xb323495f7e41 ┆ 18940531 ┆ 93 ┆ 258 ┆ 3.73405563e8 ┆ 646.0 ┆ 0.0 │\n", + "│ 48be5643a4ea4a ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ 8221… ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ 0xc54d7acf14de ┆ 18941243 ┆ 38 ┆ 104 ┆ 2.60458612e8 ┆ 0.0 ┆ 0.0 │\n", + "│ 29e0e5527cabd7 ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ a576… ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ 0xc54d7acf14de ┆ 18941407 ┆ 66 ┆ 103 ┆ 2.08321558e8 ┆ 0.0 ┆ 0.0 │\n", + "│ 29e0e5527cabd7 ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ a576… ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "└────────────────┴──────────────┴───────────────┴───────────┴───────────────┴──────────┴───────────┘" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "params = {\n", + " \"datatype\": \"events\",\n", + " \"blocks\": [\"18.9M:\"],\n", + " \"inner_request_size\": 10000,\n", + " \"contract\": [BLUE_CONTRACT_ADDRESS],\n", + " \"topic0\": [INTEREST_TOPIC]\n", + "}\n", + "\n", + "blue_interest_raw = cryo.collect(\n", + " **params\n", + ")\n", + "\n", + "blue_interest = parse_raw_events(blue_interest_raw, INTEREST_SIG)\n", + "\n", + "blue_interest.head(5)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.8.18" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 228a56a8d4a2e3be714cb376732dd3871e7069e7 Mon Sep 17 00:00:00 2001 From: peyha Date: Wed, 17 Apr 2024 17:46:23 +0200 Subject: [PATCH 2/9] doc(example): improve comment --- examples/morpho_blue.ipynb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/examples/morpho_blue.ipynb b/examples/morpho_blue.ipynb index bacc8fca..09237b8f 100644 --- a/examples/morpho_blue.ipynb +++ b/examples/morpho_blue.ipynb @@ -207,6 +207,7 @@ ], "source": [ "\n", + "# Collect the raw events with specific cryo params\n", "params = {\n", " \"datatype\": \"events\",\n", " \"blocks\": [\"18.9M:\"],\n", @@ -214,6 +215,8 @@ " \"contract\": [BLUE_CONTRACT_ADDRESS],\n", " \"topic0\": [CREATION_MARKET_TOPIC],\n", "}\n", + "\n", + "# Collect the raw events with cryo\n", "blue_market_creations_raw = cryo.collect(\n", " **params\n", ")\n", @@ -284,6 +287,8 @@ } ], "source": [ + "# Parse the raw events to a DataFrame with a specific event signature\n", + "\n", "blue_market_creations = parse_raw_events(blue_market_creations_raw, \n", "\"event CreateMarket(bytes32 indexed id, address loanToken, address collateralToken, address oracle, address irm, uint256 lltv)\")\n", "\n", From a617d366bc5cd7cead122e343b883891c640b80c Mon Sep 17 00:00:00 2001 From: peyha Date: Thu, 18 Apr 2024 16:56:44 +0200 Subject: [PATCH 3/9] doc: explain replain --- examples/morpho_blue.ipynb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/examples/morpho_blue.ipynb b/examples/morpho_blue.ipynb index 09237b8f..d7306316 100644 --- a/examples/morpho_blue.ipynb +++ b/examples/morpho_blue.ipynb @@ -34,6 +34,12 @@ "WITHDRAW_TOPIC = \"0xa56fc0ad5702ec05ce63666221f796fb62437c32db1aa1aa075fc6484cf58fbf\"\n", "LIQUIDATION_TOPIC = \"0xa4946ede45d0c6f06a0f5ce92c9ad3b4751452d2fe0e25010783bcab57a67e41\"\n", "\n", + "# Id is an alias for bytes32\n", + "# MarketParams is a struct with the following fields:\n", + "# - address loanToken\n", + "# - address collateralToken\n", + "# - address oracle\n", + "# - address irm\n", "CREATION_MARKET_SIG = \"event CreateMarket(Id indexed id, MarketParams marketParams)\".replace('Id', \"bytes32\")\\\n", " .replace('MarketParams marketParams', 'address loanToken, address collateralToken, address oracle, address irm, uint256 lltv)')\n", "SUPPLY_SIG = \"event Supply(Id indexed id, address indexed caller, address indexed onBehalf, uint256 assets, uint256 shares)\".replace('Id', \"bytes32\")\n", From 4772998e3020245f152a3b53a500c68149bea165 Mon Sep 17 00:00:00 2001 From: peyha Date: Thu, 18 Apr 2024 17:01:05 +0200 Subject: [PATCH 4/9] refactor(example): delete attribute and improve naming --- examples/morpho_blue.ipynb | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/examples/morpho_blue.ipynb b/examples/morpho_blue.ipynb index d7306316..06935946 100644 --- a/examples/morpho_blue.ipynb +++ b/examples/morpho_blue.ipynb @@ -69,31 +69,30 @@ "source": [ "\n", "\n", - "def convert_to_type(x, type, name=\"\", data_offset = 0):\n", + "def convert_to_type(data, type, data_offset = 0):\n", " ''' Convert raw data to a specific type\n", - " x: the raw data (bytes)\n", + " data: the raw data (bytes)\n", " type: the type of the data\n", - " name: the name of the data\n", " data_offset: the offset of the data in the raw data'''\n", " \n", " if type == 'string':\n", - " offset = int(x[data_offset+12: data_offset + 32].hex(), 16)\n", - " length = int(x[offset:offset + 32].hex(), 16)\n", - " return x[offset + 32: offset + 32 + length].decode('utf-8')\n", + " offset = int(data[data_offset+12: data_offset + 32].hex(), 16)\n", + " length = int(data[offset:offset + 32].hex(), 16)\n", + " return data[offset + 32: offset + 32 + length].decode('utf-8')\n", " elif '[]' in type:\n", " # TODO\n", " return '0x'\n", " elif len(type) > 4 and type[:4] == 'uint':\n", - " return float(int(x[data_offset+22: data_offset+32].hex(), 16))\n", + " return float(int(data[data_offset+22: data_offset+32].hex(), 16))\n", " elif type == 'address':\n", - " return '0x' + x[12+data_offset:32+data_offset].hex()\n", + " return '0x' + data[12+data_offset:32+data_offset].hex()\n", " elif type == 'bool':\n", - " return int(x[data_offset: 32 + data_offset], 16) > 0\n", + " return int(data[data_offset: 32 + data_offset], 16) > 0\n", " elif len(type) > 5 and type[:5] == 'bytes':\n", " bytes_left = 32 - int(type[5:])\n", - " return '0x' + x[data_offset+bytes_left: data_offset+32].hex()\n", + " return '0x' + data[data_offset+bytes_left: data_offset+32].hex()\n", " else:\n", - " return x\n", + " return data\n", " \n", "def parse_raw_events(raw_events: pl.DataFrame, signature: str) -> pl.DataFrame:\n", " '''\n", From d3061c16ffcb8122db8e73fe4fde76ad0a36bde5 Mon Sep 17 00:00:00 2001 From: peyha Date: Thu, 18 Apr 2024 17:05:07 +0200 Subject: [PATCH 5/9] feat(example): raise error for unhandled types --- examples/morpho_blue.ipynb | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/examples/morpho_blue.ipynb b/examples/morpho_blue.ipynb index 06935946..29bdf15d 100644 --- a/examples/morpho_blue.ipynb +++ b/examples/morpho_blue.ipynb @@ -63,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -81,7 +81,7 @@ " return data[offset + 32: offset + 32 + length].decode('utf-8')\n", " elif '[]' in type:\n", " # TODO\n", - " return '0x'\n", + " raise ValueError(\"Array not implemented yet\")\n", " elif len(type) > 4 and type[:4] == 'uint':\n", " return float(int(data[data_offset+22: data_offset+32].hex(), 16))\n", " elif type == 'address':\n", @@ -92,7 +92,7 @@ " bytes_left = 32 - int(type[5:])\n", " return '0x' + data[data_offset+bytes_left: data_offset+32].hex()\n", " else:\n", - " return data\n", + " raise ValueError(\"Type not handled yet\")\n", " \n", "def parse_raw_events(raw_events: pl.DataFrame, signature: str) -> pl.DataFrame:\n", " '''\n", @@ -125,12 +125,12 @@ " dfs = []\n", " for index, (type, name) in enumerate(data_types):\n", " data_events_cur_df = raw_events.select([\n", - " pl.col(\"data\").map_elements(lambda x: convert_to_type(x, type, name, 32*index)).alias(name)\n", + " pl.col(\"data\").map_elements(lambda x: convert_to_type(x, type, 32*index)).alias(name)\n", " ] + [pl.col(\"block_number\"), pl.col(\"transaction_index\", \"log_index\")])\n", " dfs.append(data_events_cur_df)\n", "\n", " data_events_df = raw_events.select([\n", - " pl.col(\"data\").map_elements(lambda x: convert_to_type(x, type, name, 32*index)).alias(name)\n", + " pl.col(\"data\").map_elements(lambda x: convert_to_type(x, type, 32*index)).alias(name)\n", " for index, (type, name) in enumerate(data_types)\n", " ] + [pl.col(\"block_number\"), pl.col(\"transaction_index\", \"log_index\")])\n", " indexed_events_df = raw_events.select([\n", @@ -159,7 +159,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -205,7 +205,7 @@ "└─────────────┴─────────────┴───────────┴────────────┴───┴────────┴────────┴────────────┴──────────┘" ] }, - "execution_count": 4, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -231,7 +231,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -286,7 +286,7 @@ "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘" ] }, - "execution_count": 5, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -316,7 +316,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -403,7 +403,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -490,7 +490,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -573,7 +573,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -661,7 +661,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -749,7 +749,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -837,7 +837,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -924,7 +924,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, "outputs": [ { From dc1d9487f7c5da5c29ef9bc3d5d1fc1f4d65d816 Mon Sep 17 00:00:00 2001 From: peyha Date: Thu, 18 Apr 2024 17:11:12 +0200 Subject: [PATCH 6/9] refactor(example): improve topic0 naming --- examples/morpho_blue.ipynb | 147 ++++++++++++------------------------- 1 file changed, 45 insertions(+), 102 deletions(-) diff --git a/examples/morpho_blue.ipynb b/examples/morpho_blue.ipynb index 29bdf15d..50e4235f 100644 --- a/examples/morpho_blue.ipynb +++ b/examples/morpho_blue.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -20,19 +20,19 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ - "CREATION_MARKET_TOPIC = \"0xac4b2400f169220b0c0afdde7a0b32e775ba727ea1cb30b35f935cdaab8683ac\"\n", - "INTEREST_TOPIC = \"0x9d9bd501d0657d7dfe415f779a620a62b78bc508ddc0891fbbd8b7ac0f8fce87\"\n", - "BORROW_TOPIC = \"0x570954540bed6b1304a87dfe815a5eda4a648f7097a16240dcd85c9b5fd42a43\"\n", - "REPAY_TOPIC = \"0x52acb05cebbd3cd39715469f22afbf5a17496295ef3bc9bb5944056c63ccaa09\"\n", - "SUPPLY_COLLATERAL_TOPIC = \"0xa3b9472a1399e17e123f3c2e6586c23e504184d504de59cdaa2b375e880c6184\"\n", - "WITHDRAW_COLLATERAL_TOPIC = \"0xe80ebd7cc9223d7382aab2e0d1d6155c65651f83d53c8b9b06901d167e321142\"\n", - "SUPPLY_TOPIC = \"0xedf8870433c83823eb071d3df1caa8d008f12f6440918c20d75a3602cda30fe0\"\n", - "WITHDRAW_TOPIC = \"0xa56fc0ad5702ec05ce63666221f796fb62437c32db1aa1aa075fc6484cf58fbf\"\n", - "LIQUIDATION_TOPIC = \"0xa4946ede45d0c6f06a0f5ce92c9ad3b4751452d2fe0e25010783bcab57a67e41\"\n", + "CREATION_MARKET_SIG_HASH = \"0xac4b2400f169220b0c0afdde7a0b32e775ba727ea1cb30b35f935cdaab8683ac\"\n", + "ACCRUE_INTEREST_SIG_HASH = \"0x9d9bd501d0657d7dfe415f779a620a62b78bc508ddc0891fbbd8b7ac0f8fce87\"\n", + "BORROW_SIG_HASH = \"0x570954540bed6b1304a87dfe815a5eda4a648f7097a16240dcd85c9b5fd42a43\"\n", + "REPAY_SIG_HASH = \"0x52acb05cebbd3cd39715469f22afbf5a17496295ef3bc9bb5944056c63ccaa09\"\n", + "SUPPLY_COLLATERAL_SIG_HASH = \"0xa3b9472a1399e17e123f3c2e6586c23e504184d504de59cdaa2b375e880c6184\"\n", + "WITHDRAW_COLLATERAL_SIG_HASH = \"0xe80ebd7cc9223d7382aab2e0d1d6155c65651f83d53c8b9b06901d167e321142\"\n", + "SUPPLY_SIG_HASH = \"0xedf8870433c83823eb071d3df1caa8d008f12f6440918c20d75a3602cda30fe0\"\n", + "WITHDRAW_SIG_HASH = \"0xa56fc0ad5702ec05ce63666221f796fb62437c32db1aa1aa075fc6484cf58fbf\"\n", + "LIQUIDATE_SIG_HASH = \"0xa4946ede45d0c6f06a0f5ce92c9ad3b4751452d2fe0e25010783bcab57a67e41\"\n", "\n", "# Id is an alias for bytes32\n", "# MarketParams is a struct with the following fields:\n", @@ -48,8 +48,8 @@ "REPAY_SIG = \"event Repay(Id indexed id, address indexed caller, address indexed onBehalf, uint256 assets, uint256 shares)\".replace('Id', \"bytes32\")\n", "SUPPLY_COLLATERAL_SIG = \"event SupplyCollateral(Id indexed id, address indexed caller, address indexed onBehalf, uint256 assets)\".replace('Id', \"bytes32\")\n", "WITHDRAW_COLLATERAL_SIG = \"event WithdrawCollateral(Id indexed id, address caller, address indexed onBehalf, address indexed receiver, uint256 assets)\".replace('Id', \"bytes32\")\n", - "LIQUIDATION_SIG = \"event Liquidate(Id indexed id,address indexed caller,address indexed borrower,uint256 repaidAssets,uint256 repaidShares,uint256 seizedAssets,uint256 badDebtAssets,uint256 badDebtShares);\".replace('Id', \"bytes32\")\n", - "INTEREST_SIG = \"event AccrueInterest(Id indexed id, uint256 prevBorrowRate, uint256 interest, uint256 feeShares);\".replace('Id', \"bytes32\")\n", + "LIQUIDATE_SIG = \"event Liquidate(Id indexed id,address indexed caller,address indexed borrower,uint256 repaidAssets,uint256 repaidShares,uint256 seizedAssets,uint256 badDebtAssets,uint256 badDebtShares);\".replace('Id', \"bytes32\")\n", + "ACCRUE_INTEREST_SIG = \"event AccrueInterest(Id indexed id, uint256 prevBorrowRate, uint256 interest, uint256 feeShares);\".replace('Id', \"bytes32\")\n", "\n", "BLUE_CONTRACT_ADDRESS = \"0xBBBBBbbBBb9cC5e90e3b3Af64bdAF62C37EEFFCb\"\n" ] @@ -63,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -159,7 +159,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 25, "metadata": {}, "outputs": [ { @@ -205,7 +205,7 @@ "└─────────────┴─────────────┴───────────┴────────────┴───┴────────┴────────┴────────────┴──────────┘" ] }, - "execution_count": 7, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -218,7 +218,7 @@ " \"blocks\": [\"18.9M:\"],\n", " \"inner_request_size\": 10000,\n", " \"contract\": [BLUE_CONTRACT_ADDRESS],\n", - " \"topic0\": [CREATION_MARKET_TOPIC],\n", + " \"topic0\": [CREATION_MARKET_SIG_HASH],\n", "}\n", "\n", "# Collect the raw events with cryo\n", @@ -231,7 +231,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 26, "metadata": {}, "outputs": [ { @@ -286,7 +286,7 @@ "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘" ] }, - "execution_count": 8, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -316,7 +316,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": {}, "outputs": [ { @@ -371,7 +371,7 @@ "└────────────┴────────────┴────────────┴───────────┴───────────┴───────────┴───────────┴───────────┘" ] }, - "execution_count": 6, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -383,7 +383,7 @@ " \"blocks\": [\"18.9M:\"],\n", " \"inner_request_size\": 10000,\n", " \"contract\": [BLUE_CONTRACT_ADDRESS],\n", - " \"topic0\": [SUPPLY_TOPIC],\n", + " \"topic0\": [SUPPLY_SIG_HASH],\n", "}\n", "blue_supply_raw = cryo.collect(\n", " **params\n", @@ -403,7 +403,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "metadata": {}, "outputs": [ { @@ -458,7 +458,7 @@ "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘" ] }, - "execution_count": 7, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -469,7 +469,7 @@ " \"blocks\": [\"18.9M:\"],\n", " \"inner_request_size\": 10000,\n", " \"contract\": [BLUE_CONTRACT_ADDRESS],\n", - " \"topic0\": [WITHDRAW_TOPIC],\n", + " \"topic0\": [WITHDRAW_SIG_HASH],\n", "}\n", "\n", "blue_withdraw_raw = cryo.collect(\n", @@ -490,7 +490,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": {}, "outputs": [ { @@ -540,7 +540,7 @@ "└──────────────┴──────────────┴──────────────┴──────────────┴──────────────┴───────────┴───────────┘" ] }, - "execution_count": 8, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -552,7 +552,7 @@ " \"blocks\": [\"18.9M:\"],\n", " \"inner_request_size\": 10000,\n", " \"contract\": [BLUE_CONTRACT_ADDRESS],\n", - " \"topic0\": [SUPPLY_COLLATERAL_TOPIC]\n", + " \"topic0\": [SUPPLY_COLLATERAL_SIG_HASH]\n", "}\n", "\n", "blue_supply_collateral_raw = cryo.collect(\n", @@ -573,7 +573,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": {}, "outputs": [ { @@ -628,7 +628,7 @@ "└────────────┴────────────┴────────────┴───────────┴───────────┴───────────┴───────────┴───────────┘" ] }, - "execution_count": 9, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -640,7 +640,7 @@ " \"blocks\": [\"18.9M:\"],\n", " \"inner_request_size\": 10000,\n", " \"contract\": [BLUE_CONTRACT_ADDRESS],\n", - " \"topic0\": [WITHDRAW_COLLATERAL_TOPIC]\n", + " \"topic0\": [WITHDRAW_COLLATERAL_SIG_HASH]\n", "}\n", "\n", "blue_withdraw_collateral_raw = cryo.collect(\n", @@ -661,7 +661,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, "metadata": {}, "outputs": [ { @@ -716,7 +716,7 @@ "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘" ] }, - "execution_count": 10, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -728,7 +728,7 @@ " \"blocks\": [\"18.9M:\"],\n", " \"inner_request_size\": 10000,\n", " \"contract\": [BLUE_CONTRACT_ADDRESS],\n", - " \"topic0\": [BORROW_TOPIC]\n", + " \"topic0\": [BORROW_SIG_HASH]\n", "}\n", "\n", "blue_borrow_raw = cryo.collect(\n", @@ -749,66 +749,9 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Parsing Event name: event Repay\n", - "Indexed types: [('bytes32', 'id'), ('address', 'caller'), ('address', 'onBehalf')]\n", - "Data types: [('uint256', 'assets'), ('uint256', 'shares')]\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "shape: (5, 8)
idcalleronBehalfblock_numbertransaction_indexlog_indexassetsshares
strstrstru32u32u32f64f64
"0x4a8221eef163…"0xa7995f71aa11…"0x4563364bd619…18942670701854e73.9997e13
"0x4a8221eef163…"0xa7995f71aa11…"0x2b5469940fa5…1894997481160100000.09.9991e10
"0x4a8221eef163…"0xa7995f71aa11…"0x2b5469940fa5…18965474311093.726e63.7254e12
"0xd7a576506870…"0xa7995f71aa11…"0x6e632701fd42…189751911171791.0775e141.0774e20
"0x4a8221eef163…"0x9106cbf2c882…"0x9106cbf2c882…1898255954779.5115e99.5088e15
" - ], - "text/plain": [ - "shape: (5, 8)\n", - "┌────────────┬────────────┬────────────┬───────────┬───────────┬───────────┬───────────┬───────────┐\n", - "│ id ┆ caller ┆ onBehalf ┆ block_num ┆ transacti ┆ log_index ┆ assets ┆ shares │\n", - "│ --- ┆ --- ┆ --- ┆ ber ┆ on_index ┆ --- ┆ --- ┆ --- │\n", - "│ str ┆ str ┆ str ┆ --- ┆ --- ┆ u32 ┆ f64 ┆ f64 │\n", - "│ ┆ ┆ ┆ u32 ┆ u32 ┆ ┆ ┆ │\n", - "╞════════════╪════════════╪════════════╪═══════════╪═══════════╪═══════════╪═══════════╪═══════════╡\n", - "│ 0x4a8221ee ┆ 0xa7995f71 ┆ 0x4563364b ┆ 18942670 ┆ 70 ┆ 185 ┆ 4e7 ┆ 3.9997e13 │\n", - "│ f163e4bccf ┆ aa11525db0 ┆ d61976ba6f ┆ ┆ ┆ ┆ ┆ │\n", - "│ dedc2a6f46 ┆ 2fc2473c37 ┆ 1297c253be ┆ ┆ ┆ ┆ ┆ │\n", - "│ 96… ┆ de… ┆ ae… ┆ ┆ ┆ ┆ ┆ │\n", - "│ 0x4a8221ee ┆ 0xa7995f71 ┆ 0x2b546994 ┆ 18949974 ┆ 81 ┆ 160 ┆ 100000.0 ┆ 9.9991e10 │\n", - "│ f163e4bccf ┆ aa11525db0 ┆ 0fa577bc40 ┆ ┆ ┆ ┆ ┆ │\n", - "│ dedc2a6f46 ┆ 2fc2473c37 ┆ 82c6940ee4 ┆ ┆ ┆ ┆ ┆ │\n", - "│ 96… ┆ de… ┆ d8… ┆ ┆ ┆ ┆ ┆ │\n", - "│ 0x4a8221ee ┆ 0xa7995f71 ┆ 0x2b546994 ┆ 18965474 ┆ 31 ┆ 109 ┆ 3.726e6 ┆ 3.7254e12 │\n", - "│ f163e4bccf ┆ aa11525db0 ┆ 0fa577bc40 ┆ ┆ ┆ ┆ ┆ │\n", - "│ dedc2a6f46 ┆ 2fc2473c37 ┆ 82c6940ee4 ┆ ┆ ┆ ┆ ┆ │\n", - "│ 96… ┆ de… ┆ d8… ┆ ┆ ┆ ┆ ┆ │\n", - "│ 0xd7a57650 ┆ 0xa7995f71 ┆ 0x6e632701 ┆ 18975191 ┆ 117 ┆ 179 ┆ 1.0775e14 ┆ 1.0774e20 │\n", - "│ 6870346a78 ┆ aa11525db0 ┆ fd42a9b856 ┆ ┆ ┆ ┆ ┆ │\n", - "│ a11a6762e2 ┆ 2fc2473c37 ┆ 294a2172dd ┆ ┆ ┆ ┆ ┆ │\n", - "│ cc… ┆ de… ┆ 63… ┆ ┆ ┆ ┆ ┆ │\n", - "│ 0x4a8221ee ┆ 0x9106cbf2 ┆ 0x9106cbf2 ┆ 18982559 ┆ 54 ┆ 77 ┆ 9.5115e9 ┆ 9.5088e15 │\n", - "│ f163e4bccf ┆ c882340b23 ┆ c882340b23 ┆ ┆ ┆ ┆ ┆ │\n", - "│ dedc2a6f46 ┆ cc40985c05 ┆ cc40985c05 ┆ ┆ ┆ ┆ ┆ │\n", - "│ 96… ┆ 64… ┆ 64… ┆ ┆ ┆ ┆ ┆ │\n", - "└────────────┴────────────┴────────────┴───────────┴───────────┴───────────┴───────────┴───────────┘" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "\n", "params = {\n", @@ -816,7 +759,7 @@ " \"blocks\": [\"18.9M:\"],\n", " \"inner_request_size\": 10000,\n", " \"contract\": [BLUE_CONTRACT_ADDRESS],\n", - " \"topic0\": [REPAY_TOPIC]\n", + " \"topic0\": [REPAY_SIG_HASH]\n", "}\n", "\n", "blue_repay_raw = cryo.collect(\n", @@ -837,7 +780,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": {}, "outputs": [ { @@ -892,7 +835,7 @@ "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘" ] }, - "execution_count": 12, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -903,14 +846,14 @@ " \"blocks\": [\"18.9M:\"],\n", " \"inner_request_size\": 10000,\n", " \"contract\": [BLUE_CONTRACT_ADDRESS],\n", - " \"topic0\": [LIQUIDATION_TOPIC]\n", + " \"topic0\": [LIQUIDATE_SIG_HASH]\n", "}\n", "\n", "blue_liquidation_raw = cryo.collect(\n", " **params\n", ")\n", "\n", - "blue_liquidation = parse_raw_events(blue_liquidation_raw, LIQUIDATION_SIG)\n", + "blue_liquidation = parse_raw_events(blue_liquidation_raw, LIQUIDATE_SIG)\n", "\n", "blue_liquidation.head(5)" ] @@ -924,7 +867,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "metadata": {}, "outputs": [ { @@ -974,7 +917,7 @@ "└────────────────┴──────────────┴───────────────┴───────────┴───────────────┴──────────┴───────────┘" ] }, - "execution_count": 13, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -986,14 +929,14 @@ " \"blocks\": [\"18.9M:\"],\n", " \"inner_request_size\": 10000,\n", " \"contract\": [BLUE_CONTRACT_ADDRESS],\n", - " \"topic0\": [INTEREST_TOPIC]\n", + " \"topic0\": [ACCRUE_INTEREST_SIG_HASH]\n", "}\n", "\n", "blue_interest_raw = cryo.collect(\n", " **params\n", ")\n", "\n", - "blue_interest = parse_raw_events(blue_interest_raw, INTEREST_SIG)\n", + "blue_interest = parse_raw_events(blue_interest_raw, ACCRUE_INTEREST_SIG)\n", "\n", "blue_interest.head(5)" ] From a9c1ec3db461e53c92a892a36849ba9ddda16e10 Mon Sep 17 00:00:00 2001 From: peyha Date: Fri, 19 Apr 2024 13:14:24 +0200 Subject: [PATCH 7/9] fix(example): missing hex conversion --- examples/morpho_blue.ipynb | 61 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/examples/morpho_blue.ipynb b/examples/morpho_blue.ipynb index 50e4235f..84de3aa5 100644 --- a/examples/morpho_blue.ipynb +++ b/examples/morpho_blue.ipynb @@ -87,7 +87,7 @@ " elif type == 'address':\n", " return '0x' + data[12+data_offset:32+data_offset].hex()\n", " elif type == 'bool':\n", - " return int(data[data_offset: 32 + data_offset], 16) > 0\n", + " return int(data[data_offset: 32 + data_offset].hex(), 16) > 0\n", " elif len(type) > 5 and type[:5] == 'bytes':\n", " bytes_left = 32 - int(type[5:])\n", " return '0x' + data[data_offset+bytes_left: data_offset+32].hex()\n", @@ -751,7 +751,64 @@ "cell_type": "code", "execution_count": 35, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Parsing Event name: event Repay\n", + "Indexed types: [('bytes32', 'id'), ('address', 'caller'), ('address', 'onBehalf')]\n", + "Data types: [('uint256', 'assets'), ('uint256', 'shares')]\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "shape: (5, 8)
idcalleronBehalfblock_numbertransaction_indexlog_indexassetsshares
strstrstru32u32u32f64f64
"0x4a8221eef163…"0xa7995f71aa11…"0x4563364bd619…18942670701854e73.9997e13
"0x4a8221eef163…"0xa7995f71aa11…"0x2b5469940fa5…1894997481160100000.09.9991e10
"0x4a8221eef163…"0xa7995f71aa11…"0x2b5469940fa5…18965474311093.726e63.7254e12
"0xd7a576506870…"0xa7995f71aa11…"0x6e632701fd42…189751911171791.0775e141.0774e20
"0x4a8221eef163…"0x9106cbf2c882…"0x9106cbf2c882…1898255954779.5115e99.5088e15
" + ], + "text/plain": [ + "shape: (5, 8)\n", + "┌────────────┬────────────┬────────────┬───────────┬───────────┬───────────┬───────────┬───────────┐\n", + "│ id ┆ caller ┆ onBehalf ┆ block_num ┆ transacti ┆ log_index ┆ assets ┆ shares │\n", + "│ --- ┆ --- ┆ --- ┆ ber ┆ on_index ┆ --- ┆ --- ┆ --- │\n", + "│ str ┆ str ┆ str ┆ --- ┆ --- ┆ u32 ┆ f64 ┆ f64 │\n", + "│ ┆ ┆ ┆ u32 ┆ u32 ┆ ┆ ┆ │\n", + "╞════════════╪════════════╪════════════╪═══════════╪═══════════╪═══════════╪═══════════╪═══════════╡\n", + "│ 0x4a8221ee ┆ 0xa7995f71 ┆ 0x4563364b ┆ 18942670 ┆ 70 ┆ 185 ┆ 4e7 ┆ 3.9997e13 │\n", + "│ f163e4bccf ┆ aa11525db0 ┆ d61976ba6f ┆ ┆ ┆ ┆ ┆ │\n", + "│ dedc2a6f46 ┆ 2fc2473c37 ┆ 1297c253be ┆ ┆ ┆ ┆ ┆ │\n", + "│ 96… ┆ de… ┆ ae… ┆ ┆ ┆ ┆ ┆ │\n", + "│ 0x4a8221ee ┆ 0xa7995f71 ┆ 0x2b546994 ┆ 18949974 ┆ 81 ┆ 160 ┆ 100000.0 ┆ 9.9991e10 │\n", + "│ f163e4bccf ┆ aa11525db0 ┆ 0fa577bc40 ┆ ┆ ┆ ┆ ┆ │\n", + "│ dedc2a6f46 ┆ 2fc2473c37 ┆ 82c6940ee4 ┆ ┆ ┆ ┆ ┆ │\n", + "│ 96… ┆ de… ┆ d8… ┆ ┆ ┆ ┆ ┆ │\n", + "│ 0x4a8221ee ┆ 0xa7995f71 ┆ 0x2b546994 ┆ 18965474 ┆ 31 ┆ 109 ┆ 3.726e6 ┆ 3.7254e12 │\n", + "│ f163e4bccf ┆ aa11525db0 ┆ 0fa577bc40 ┆ ┆ ┆ ┆ ┆ │\n", + "│ dedc2a6f46 ┆ 2fc2473c37 ┆ 82c6940ee4 ┆ ┆ ┆ ┆ ┆ │\n", + "│ 96… ┆ de… ┆ d8… ┆ ┆ ┆ ┆ ┆ │\n", + "│ 0xd7a57650 ┆ 0xa7995f71 ┆ 0x6e632701 ┆ 18975191 ┆ 117 ┆ 179 ┆ 1.0775e14 ┆ 1.0774e20 │\n", + "│ 6870346a78 ┆ aa11525db0 ┆ fd42a9b856 ┆ ┆ ┆ ┆ ┆ │\n", + "│ a11a6762e2 ┆ 2fc2473c37 ┆ 294a2172dd ┆ ┆ ┆ ┆ ┆ │\n", + "│ cc… ┆ de… ┆ 63… ┆ ┆ ┆ ┆ ┆ │\n", + "│ 0x4a8221ee ┆ 0x9106cbf2 ┆ 0x9106cbf2 ┆ 18982559 ┆ 54 ┆ 77 ┆ 9.5115e9 ┆ 9.5088e15 │\n", + "│ f163e4bccf ┆ c882340b23 ┆ c882340b23 ┆ ┆ ┆ ┆ ┆ │\n", + "│ dedc2a6f46 ┆ cc40985c05 ┆ cc40985c05 ┆ ┆ ┆ ┆ ┆ │\n", + "│ 96… ┆ 64… ┆ 64… ┆ ┆ ┆ ┆ ┆ │\n", + "└────────────┴────────────┴────────────┴───────────┴───────────┴───────────┴───────────┴───────────┘" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "\n", "params = {\n", From 6343a62cc422ee17f298905ab5c709dfb60badd2 Mon Sep 17 00:00:00 2001 From: peyha Date: Fri, 19 Apr 2024 13:39:32 +0200 Subject: [PATCH 8/9] refactor(example): remove unused code --- examples/morpho_blue.ipynb | 107 ++++++++++++------------------------- 1 file changed, 33 insertions(+), 74 deletions(-) diff --git a/examples/morpho_blue.ipynb b/examples/morpho_blue.ipynb index 84de3aa5..9abe6df8 100644 --- a/examples/morpho_blue.ipynb +++ b/examples/morpho_blue.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 22, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -20,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -63,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 53, "metadata": {}, "outputs": [], "source": [ @@ -74,7 +74,7 @@ " data: the raw data (bytes)\n", " type: the type of the data\n", " data_offset: the offset of the data in the raw data'''\n", - " \n", + "\n", " if type == 'string':\n", " offset = int(data[data_offset+12: data_offset + 32].hex(), 16)\n", " length = int(data[offset:offset + 32].hex(), 16)\n", @@ -128,11 +128,6 @@ " pl.col(\"data\").map_elements(lambda x: convert_to_type(x, type, 32*index)).alias(name)\n", " ] + [pl.col(\"block_number\"), pl.col(\"transaction_index\", \"log_index\")])\n", " dfs.append(data_events_cur_df)\n", - "\n", - " data_events_df = raw_events.select([\n", - " pl.col(\"data\").map_elements(lambda x: convert_to_type(x, type, 32*index)).alias(name)\n", - " for index, (type, name) in enumerate(data_types)\n", - " ] + [pl.col(\"block_number\"), pl.col(\"transaction_index\", \"log_index\")])\n", " indexed_events_df = raw_events.select([\n", " pl.col(f\"topic{1+index}\").map_elements(lambda x: convert_to_type(x, type)).alias(name)\n", " for index, (type, name) in enumerate(indexed_types)\n", @@ -141,7 +136,6 @@ " print(f'Indexed types: {indexed_types}')\n", " print(f'Data types: {data_types}')\n", " \n", - "\n", " res_df = indexed_events_df\n", " for df in dfs:\n", " res_df = res_df.join(df, on=[\"block_number\", \"transaction_index\", \"log_index\"], how=\"inner\")\n", @@ -159,7 +153,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 49, "metadata": {}, "outputs": [ { @@ -205,7 +199,7 @@ "└─────────────┴─────────────┴───────────┴────────────┴───┴────────┴────────┴────────────┴──────────┘" ] }, - "execution_count": 25, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } @@ -231,7 +225,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 54, "metadata": {}, "outputs": [ { @@ -244,51 +238,16 @@ ] }, { - "data": { - "text/html": [ - "
\n", - "shape: (5, 9)
idblock_numbertransaction_indexlog_indexloanTokencollateralTokenoracleirmlltv
stru32u32u32strstrstrstrf64
"0xc54d7acf14de…1891962373135"0xc02aaa39b223…"0x7f39c581f595…"0x2a01eb949609…"0x870ac11d48b1…9.4500e17
"0x54efdee08e27…1891985895141"0xa0b86991c621…"0x000000000000…"0x000000000000…"0x000000000000…0.0
"0x58e212060645…1891986080255"0xc02aaa39b223…"0x000000000000…"0x000000000000…"0x000000000000…0.0
"0x08535810fead…18925864126392"0xa0b86991c621…"0xabc56186c2df…"0x6e8f5b2df218…"0x870ac11d48b1…9.6500e17
"0xb323495f7e41…1892591094214"0xa0b86991c621…"0x7f39c581f595…"0x48f7e36eb6b8…"0x870ac11d48b1…8.6000e17
" - ], - "text/plain": [ - "shape: (5, 9)\n", - "┌───────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬──────────┐\n", - "│ id ┆ block_num ┆ transacti ┆ log_index ┆ … ┆ collatera ┆ oracle ┆ irm ┆ lltv │\n", - "│ --- ┆ ber ┆ on_index ┆ --- ┆ ┆ lToken ┆ --- ┆ --- ┆ --- │\n", - "│ str ┆ --- ┆ --- ┆ u32 ┆ ┆ --- ┆ str ┆ str ┆ f64 │\n", - "│ ┆ u32 ┆ u32 ┆ ┆ ┆ str ┆ ┆ ┆ │\n", - "╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪══════════╡\n", - "│ 0xc54d7ac ┆ 18919623 ┆ 73 ┆ 135 ┆ … ┆ 0x7f39c58 ┆ 0x2a01eb9 ┆ 0x870ac11 ┆ 9.4500e1 │\n", - "│ f14de29e0 ┆ ┆ ┆ ┆ ┆ 1f595b53c ┆ 496094da0 ┆ d48b15db9 ┆ 7 │\n", - "│ e5527cabd ┆ ┆ ┆ ┆ ┆ 5cb19bd0b ┆ 3c4e364de ┆ a138cf899 ┆ │\n", - "│ 7a576… ┆ ┆ ┆ ┆ ┆ 3f8da… ┆ f50f5… ┆ d20f1… ┆ │\n", - "│ 0x54efdee ┆ 18919858 ┆ 95 ┆ 141 ┆ … ┆ 0x0000000 ┆ 0x0000000 ┆ 0x0000000 ┆ 0.0 │\n", - "│ 08e272e92 ┆ ┆ ┆ ┆ ┆ 000000000 ┆ 000000000 ┆ 000000000 ┆ │\n", - "│ 9034a8f26 ┆ ┆ ┆ ┆ ┆ 000000000 ┆ 000000000 ┆ 000000000 ┆ │\n", - "│ f7ca3… ┆ ┆ ┆ ┆ ┆ 00000… ┆ 00000… ┆ 00000… ┆ │\n", - "│ 0x58e2120 ┆ 18919860 ┆ 80 ┆ 255 ┆ … ┆ 0x0000000 ┆ 0x0000000 ┆ 0x0000000 ┆ 0.0 │\n", - "│ 60645d18e ┆ ┆ ┆ ┆ ┆ 000000000 ┆ 000000000 ┆ 000000000 ┆ │\n", - "│ ab6d9b2af ┆ ┆ ┆ ┆ ┆ 000000000 ┆ 000000000 ┆ 000000000 ┆ │\n", - "│ 3d56f… ┆ ┆ ┆ ┆ ┆ 00000… ┆ 00000… ┆ 00000… ┆ │\n", - "│ 0x0853581 ┆ 18925864 ┆ 126 ┆ 392 ┆ … ┆ 0xabc5618 ┆ 0x6e8f5b2 ┆ 0x870ac11 ┆ 9.6500e1 │\n", - "│ 0feadf52d ┆ ┆ ┆ ┆ ┆ 6c2df63c3 ┆ df218443e ┆ d48b15db9 ┆ 7 │\n", - "│ 61a182dc7 ┆ ┆ ┆ ┆ ┆ 38e04c9c9 ┆ 87fe8aa98 ┆ a138cf899 ┆ │\n", - "│ a12ba… ┆ ┆ ┆ ┆ ┆ b9814… ┆ 11e69… ┆ d20f1… ┆ │\n", - "│ 0xb323495 ┆ 18925910 ┆ 94 ┆ 214 ┆ … ┆ 0x7f39c58 ┆ 0x48f7e36 ┆ 0x870ac11 ┆ 8.6000e1 │\n", - "│ f7e4148be ┆ ┆ ┆ ┆ ┆ 1f595b53c ┆ eb6b826b2 ┆ d48b15db9 ┆ 7 │\n", - "│ 5643a4ea4 ┆ ┆ ┆ ┆ ┆ 5cb19bd0b ┆ df4b2e630 ┆ a138cf899 ┆ │\n", - "│ a8221… ┆ ┆ ┆ ┆ ┆ 3f8da… ┆ b62cd… ┆ d20f1… ┆ │\n", - "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" + "ename": "NameError", + "evalue": "name 'data_events_df' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[54], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# Parse the raw events to a DataFrame with a specific event signature\u001b[39;00m\n\u001b[0;32m----> 3\u001b[0m blue_market_creations \u001b[38;5;241m=\u001b[39m \u001b[43mparse_raw_events\u001b[49m\u001b[43m(\u001b[49m\u001b[43mblue_market_creations_raw\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mevent CreateMarket(bytes32 indexed id, address loanToken, address collateralToken, address oracle, address irm, uint256 lltv)\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 6\u001b[0m blue_market_creations\u001b[38;5;241m.\u001b[39mhead(\u001b[38;5;241m5\u001b[39m)\n", + "Cell \u001b[0;32mIn[53], line 72\u001b[0m, in \u001b[0;36mparse_raw_events\u001b[0;34m(raw_events, signature)\u001b[0m\n\u001b[1;32m 69\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m df \u001b[38;5;129;01min\u001b[39;00m dfs:\n\u001b[1;32m 70\u001b[0m res_df \u001b[38;5;241m=\u001b[39m res_df\u001b[38;5;241m.\u001b[39mjoin(df, on\u001b[38;5;241m=\u001b[39m[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mblock_number\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtransaction_index\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mlog_index\u001b[39m\u001b[38;5;124m\"\u001b[39m], how\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124minner\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 72\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mdata_events_df\u001b[49m\n", + "\u001b[0;31mNameError\u001b[0m: name 'data_events_df' is not defined" + ] } ], "source": [ @@ -316,7 +275,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -371,7 +330,7 @@ "└────────────┴────────────┴────────────┴───────────┴───────────┴───────────┴───────────┴───────────┘" ] }, - "execution_count": 27, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -403,7 +362,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -458,7 +417,7 @@ "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘" ] }, - "execution_count": 28, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -490,7 +449,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -540,7 +499,7 @@ "└──────────────┴──────────────┴──────────────┴──────────────┴──────────────┴───────────┴───────────┘" ] }, - "execution_count": 29, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -573,7 +532,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -628,7 +587,7 @@ "└────────────┴────────────┴────────────┴───────────┴───────────┴───────────┴───────────┴───────────┘" ] }, - "execution_count": 30, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -661,7 +620,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -716,7 +675,7 @@ "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘" ] }, - "execution_count": 31, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -749,7 +708,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -804,7 +763,7 @@ "└────────────┴────────────┴────────────┴───────────┴───────────┴───────────┴───────────┴───────────┘" ] }, - "execution_count": 35, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -837,7 +796,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -892,7 +851,7 @@ "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘" ] }, - "execution_count": 33, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -924,7 +883,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -974,7 +933,7 @@ "└────────────────┴──────────────┴───────────────┴───────────┴───────────────┴──────────┴───────────┘" ] }, - "execution_count": 34, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } From 14993fbbdd6db06bda185126f7f2d0c8b00e2b10 Mon Sep 17 00:00:00 2001 From: peyha Date: Fri, 19 Apr 2024 13:42:15 +0200 Subject: [PATCH 9/9] doc(example): comment dataframe construction --- examples/morpho_blue.ipynb | 66 ++++++++++++++++++++++++++++++-------- 1 file changed, 53 insertions(+), 13 deletions(-) diff --git a/examples/morpho_blue.ipynb b/examples/morpho_blue.ipynb index 9abe6df8..70b79c38 100644 --- a/examples/morpho_blue.ipynb +++ b/examples/morpho_blue.ipynb @@ -63,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 55, "metadata": {}, "outputs": [], "source": [ @@ -122,12 +122,16 @@ " else:\n", " data_types.append((parts[0], parts[-1]))\n", "\n", + " # Create one DataFrame for each data variable\n", + " # TODO: optimize this\n", " dfs = []\n", " for index, (type, name) in enumerate(data_types):\n", " data_events_cur_df = raw_events.select([\n", " pl.col(\"data\").map_elements(lambda x: convert_to_type(x, type, 32*index)).alias(name)\n", " ] + [pl.col(\"block_number\"), pl.col(\"transaction_index\", \"log_index\")])\n", " dfs.append(data_events_cur_df)\n", + " \n", + " # Create the DataFrame for the indexed variables\n", " indexed_events_df = raw_events.select([\n", " pl.col(f\"topic{1+index}\").map_elements(lambda x: convert_to_type(x, type)).alias(name)\n", " for index, (type, name) in enumerate(indexed_types)\n", @@ -135,7 +139,8 @@ "\n", " print(f'Indexed types: {indexed_types}')\n", " print(f'Data types: {data_types}')\n", - " \n", + "\n", + " # Join all the DataFrames \n", " res_df = indexed_events_df\n", " for df in dfs:\n", " res_df = res_df.join(df, on=[\"block_number\", \"transaction_index\", \"log_index\"], how=\"inner\")\n", @@ -225,7 +230,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 56, "metadata": {}, "outputs": [ { @@ -238,16 +243,51 @@ ] }, { - "ename": "NameError", - "evalue": "name 'data_events_df' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[54], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# Parse the raw events to a DataFrame with a specific event signature\u001b[39;00m\n\u001b[0;32m----> 3\u001b[0m blue_market_creations \u001b[38;5;241m=\u001b[39m \u001b[43mparse_raw_events\u001b[49m\u001b[43m(\u001b[49m\u001b[43mblue_market_creations_raw\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mevent CreateMarket(bytes32 indexed id, address loanToken, address collateralToken, address oracle, address irm, uint256 lltv)\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 6\u001b[0m blue_market_creations\u001b[38;5;241m.\u001b[39mhead(\u001b[38;5;241m5\u001b[39m)\n", - "Cell \u001b[0;32mIn[53], line 72\u001b[0m, in \u001b[0;36mparse_raw_events\u001b[0;34m(raw_events, signature)\u001b[0m\n\u001b[1;32m 69\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m df \u001b[38;5;129;01min\u001b[39;00m dfs:\n\u001b[1;32m 70\u001b[0m res_df \u001b[38;5;241m=\u001b[39m res_df\u001b[38;5;241m.\u001b[39mjoin(df, on\u001b[38;5;241m=\u001b[39m[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mblock_number\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtransaction_index\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mlog_index\u001b[39m\u001b[38;5;124m\"\u001b[39m], how\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124minner\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 72\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mdata_events_df\u001b[49m\n", - "\u001b[0;31mNameError\u001b[0m: name 'data_events_df' is not defined" - ] + "data": { + "text/html": [ + "
\n", + "shape: (5, 9)
idblock_numbertransaction_indexlog_indexloanTokencollateralTokenoracleirmlltv
stru32u32u32strstrstrstrf64
"0xc54d7acf14de…1891962373135"0xc02aaa39b223…"0x7f39c581f595…"0x2a01eb949609…"0x870ac11d48b1…9.4500e17
"0x54efdee08e27…1891985895141"0xa0b86991c621…"0x000000000000…"0x000000000000…"0x000000000000…0.0
"0x58e212060645…1891986080255"0xc02aaa39b223…"0x000000000000…"0x000000000000…"0x000000000000…0.0
"0x08535810fead…18925864126392"0xa0b86991c621…"0xabc56186c2df…"0x6e8f5b2df218…"0x870ac11d48b1…9.6500e17
"0xb323495f7e41…1892591094214"0xa0b86991c621…"0x7f39c581f595…"0x48f7e36eb6b8…"0x870ac11d48b1…8.6000e17
" + ], + "text/plain": [ + "shape: (5, 9)\n", + "┌───────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬──────────┐\n", + "│ id ┆ block_num ┆ transacti ┆ log_index ┆ … ┆ collatera ┆ oracle ┆ irm ┆ lltv │\n", + "│ --- ┆ ber ┆ on_index ┆ --- ┆ ┆ lToken ┆ --- ┆ --- ┆ --- │\n", + "│ str ┆ --- ┆ --- ┆ u32 ┆ ┆ --- ┆ str ┆ str ┆ f64 │\n", + "│ ┆ u32 ┆ u32 ┆ ┆ ┆ str ┆ ┆ ┆ │\n", + "╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪══════════╡\n", + "│ 0xc54d7ac ┆ 18919623 ┆ 73 ┆ 135 ┆ … ┆ 0x7f39c58 ┆ 0x2a01eb9 ┆ 0x870ac11 ┆ 9.4500e1 │\n", + "│ f14de29e0 ┆ ┆ ┆ ┆ ┆ 1f595b53c ┆ 496094da0 ┆ d48b15db9 ┆ 7 │\n", + "│ e5527cabd ┆ ┆ ┆ ┆ ┆ 5cb19bd0b ┆ 3c4e364de ┆ a138cf899 ┆ │\n", + "│ 7a576… ┆ ┆ ┆ ┆ ┆ 3f8da… ┆ f50f5… ┆ d20f1… ┆ │\n", + "│ 0x54efdee ┆ 18919858 ┆ 95 ┆ 141 ┆ … ┆ 0x0000000 ┆ 0x0000000 ┆ 0x0000000 ┆ 0.0 │\n", + "│ 08e272e92 ┆ ┆ ┆ ┆ ┆ 000000000 ┆ 000000000 ┆ 000000000 ┆ │\n", + "│ 9034a8f26 ┆ ┆ ┆ ┆ ┆ 000000000 ┆ 000000000 ┆ 000000000 ┆ │\n", + "│ f7ca3… ┆ ┆ ┆ ┆ ┆ 00000… ┆ 00000… ┆ 00000… ┆ │\n", + "│ 0x58e2120 ┆ 18919860 ┆ 80 ┆ 255 ┆ … ┆ 0x0000000 ┆ 0x0000000 ┆ 0x0000000 ┆ 0.0 │\n", + "│ 60645d18e ┆ ┆ ┆ ┆ ┆ 000000000 ┆ 000000000 ┆ 000000000 ┆ │\n", + "│ ab6d9b2af ┆ ┆ ┆ ┆ ┆ 000000000 ┆ 000000000 ┆ 000000000 ┆ │\n", + "│ 3d56f… ┆ ┆ ┆ ┆ ┆ 00000… ┆ 00000… ┆ 00000… ┆ │\n", + "│ 0x0853581 ┆ 18925864 ┆ 126 ┆ 392 ┆ … ┆ 0xabc5618 ┆ 0x6e8f5b2 ┆ 0x870ac11 ┆ 9.6500e1 │\n", + "│ 0feadf52d ┆ ┆ ┆ ┆ ┆ 6c2df63c3 ┆ df218443e ┆ d48b15db9 ┆ 7 │\n", + "│ 61a182dc7 ┆ ┆ ┆ ┆ ┆ 38e04c9c9 ┆ 87fe8aa98 ┆ a138cf899 ┆ │\n", + "│ a12ba… ┆ ┆ ┆ ┆ ┆ b9814… ┆ 11e69… ┆ d20f1… ┆ │\n", + "│ 0xb323495 ┆ 18925910 ┆ 94 ┆ 214 ┆ … ┆ 0x7f39c58 ┆ 0x48f7e36 ┆ 0x870ac11 ┆ 8.6000e1 │\n", + "│ f7e4148be ┆ ┆ ┆ ┆ ┆ 1f595b53c ┆ eb6b826b2 ┆ d48b15db9 ┆ 7 │\n", + "│ 5643a4ea4 ┆ ┆ ┆ ┆ ┆ 5cb19bd0b ┆ df4b2e630 ┆ a138cf899 ┆ │\n", + "│ a8221… ┆ ┆ ┆ ┆ ┆ 3f8da… ┆ b62cd… ┆ d20f1… ┆ │\n", + "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" } ], "source": [