diff --git "a/test.ipynb" "b/test.ipynb" --- "a/test.ipynb" +++ "b/test.ipynb" @@ -1,30 +1,26 @@ { "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd" - ] - }, { "cell_type": "code", "execution_count": 2, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/l_/g22b1g_n0gn4tmx9lkxqv5x00000gn/T/ipykernel_61363/4073736390.py:1: DtypeWarning: Columns (7,10) have mixed types. Specify dtype option on import or set low_memory=False.\n", - " tools = pd.read_csv('./data/tools.csv')\n" - ] - } - ], + "outputs": [], "source": [ - "tools = pd.read_csv('./data/tools.csv')" + "import pandas as pd\n", + "from datetime import datetime\n", + "from tqdm import tqdm\n", + "\n", + "import time\n", + "import requests\n", + "import datetime\n", + "import pandas as pd\n", + "from collections import defaultdict\n", + "from typing import Any, Union\n", + "from string import Template\n", + "from enum import Enum\n", + "from tqdm import tqdm\n", + "import numpy as np\n", + "from pathlib import Path" ] }, { @@ -33,6983 +29,3329 @@ "metadata": {}, "outputs": [], "source": [ - "tools['request_time'] = pd.to_datetime(tools['request_time'])\n", - "tools['request_date'] = tools['request_time'].dt.date\n", - "tools['request_month_year'] = tools['request_time'].dt.to_period('M')" + "tools = pd.read_parquet('/Users/arshath/play/openautonomy/olas-prediction-live-dashboard/data/tools.parquet')\n", + "# trades = pd.read_parquet('/Users/arshath/play/openautonomy/olas-prediction-live-dashboard/data/all_trades_profitability.parquet')\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/l_/g22b1g_n0gn4tmx9lkxqv5x00000gn/T/ipykernel_61363/512447339.py:5: UserWarning: Converting to PeriodArray/Index representation will drop timezone information.\n", - " all_trades['month_year'] = all_trades['creation_timestamp'].dt.to_period('M')\n" - ] - } - ], - "source": [ - "all_trades = pd.read_csv('./data/all_trades_profitability.csv')\n", - "all_trades['creation_timestamp'] = pd.to_datetime(all_trades['creation_timestamp'])\n", - "all_trades['date'] = all_trades['creation_timestamp'].dt.date\n", - "all_trades['time'] = all_trades['creation_timestamp'].dt.time\n", - "all_trades['month_year'] = all_trades['creation_timestamp'].dt.to_period('M')\n", - "all_trades_0 = all_trades[all_trades['num_mech_calls'] == 0].reset_index(drop=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAHyCAYAAAD1OfRNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABKOklEQVR4nO3deVhU9eLH8c8AsgiCIQKuoFKulYWpKGq5oWLLTeuaXbcsy61fWZq2qHUztyyXzLJFW2xfrLQ0l1Iz09K0slwyzRWsVFBUFPj+/rgP5zqyCAYzfL3v1/PM83iWOeczxzPDh7MMLmOMEQAAgEV8vB0AAACguCgwAADAOhQYAABgHQoMAACwDgUGAABYhwIDAACsQ4EBAADWocAAAADrUGAAAIB1KDD/Y7788ku5XC6999573o5SJKmpqerevbsqVaokl8ulqVOnejuSm759+yo2NtbbMc5p165dcrlcmjt3bpHnffLJJ0s/mAVcLpeGDBnilXVfffXVuvrqq0tt+bGxserbt2+pLT8/Z7+m4uybKFlz586Vy+XSd9995+0o54UCUwpyd4rAwEDt27cvz/Srr75ajRo18kIy+9x7771avHixRo0apddee02dOnXKd77jx49r7Nix+vLLLz0b0GKffvqpxo4dWyrLzsnJ0aRJk1SrVi0FBgbqsssu05tvvlkq6wJQuGefffaCLIh+3g5wIcvMzNSECRM0Y8YMb0ex1vLly3X99dfr/vvvL3S+48eP69FHH5WkUv2N1VYxMTE6ceKEypUr54z79NNPNXPmzFIpMQ899JAmTJigO+64Q1dddZU++ugj9ezZUy6XSz169Cjx9V2oPv/8c29HwAXg2WefVUREhMePtpU2jsCUosaNG+uFF17Q/v37vR3F4zIyMkpkOQcPHlTFihVLZFlnKql8tsg9Iujr61vq69q3b5+mTJmiwYMHa/bs2brjjjv0ySefqFWrVho+fLiys7NLPcOFwt/fX/7+/t6OgTMYY3TixAlvx4AoMKXqwQcfVHZ2tiZMmFDofIWdA3a5XG6/IY8dO1Yul0vbtm3Tv/71L4WFhaly5cp65JFHZIzRnj17dP311ys0NFTR0dGaMmVKvuvMzs7Wgw8+qOjoaAUHB+u6667Tnj178sy3du1aderUSWFhYSpfvrzatGmj1atXu82Tm+nnn39Wz549ddFFFykxMbHQ1/zbb7/ppptuUnh4uMqXL6/mzZtr4cKFzvTc03DGGM2cOVMul0sul6vA7Ve5cmVJ0qOPPurMm7vd+vbtq5CQEO3YsUNdunRRhQoVdOutt0qSVq1apZtuukk1a9ZUQECAatSooXvvvTffD6j58+erUaNGCgwMVKNGjfThhx/mmycnJ0dTp05Vw4YNFRgYqKioKN155506fPiw23zfffedkpKSFBERoaCgINWqVUu33XZbodtt2LBhqlSpks78I/JDhw6Vy+XS9OnTnXGpqalyuVyaNWuWs43O3Mf69u2rmTNnSpKzvfLbvrNnz1adOnUUEBCgq666St9++22h+STpo48+0unTpzVo0CBnnMvl0sCBA7V3716tWbOm0Ofn/n/t3r1bXbt2VUhIiKpVq+bk/fHHH9W2bVsFBwcrJiZGb7zxRp5lHDlyRPfcc49q1KihgIAAxcXFaeLEicrJyXGbLycnR9OmTdOll16qwMBAVa5cWZ06dcr3moDc//+AgAA1bNhQixYtcpv++++/a9CgQapbt66CgoJUqVIl3XTTTdq1a5fbfLn79urVqzVs2DBVrlxZwcHB+sc//qE//vjDbd78roE5efKkxo4dq0suuUSBgYGqUqWKbrzxRu3YscOZ58knn1SLFi1UqVIlBQUFKT4+/m9d91aU7TRnzhy1bdtWkZGRCggIUIMGDZz9r7hSUlLUr18/Va9eXQEBAapSpYquv/76PNvybLn7zm+//aakpCQFBweratWqeuyxx9zeM7mvqSjv09jYWHXt2lWLFy9WkyZNFBQUpOeff77ADLmXCPzwww9q06aNypcvr7i4OGf7r1ixQs2aNVNQUJDq1q2rpUuX5lnG999/r86dOys0NFQhISFq166dvvnmG7d5irofxcbGavPmzVqxYoXzPj97n8rMzDznvlgWUWBKUa1atdS7d+9SOQrzz3/+Uzk5OZowYYKaNWumxx9/XFOnTlWHDh1UrVo1TZw4UXFxcbr//vu1cuXKPM8fN26cFi5cqAceeEB33323lixZovbt27v94F6+fLlat26t9PR0jRkzRk888YSOHDmitm3bat26dXmWedNNN+n48eN64okndMcddxSYPTU1VS1atNDixYs1aNAgjRs3TidPntR1113nlILWrVvrtddekyR16NBBr732mjN8tsqVKzsflP/4xz+ceW+88UZnnqysLCUlJSkyMlJPPvmkunXrJkl69913dfz4cQ0cOFAzZsxQUlKSZsyYod69e7ut4/PPP1e3bt3kcrk0fvx43XDDDerXr1++P+juvPNODR8+XC1bttS0adPUr18/zZs3T0lJSTp9+rSk/xxZ6tixo3bt2qWRI0dqxowZuvXWW/N8SJ2tVatWOnTokDZv3uyMW7VqlXx8fLRq1Sq3cbnbMT933nmnOnToIEnO9jp7+77xxhuaPHmy7rzzTj3++OPatWuXbrzxRuc1FOT7779XcHCw6tev7za+adOmzvRzyc7OVufOnVWjRg1NmjRJsbGxGjJkiObOnatOnTqpSZMmmjhxoipUqKDevXtr586dznOPHz+uNm3a6PXXX1fv3r01ffp0tWzZUqNGjdKwYcPc1tO/f3+n6EycOFEjR45UYGBgnv+Hr776SoMGDVKPHj00adIknTx5Ut26ddNff/3lzPPtt9/q66+/Vo8ePTR9+nTdddddWrZsma6++modP348z2scOnSoNm3apDFjxmjgwIH65JNPznmxcHZ2trp27apHH31U8fHxmjJliv7v//5PaWlp+umnn5z5pk2bpiuuuEKPPfaYnnjiCfn5+emmm25y+yWhOIqynWbNmqWYmBg9+OCDmjJlimrUqKFBgwY5xbM4unXrpg8//FD9+vXTs88+q7vvvltHjx7V7t27z/nc7OxsderUSVFRUZo0aZLi4+M1ZswYjRkzxm2+orxPc23dulW33HKLOnTooGnTpqlx48aFZjh8+LC6du2qZs2aadKkSQoICFCPHj309ttvq0ePHurSpYsmTJigjIwMde/eXUePHnWeu3nzZrVq1UqbNm3SiBEj9Mgjj2jnzp26+uqrtXbt2jzrOtd+NHXqVFWvXl316tVz3ucPPfRQsZZRZhmUuDlz5hhJ5ttvvzU7duwwfn5+5u6773amt2nTxjRs2NAZ3rlzp5Fk5syZk2dZksyYMWOc4TFjxhhJZsCAAc64rKwsU716deNyucyECROc8YcPHzZBQUGmT58+zrgvvvjCSDLVqlUz6enpzvh33nnHSDLTpk0zxhiTk5NjLr74YpOUlGRycnKc+Y4fP25q1aplOnTokCfTLbfcUqTtc8899xhJZtWqVc64o0ePmlq1apnY2FiTnZ3t9voHDx58zmX+8ccfebZVrj59+hhJZuTIkXmmHT9+PM+48ePHG5fLZX7//XdnXOPGjU2VKlXMkSNHnHGff/65kWRiYmKccatWrTKSzLx589yWuWjRIrfxH374obOPFMfBgweNJPPss88aY4w5cuSI8fHxMTfddJOJiopy5rv77rtNeHi483+X3z42ePBgk99HQO68lSpVMocOHXLGf/TRR0aS+eSTTwrNmJycbGrXrp1nfEZGRoH/D2fK/f964oknnHG5+7LL5TJvvfWWM37Lli15/t///e9/m+DgYLNt2za35Y4cOdL4+vqa3bt3G2OMWb58uZHk9t7MdeY+L8n4+/ubX3/91Rm3adMmI8nMmDHDGZffvrRmzRojybz66qvOuNzPh/bt27ut59577zW+vr5u+1ibNm1MmzZtnOGXX37ZSDJPPfVUoZnPznLq1CnTqFEj07ZtW7fxMTExbp8P+Snqdsrv9SclJeXZF85+TWfvm4cPHzaSzOTJkwvNlZ/cfWfo0KFuGZOTk42/v7/5448/jDFFf58a859tJMksWrSoSBnatGljJJk33njDGZe7n/r4+JhvvvnGGb948eI878sbbrjB+Pv7mx07djjj9u/fbypUqGBat27tjCvOftSwYUO3bX4+yyiLOAJTymrXrq1evXpp9uzZOnDgQIkt9/bbb3f+7evrqyZNmsgYo/79+zvjK1asqLp16+q3337L8/zevXurQoUKznD37t1VpUoVffrpp5KkjRs3avv27erZs6f++usv/fnnn/rzzz+VkZGhdu3aaeXKlXkOx991111Fyv7pp5+qadOmbqeZQkJCNGDAAO3atUs///xz0TZCMQ0cODDPuKCgIOffGRkZ+vPPP9WiRQsZY5wjBQcOHNDGjRvVp08fhYWFOfN36NBBDRo0cFveu+++q7CwMHXo0MHZZn/++afi4+MVEhKiL774QpKc63oWLFhwziMaZ6pcubLq1avnHFVbvXq1fH19NXz4cKWmpmr79u2S/nMEJjExscDTbkXxz3/+UxdddJEz3KpVK0nKd38604kTJxQQEJBnfGBgoDO9KM7cx3P35eDgYN18883O+Lp166pixYpumd599121atVKF110kdv/Qfv27ZWdne1su/fff18ulyvPb+aS8my39u3bq06dOs7wZZddptDQULf1nrkvnT59Wn/99Zfi4uJUsWJFbdiwIc86BgwY4LaeVq1aKTs7W7///nuB2+T9999XRESEhg4dWmjmM7McPnxYaWlpatWqVb45zqWo2+nMdaalpenPP/9UmzZt9NtvvyktLa3I6wsKCpK/v7++/PLLPKdziurMowe5t8GfOnXKOV1T1Pdprlq1aikpKanI6w8JCXG7WD13P61fv76aNWvmjM/9d+5+lJ2drc8//1w33HCDateu7cxXpUoV9ezZU1999ZXS09Pd1nU++9HZSmIZ3kCB8YCHH35YWVlZ57wWpjhq1qzpNhwWFqbAwEBFRETkGZ/fh8DFF1/sNuxyuRQXF+ecY879QdinTx9VrlzZ7fHiiy8qMzMzz4dSrVq1ipT9999/V926dfOMzz3lUBpvGj8/P1WvXj3P+N27d6tv374KDw9XSEiIKleurDZt2kiS8/py85y9zSTleR3bt29XWlqaIiMj82y3Y8eO6eDBg5KkNm3aqFu3bnr00UcVERGh66+/XnPmzFFmZuY5X0urVq2cU0SrVq1SkyZN1KRJE4WHh2vVqlVKT0/Xpk2bnMJxvs7ex3LLzLl+qAQFBeX7Ok6ePOlMP5fc6yzOFBYWpurVq+cpF2fv49u3b9eiRYvybP/27dtLkvN/sGPHDlWtWlXh4eHnzHP2tpD+sz3OXO+JEyc0evRo57qbiIgIVa5cWUeOHMn3B/j5bN8dO3aobt268vMr/AbSBQsWqHnz5goMDFR4eLhzmrU4ReLMdRZlO61evVrt27dXcHCwKlasqMqVK+vBBx+UpGKtNyAgQBMnTtRnn32mqKgotW7dWpMmTVJKSkqRnu/j4+P2w1+SLrnkEkly+3wryvs0V1E/23IVtJ/WqFEjzzjpv//nf/zxh44fP17g52NOTk6eaxXP931a0svwBm6j9oDatWvrX//6l2bPnq2RI0fmmV7Qb8mF3a2R390kBd1hYs66eK0oco+uTJ48ucDzvSEhIW7DRfnB5C0BAQHy8XHv69nZ2erQoYMOHTqkBx54QPXq1VNwcLD27dunvn375jnCVBQ5OTmKjIzUvHnz8p2e+0M598sEv/nmG33yySdavHixbrvtNk2ZMkXffPNNnm17psTERL3wwgv67bfftGrVKrVq1Uoul0uJiYlatWqVqlatqpycnL9dYM53f6pSpYq++OILGWPc9u3cI5BVq1Y973UXJVNOTo46dOigESNG5Dtv7g+z4ijKeocOHao5c+bonnvuUUJCgsLCwpzbxvPbl0ry/XqmVatW6brrrlPr1q317LPPqkqVKipXrpzmzJmT7wXPJWHHjh1q166d6tWrp6eeeko1atSQv7+/Pv30Uz399NPFfi/dc889uvbaazV//nwtXrxYjzzyiMaPH6/ly5friiuu+Nt5i/o+zVXcz7a/s/8WV0kss7T2xdJGgfGQhx9+WK+//romTpyYZ1pu2z1y5Ijb+NI8fJd7hCWXMUa//vqrLrvsMklyDpeHhoY6v7mWlJiYGG3dujXP+C1btjjTi+t8TpX8+OOP2rZtm1555RW3i3aXLFniNl9unrO3maQ8r6NOnTpaunSpWrZsWaQPvebNm6t58+YaN26c3njjDd16661666233E6fnC23mCxZskTffvutU4pbt26tWbNmqWrVqgoODlZ8fHyh6/47p5cK07hxY7344ov65Zdf3E6x5V6AeK4LIP+uOnXq6NixY+fcb+vUqaPFixfr0KFDRToKcy7vvfee+vTp43bn38mTJ/O8r/+OOnXqaO3atTp9+rTbd/qc6f3331dgYKAWL17sdipvzpw5573Oc22nTz75RJmZmfr444/dfps/+1RMcdd733336b777tP27dvVuHFjTZkyRa+//nqhz8vJydFvv/3mVlS3bdsmSc63Zhf3feoplStXVvny5Qv8fPTx8clzFKcoSuu97m2cQvKQOnXq6F//+peef/75PIdCQ0NDFRERkeduoWeffbbU8rz66qtuV76/9957OnDggDp37ixJio+PV506dfTkk0/q2LFjeZ7/d26x69Kli9atW+d2O21GRoZmz56t2NjYPNeVFEX58uUl5S2Bhcn9rePM3zKMMZo2bZrbfFWqVFHjxo31yiuvuB0KX7JkSZ7rdW6++WZlZ2fr3//+d571ZWVlOfkOHz6c57eb3B/s5zqNVKtWLVWrVk1PP/20Tp8+rZYtW0r6T7HZsWOH3nvvPTVv3vycpxmCg4MlFW+bFcX111+vcuXKue2/xhg999xzqlatmlq0aFGi6zvbzTffrDVr1mjx4sV5ph05ckRZWVmS/nOnizHG+QLEM53Pb56+vr55njdjxowS/d6bbt266c8//9QzzzyTZ1ruun19feVyudzWu2vXLs2fP/+813mu7ZTfeyktLe28StPx48ed04256tSpowoVKhTpFKskt+1jjNEzzzyjcuXKqV27dpKK/j71NF9fX3Xs2FEfffSR2y3jqampeuONN5SYmKjQ0NBiLzc4ONhrr6k0cQTGgx566CG99tpr2rp1qxo2bOg27fbbb9eECRN0++23q0mTJlq5cqXzW0NpCA8PV2Jiovr166fU1FRNnTpVcXFxzu3PPj4+evHFF9W5c2c1bNhQ/fr1U7Vq1bRv3z598cUXCg0N1SeffHJe6x45cqTefPNNde7cWXfffbfCw8P1yiuvaOfOnXr//ffznOopiqCgIDVo0EBvv/22LrnkEoWHh6tRo0aF/smGevXqqU6dOrr//vu1b98+hYaG6v3338/3vO/48eOVnJysxMRE3XbbbTp06JBmzJihhg0buhW8Nm3a6M4779T48eO1ceNGdezYUeXKldP27dv17rvvatq0aerevbteeeUVPfvss/rHP/6hOnXq6OjRo3rhhRcUGhqqLl26nPP1tmrVSm+99ZYuvfRS5wjelVdeqeDgYG3btk09e/Y85zJyj9DcfffdSkpKkq+vb4l8S2716tV1zz33aPLkyTp9+rSuuuoqzZ8/X6tWrdK8efNK/cv0hg8fro8//lhdu3ZV3759FR8fr4yMDP3444967733tGvXLkVEROiaa65Rr169NH36dG3fvl2dOnVSTk6OVq1apWuuuabYt5F27dpVr732msLCwtSgQQOtWbNGS5cuVaVKlUrstfXu3Vuvvvqqhg0bpnXr1qlVq1bKyMjQ0qVLNWjQIF1//fVKTk7WU089pU6dOqlnz546ePCgZs6cqbi4OP3www/FXmdRtlPHjh3l7++va6+9VnfeeaeOHTumF154QZGRkcW+eWHbtm1q166dbr75ZjVo0EB+fn768MMPlZqaWqT9MzAwUIsWLVKfPn3UrFkzffbZZ1q4cKEefPBB59RQUd+n3vD4449ryZIlSkxM1KBBg+Tn56fnn39emZmZmjRp0nktMz4+XrNmzdLjjz+uuLg4RUZGqm3btiWc3As8d8PT/44zb6M+W+5tfmfeRm3Mf25B7N+/vwkLCzMVKlQwN998s3PLbH63UefeDnjmcoODg/Os7+xbtnNvo37zzTfNqFGjTGRkpAkKCjLJyclutw3n+v77782NN95oKlWqZAICAkxMTIy5+eabzbJly86ZqTA7duww3bt3NxUrVjSBgYGmadOmZsGCBXnmUxFvozbGmK+//trEx8cbf39/t+1W0LYxxpiff/7ZtG/f3oSEhJiIiAhzxx13OLfInn1b+/vvv2/q169vAgICTIMGDcwHH3xg+vTp43Ybda7Zs2eb+Ph4ExQUZCpUqGAuvfRSM2LECLN//35jjDEbNmwwt9xyi6lZs6YJCAgwkZGRpmvXrua7774r0mudOXOmkWQGDhzoNr59+/ZGktv/jzH530adlZVlhg4daipXrmxcLpdzS3XuvPndxnr2/liQ7Oxs88QTT5iYmBjj7+9vGjZsaF5//fUivbai7su5YmJiTHJystu4o0ePmlGjRpm4uDjj7+9vIiIiTIsWLcyTTz5pTp065cyXlZVlJk+ebOrVq2f8/f1N5cqVTefOnc369evdXnN+++DZtyAfPnzY9OvXz0RERJiQkBCTlJRktmzZkme+gj4fct+bX3zxhdtrPvv21+PHj5uHHnrI1KpVy5QrV85ER0eb7t27u912+9JLL5mLL77YBAQEmHr16pk5c+Y479PCXkNBirKdPv74Y3PZZZeZwMBAExsbayZOnOjc9r1z584CX9PZ++aff/5pBg8ebOrVq2eCg4NNWFiYadasmXnnnXfOmTN339mxY4fp2LGjKV++vImKijJjxoxx+3qGXOd6n+Zuo7P3r8IUZz81Jv/9a8OGDSYpKcmEhISY8uXLm2uuucZ8/fXXbvMUZz9KSUkxycnJpkKFCkaSs/2Ls4yyyGVMGb9KBwCAIujbt6/ee++9fE9748LDNTAAAMA6FBgAAGAdCgwAALAO18AAAADrcAQGAABY54L9HpicnBzt379fFSpUuGC/hRAAgAuNMUZHjx5V1apVC/1esAu2wOzfv/+8vnIZAAB43549e/L9I7y5LtgCU6FCBUn/2QDn89XLAADA89LT01WjRg3n53hBLtgCk3vaKDQ0lAIDAIBlznX5BxfxAgAA61BgAACAdSgwAADAOhQYAABgHQoMAACwDgUGAABYhwIDAACsQ4EBAADWocAAAADrUGAAAIB1KDAAAMA6FBgAAGAdCgwAALAOBQYAAFiHAgMAAKzj5+0AAABciGJHLiyV5e6akFwqy7UNR2AAAIB1KDAAAMA6FBgAAGAdCgwAALAOBQYAAFiHAgMAAKxDgQEAANahwAAAAOtQYAAAgHUoMAAAwDoUGAAAYB0KDAAAsA4FBgAAWIcCAwAArEOBAQAA1qHAAAAA61BgAACAdSgwAADAOhQYAABgHQoMAACwDgUGAABYhwIDAACsU6wCM378eF111VWqUKGCIiMjdcMNN2jr1q1u85w8eVKDBw9WpUqVFBISom7duik1NdVtnt27dys5OVnly5dXZGSkhg8frqysLLd5vvzyS1155ZUKCAhQXFyc5s6de36vEAAAXHCKVWBWrFihwYMH65tvvtGSJUt0+vRpdezYURkZGc489957rz755BO9++67WrFihfbv368bb7zRmZ6dna3k5GSdOnVKX3/9tV555RXNnTtXo0ePdubZuXOnkpOTdc0112jjxo265557dPvtt2vx4sUl8JIBAIDtXMYYc75P/uOPPxQZGakVK1aodevWSktLU+XKlfXGG2+oe/fukqQtW7aofv36WrNmjZo3b67PPvtMXbt21f79+xUVFSVJeu655/TAAw/ojz/+kL+/vx544AEtXLhQP/30k7OuHj166MiRI1q0aFG+WTIzM5WZmekMp6enq0aNGkpLS1NoaOj5vkQAAM5L7MiFpbLcXROSS2W5ZUV6errCwsLO+fP7b10Dk5aWJkkKDw+XJK1fv16nT59W+/btnXnq1aunmjVras2aNZKkNWvW6NJLL3XKiyQlJSUpPT1dmzdvduY5cxm58+QuIz/jx49XWFiY86hRo8bfeWkAAKAMO+8Ck5OTo3vuuUctW7ZUo0aNJEkpKSny9/dXxYoV3eaNiopSSkqKM8+Z5SV3eu60wuZJT0/XiRMn8s0zatQopaWlOY89e/ac70sDAABlnN/5PnHw4MH66aef9NVXX5VknvMWEBCggIAAb8cAAAAecF5HYIYMGaIFCxboiy++UPXq1Z3x0dHROnXqlI4cOeI2f2pqqqKjo515zr4rKXf4XPOEhoYqKCjofCIDAIALSLEKjDFGQ4YM0Ycffqjly5erVq1abtPj4+NVrlw5LVu2zBm3detW7d69WwkJCZKkhIQE/fjjjzp48KAzz5IlSxQaGqoGDRo485y5jNx5cpcBAAD+txXrFNLgwYP1xhtv6KOPPlKFChWca1bCwsIUFBSksLAw9e/fX8OGDVN4eLhCQ0M1dOhQJSQkqHnz5pKkjh07qkGDBurVq5cmTZqklJQUPfzwwxo8eLBzCuiuu+7SM888oxEjRui2227T8uXL9c4772jhwtK5ohsAANilWEdgZs2apbS0NF199dWqUqWK83j77bedeZ5++ml17dpV3bp1U+vWrRUdHa0PPvjAme7r66sFCxbI19dXCQkJ+te//qXevXvrsccec+apVauWFi5cqCVLlujyyy/XlClT9OKLLyopKakEXjIAALDd3/oemLKsqPeRAwBQGvgemPPjke+BAQAA8AYKDAAAsA4FBgAAWIcCAwAArEOBAQAA1qHAAAAA61BgAACAdSgwAADAOhQYAABgHQoMAACwDgUGAABYhwIDAACsQ4EBAADWocAAAADrUGAAAIB1KDAAAMA6FBgAAGAdCgwAALAOBQYAAFiHAgMAAKxDgQEAANahwAAAAOtQYAAAgHUoMAAAwDoUGAAAYB0KDAAAsA4FBgAAWIcCAwAArEOBAQAA1qHAAAAA61BgAACAdSgwAADAOhQYAABgHQoMAACwDgUGAABYhwIDAACsQ4EBAADWocAAAADrUGAAAIB1KDAAAMA6FBgAAGAdCgwAALAOBQYAAFiHAgMAAKxDgQEAANahwAAAAOtQYAAAgHUoMAAAwDoUGAAAYB0KDAAAsA4FBgAAWIcCAwAArEOBAQAA1qHAAAAA61BgAACAdSgwAADAOhQYAABgHQoMAACwDgUGAABYhwIDAACsQ4EBAADWocAAAADrUGAAAIB1KDAAAMA6FBgAAGAdCgwAALAOBQYAAFiHAgMAAKxDgQEAANahwAAAAOsUu8CsXLlS1157rapWrSqXy6X58+e7Te/bt69cLpfbo1OnTm7zHDp0SLfeeqtCQ0NVsWJF9e/fX8eOHXOb54cfflCrVq0UGBioGjVqaNKkScV/dQAA4IJU7AKTkZGhyy+/XDNnzixwnk6dOunAgQPO480333Sbfuutt2rz5s1asmSJFixYoJUrV2rAgAHO9PT0dHXs2FExMTFav369Jk+erLFjx2r27NnFjQsAAC5AfsV9QufOndW5c+dC5wkICFB0dHS+03755RctWrRI3377rZo0aSJJmjFjhrp06aInn3xSVatW1bx583Tq1Cm9/PLL8vf3V8OGDbVx40Y99dRTbkUHAAD8byqVa2C+/PJLRUZGqm7duho4cKD++usvZ9qaNWtUsWJFp7xIUvv27eXj46O1a9c687Ru3Vr+/v7OPElJSdq6dasOHz6c7zozMzOVnp7u9gAAABemEi8w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fLwdw01aWpq56aabTGBgoImMjDSPPPKIycrKcqanpKSUucznUha386lTp8zw4cNNnTp1zFVXXWVeeuklt+llcTvv37/ftGzZ0vj6+prWrVubQ4cOmeTkZOdz5JJLLjH79+/3dkw3mzZtyvdRrlw58+GHHzrDZcnEiRPN8ePHjTHGZGVlmfvuu8/4+/sbHx8f4+fnZ/r162dOnTrl8VwUmEK4XC5zxx13mMjISOPn52eSk5PNhx9+6PbhWdYkJiaawYMHm6NHj5rJkyebatWqmcGDBzvT77//ftOiRQsvJszfgAEDTMuWLc2PP/5otm/fbrp3725GjBhhMjIyzEsvvWTKly9v5s2b5+2Ybrp162YSEhLMli1b8kzbsmWLadGihenevbsXkhUsLS2t0MeqVavK3A+pu+++21xyySXm3XffNS+88IKJiYkxycnJJjMz0xjznx+sLpfLyymLpywWmDFjxpioqCgzefJk89BDD5mwsDAzYMAAZ3pZ3M69evUyLVq0MB9//LH55z//aVq0aGFatWpl9u7da37//XfTsmVLt8+/siD3F7TcknXmI3d8Wds3fHx8nF/GJk+ebC666CLz8ssvm82bN5vXX3/dREZGmokTJ3o8FwWmEC6Xy6SmpprTp0+b9957z3Tp0sX4+vqaqKgoM2LECLN161ZvR8wjNDTU/Prrr8YYY06fPm38/PzM999/70zftm2bCQsL8064QkRERJjvvvvOGT506JAJDAw0GRkZxhhjnnnmGdO4cWNvxctXSEiI2bBhQ4HTv/vuOxMSEuLBROeW++FY0KMsfnjWrFnTfPHFF87wH3/8YZo2bWo6duxoTp48WSaPDFx00UWFPkJDQ8tc5ri4OPPJJ584w9u3bzdxcXGmb9++Jicnp0xu5ypVqpg1a9YYY4z566+/jMvlMkuXLnWmL1u2zNSuXdtb8fJ1+eWXm+TkZPPLL7+YXbt2mV27dpmdO3caPz8/s2TJEmdcWZL7s9AYY6644grz/PPPu01//fXXTcOGDT2ei2tgisDPz0/dunVTt27dtG/fPr388suaO3eunnzySbVs2VIrV670dkSHv7+/Tp48KUk6deqUcnJynGFJOnHiRJk8J5yVleV2nUtISIiysrKUkZGh8uXLq2PHjrr//vu9mDCvgIAApaenFzj96NGjZe5vm1SoUEEPPfSQmjVr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0ksv6fHHH8+zzODgYK1du1aTJk3SY489piVLlkiSvv32W0nSnDlzdODAAWdYknbs2KH58+drwYIFWrBggVasWKEJEyac8zXcdNNNys7O1scff+yMO3jwoBYuXKjbbrtNkrRq1Sr17t1b//d//6eff/5Zzz//vObOnatx48Y5z/Hx8dH06dO1efNmvfLKK1q+fLlGjBjhtq7jx49r4sSJevHFF7V582ZFRkYWc4sDKDKPf/cvACu0adPGJCYmOsNZWVkmODjY9OrVyxl34MABI8msWbPGPPjgg6Zu3bomJyfHmT5z5kwTEhJisrOz812mMcZcddVV5oEHHnCGJZkPP/zQbZ4xY8aY8uXLm/T0dGfc8OHDTbNmzYr0WgYOHOj2VehTpkwxtWvXdrK2a9fOPPHEE27Pee2110yVKlUKXOa7775rKlWq5AzPmTPHSDIbN24sUiYAfw9/zBFAgS677DLn376+vqpUqZIuvfRSZ1xUVJSk/xzR+OWXX5SQkCCXy+VMb9mypY4dO6a9e/eqZs2aeZYpSVWqVNHBgwfPmSU2NlYVKlQo9vMk6Y477tBVV12lffv2qVq1apo7d6769u3rZN20aZNWr17tdsQlOztbJ0+e1PHjx1W+fHktXbpU48eP15YtW5Senq6srCy36ZLk7++f5/UBKB0UGAAFKleunNuwy+VyG5dbAIpzsWp+yyzK88/3eZJ0xRVX6PLLL9err76qjh07avPmzVq4cKEz/dixY3r00Ud144035nluYGCgdu3apa5du2rgwIEaN26cwsPD9dVXX6l///46deqUU2CCgoLcChyA0kOBAVAi6tevr/fff1/GGOeH+OrVq1WhQgVVr169yMspV66csrOzSzzf7bffrqlTp2rfvn1q3769atSo4Uy78sortXXrVsXFxeX73PXr1ysnJ0dTpkyRj89/Lh185513SjwjgKLjIl4AJWLQoEHas2ePhg4dqi1btuijjz7SmDFjNGzYMOeHflHExsZq2bJlSklJ0eHDh0ssX8+ePbV371698MILzsW7uUaPHq1XX31Vjz76qDZv3qxffvlFb731lh5++GFJUlxcnE6fPq0ZM2bot99+02uvvabnnnuuxLIBKD4KDIASUa1aNX366adat26dLr/8ct11113q37+/UwKKasqUKVqyZIlq1KihK664osTyhYWFqVu3bgoJCdENN9zgNi0pKUkLFizQ559/rquuukrNmzfX008/rZiYGEnS5ZdfrqeeekoTJ05Uo0aNNG/ePI0fP77EsgEoPpcxxng7BAB4Qrt27dSwYUNNnz7d21EA/E0UGAAXvMOHD+vLL79U9+7d9fPPP6tu3brejgTgb+IiXgBW2717txo0aFDg9J9//lmtW7fW4cOHNXHiRMoLcIHgCAwAq2VlZWnXrl0FTo+NjZWfH7+rARcaCgwAALAOdyEBAADrUGAAAIB1KDAAAMA6FBgAAGAdCgwAALAOBQYAAFiHAgMAAKzz/z4nC2//zw9vAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "all_trades_0.groupby('month_year').size().plot(kind='bar', title='Number of trades with 0 mechanical calls per month')" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "num_mech_calls\n", - "1 24156\n", - "2 18109\n", - "3 12146\n", - "4 7685\n", - "5 5353\n", - " ... \n", - "185 1\n", - "184 1\n", - "166 1\n", - "159 1\n", - "148 1\n", - "Name: count, Length: 111, dtype: int64" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "all_trades['num_mech_calls'].value_counts()\n" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, "outputs": [], "source": [ - "def get_trades_with_zero_mech_calls(num_mech_calls):\n", - " if num_mech_calls == 0:\n", - " return True\n", - " else:\n", - " return False\n", + "IRRELEVANT_TOOLS = [\n", + " \"openai-text-davinci-002\",\n", + " \"openai-text-davinci-003\",\n", + " \"openai-gpt-3.5-turbo\",\n", + " \"openai-gpt-4\",\n", + " \"stabilityai-stable-diffusion-v1-5\",\n", + " \"stabilityai-stable-diffusion-xl-beta-v2-2-2\",\n", + " \"stabilityai-stable-diffusion-512-v2-1\",\n", + " \"stabilityai-stable-diffusion-768-v2-1\",\n", + " \"deepmind-optimization-strong\",\n", + " \"deepmind-optimization\",\n", + "]\n", + "QUERY_BATCH_SIZE = 1000\n", + "DUST_THRESHOLD = 10000000000000\n", + "INVALID_ANSWER_HEX = (\n", + " \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\"\n", + ")\n", + "INVALID_ANSWER = -1\n", + "FPMM_CREATOR = \"0x89c5cc945dd550bcffb72fe42bff002429f46fec\"\n", + "DEFAULT_FROM_DATE = \"1970-01-01T00:00:00\"\n", + "DEFAULT_TO_DATE = \"2038-01-19T03:14:07\"\n", + "DEFAULT_FROM_TIMESTAMP = 0\n", + "DEFAULT_TO_TIMESTAMP = 2147483647\n", + "WXDAI_CONTRACT_ADDRESS = \"0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d\"\n", + "DEFAULT_MECH_FEE = 0.01\n", + "DUST_THRESHOLD = 10000000000000\n", + "SCRIPTS_DIR = Path('/Users/arshath/play/openautonomy/olas-prediction-live-dashboard/scripts')\n", + "ROOT_DIR = SCRIPTS_DIR.parent\n", + "DATA_DIR = ROOT_DIR / \"data\"\n", "\n", + "class MarketState(Enum):\n", + " \"\"\"Market state\"\"\"\n", "\n", - "all_trades['zero_mech_calls'] = all_trades.apply(lambda x: get_trades_with_zero_mech_calls(x['num_mech_calls']), axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
zero_mech_callsFalseTrue
month_year
2023-07237
2023-081736172
2023-09587598
2023-10536078
2023-113773114
2023-12866843
2024-011397662
2024-0215014476
2024-0314757810
2024-0484682160
2024-054395742
\n", - "
" - ], - "text/plain": [ - "zero_mech_calls False True \n", - "month_year \n", - "2023-07 23 7\n", - "2023-08 1736 172\n", - "2023-09 5875 98\n", - "2023-10 5360 78\n", - "2023-11 3773 114\n", - "2023-12 8668 43\n", - "2024-01 13976 62\n", - "2024-02 15014 476\n", - "2024-03 14757 810\n", - "2024-04 8468 2160\n", - "2024-05 4395 742" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "all_trades.groupby(['month_year', 'zero_mech_calls']).size().unstack()" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "month_year\n", - "2023-07 1\n", - "2023-08 40\n", - "2023-09 50\n", - "2023-10 36\n", - "2023-11 37\n", - "2023-12 38\n", - "2024-01 52\n", - "2024-02 60\n", - "2024-03 58\n", - "2024-04 119\n", - "2024-05 132\n", - "Freq: M, Name: trader_address, dtype: int64" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "all_trades.groupby(['month_year'])['trader_address'].agg(lambda x: x.nunique())\n" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
month_year2023-072023-082023-092023-102023-112023-122024-012024-022024-032024-042024-05
trader_address
0x2dd9f5678484c1f59f97ed334725858b938b4102NaNNaNNaNNaNNaNNaNNaN32.0240.0180.059.0
0x1665a7432fdc6557c4a2385cc9f458302300583bNaNNaNNaNNaNNaNNaNNaNNaNNaN173.048.0
0xc83037dd1c876e2b3c38257372b70d0fa3b41079NaNNaNNaNNaNNaNNaNNaNNaNNaN169.047.0
0x2fae80e1418d9ce9806d61dc3368447247221aa6NaNNaNNaNNaNNaNNaNNaNNaNNaN167.048.0
0xc918c15b87746e6351e5f0646ddcaaca11af8568NaNNaNNaNNaNNaNNaNNaNNaNNaN166.043.0
0xf4429de7007e82fdc1e516767a0366e4d8d573d2NaNNaNNaNNaNNaNNaNNaNNaNNaN161.053.0
0x89b0648e2dd0cb3e98f72873f1fdec1e0f5ea72eNaNNaNNaNNaNNaNNaNNaNNaNNaN158.049.0
0x7f429730d530e7514fe5e40873b931096c403b53NaNNaNNaNNaNNaNNaNNaNNaNNaN156.046.0
0x3666da333dadd05083fef9ff6ddee588d26e4307NaNNaNNaNNaNNaNNaNNaN5.0212.0152.037.0
0x220e814643627f4bc70814af90e6a6b29433d685NaNNaNNaNNaNNaNNaNNaNNaNNaN148.0NaN
0x034c4ad84f7ac6638bf19300d5bbe7d9b981e736NaNNaNNaNNaNNaNNaNNaNNaN245.0125.054.0
0xe593acc8a255d3d0241c308ec1320bbdbc432981NaNNaNNaNNaNNaNNaNNaNNaNNaN109.013.0
0xe7aa88a1d044e5c987ecce55ae8d2b562a41b72dNaNNaNNaNNaNNaNNaNNaNNaN44.084.056.0
0x18f8f8a755b4e4cc0f8fac2c15a888247954a0e5NaNNaNNaNNaNNaNNaNNaNNaNNaN67.09.0
0xa8efa5bb5c6ad476c9e0377dbf66cc41cb6d5bddNaNNaNNaNNaNNaNNaNNaNNaNNaN67.082.0
0xb611a9f02b318339049264c7a66ac3401281cc3cNaNNaNNaNNaNNaNNaNNaNNaN5.039.0NaN
0xe7715def604bccfb93f34ccaf3610ed6ee9c6741NaNNaNNaNNaN7.0NaN35.037.0NaN21.0NaN
0x0e84150ded38d87ab4d2571d178293749982e5ffNaNNaNNaNNaNNaNNaNNaNNaNNaN7.0NaN
0x05a4ed2367bd2f0aa63cc14897850be7474bc722NaNNaNNaNNaNNaNNaNNaNNaNNaN2.0NaN
0x99fd0c09192094c2a9020235e97a7064c2b0ea5eNaNNaNNaNNaNNaNNaNNaNNaNNaN2.053.0
\n", - "
" - ], - "text/plain": [ - "month_year 2023-07 2023-08 2023-09 \\\n", - "trader_address \n", - "0x2dd9f5678484c1f59f97ed334725858b938b4102 NaN NaN NaN \n", - "0x1665a7432fdc6557c4a2385cc9f458302300583b NaN NaN NaN \n", - "0xc83037dd1c876e2b3c38257372b70d0fa3b41079 NaN NaN NaN \n", - "0x2fae80e1418d9ce9806d61dc3368447247221aa6 NaN NaN NaN \n", - "0xc918c15b87746e6351e5f0646ddcaaca11af8568 NaN NaN NaN \n", - "0xf4429de7007e82fdc1e516767a0366e4d8d573d2 NaN NaN NaN \n", - "0x89b0648e2dd0cb3e98f72873f1fdec1e0f5ea72e NaN NaN NaN \n", - "0x7f429730d530e7514fe5e40873b931096c403b53 NaN NaN NaN \n", - "0x3666da333dadd05083fef9ff6ddee588d26e4307 NaN NaN NaN \n", - "0x220e814643627f4bc70814af90e6a6b29433d685 NaN NaN NaN \n", - "0x034c4ad84f7ac6638bf19300d5bbe7d9b981e736 NaN NaN NaN \n", - "0xe593acc8a255d3d0241c308ec1320bbdbc432981 NaN NaN NaN \n", - "0xe7aa88a1d044e5c987ecce55ae8d2b562a41b72d NaN NaN NaN \n", - "0x18f8f8a755b4e4cc0f8fac2c15a888247954a0e5 NaN NaN NaN \n", - "0xa8efa5bb5c6ad476c9e0377dbf66cc41cb6d5bdd NaN NaN NaN \n", - "0xb611a9f02b318339049264c7a66ac3401281cc3c NaN NaN NaN \n", - "0xe7715def604bccfb93f34ccaf3610ed6ee9c6741 NaN NaN NaN \n", - "0x0e84150ded38d87ab4d2571d178293749982e5ff NaN NaN NaN \n", - "0x05a4ed2367bd2f0aa63cc14897850be7474bc722 NaN NaN NaN \n", - "0x99fd0c09192094c2a9020235e97a7064c2b0ea5e NaN NaN NaN \n", - "\n", - "month_year 2023-10 2023-11 2023-12 \\\n", - "trader_address \n", - "0x2dd9f5678484c1f59f97ed334725858b938b4102 NaN NaN NaN \n", - "0x1665a7432fdc6557c4a2385cc9f458302300583b NaN NaN NaN \n", - "0xc83037dd1c876e2b3c38257372b70d0fa3b41079 NaN NaN NaN \n", - "0x2fae80e1418d9ce9806d61dc3368447247221aa6 NaN NaN NaN \n", - "0xc918c15b87746e6351e5f0646ddcaaca11af8568 NaN NaN NaN \n", - "0xf4429de7007e82fdc1e516767a0366e4d8d573d2 NaN NaN NaN \n", - "0x89b0648e2dd0cb3e98f72873f1fdec1e0f5ea72e NaN NaN NaN \n", - "0x7f429730d530e7514fe5e40873b931096c403b53 NaN NaN NaN \n", - "0x3666da333dadd05083fef9ff6ddee588d26e4307 NaN NaN NaN \n", - "0x220e814643627f4bc70814af90e6a6b29433d685 NaN NaN NaN \n", - "0x034c4ad84f7ac6638bf19300d5bbe7d9b981e736 NaN NaN NaN \n", - "0xe593acc8a255d3d0241c308ec1320bbdbc432981 NaN NaN NaN \n", - "0xe7aa88a1d044e5c987ecce55ae8d2b562a41b72d NaN NaN NaN \n", - "0x18f8f8a755b4e4cc0f8fac2c15a888247954a0e5 NaN NaN NaN \n", - "0xa8efa5bb5c6ad476c9e0377dbf66cc41cb6d5bdd NaN NaN NaN \n", - "0xb611a9f02b318339049264c7a66ac3401281cc3c NaN NaN NaN \n", - "0xe7715def604bccfb93f34ccaf3610ed6ee9c6741 NaN 7.0 NaN \n", - "0x0e84150ded38d87ab4d2571d178293749982e5ff NaN NaN NaN \n", - "0x05a4ed2367bd2f0aa63cc14897850be7474bc722 NaN NaN NaN \n", - "0x99fd0c09192094c2a9020235e97a7064c2b0ea5e NaN NaN NaN \n", - "\n", - "month_year 2024-01 2024-02 2024-03 \\\n", - "trader_address \n", - "0x2dd9f5678484c1f59f97ed334725858b938b4102 NaN 32.0 240.0 \n", - "0x1665a7432fdc6557c4a2385cc9f458302300583b NaN NaN NaN \n", - "0xc83037dd1c876e2b3c38257372b70d0fa3b41079 NaN NaN NaN \n", - "0x2fae80e1418d9ce9806d61dc3368447247221aa6 NaN NaN NaN \n", - "0xc918c15b87746e6351e5f0646ddcaaca11af8568 NaN NaN NaN \n", - "0xf4429de7007e82fdc1e516767a0366e4d8d573d2 NaN NaN NaN \n", - "0x89b0648e2dd0cb3e98f72873f1fdec1e0f5ea72e NaN NaN NaN \n", - "0x7f429730d530e7514fe5e40873b931096c403b53 NaN NaN NaN \n", - "0x3666da333dadd05083fef9ff6ddee588d26e4307 NaN 5.0 212.0 \n", - "0x220e814643627f4bc70814af90e6a6b29433d685 NaN NaN NaN \n", - "0x034c4ad84f7ac6638bf19300d5bbe7d9b981e736 NaN NaN 245.0 \n", - "0xe593acc8a255d3d0241c308ec1320bbdbc432981 NaN NaN NaN \n", - "0xe7aa88a1d044e5c987ecce55ae8d2b562a41b72d NaN NaN 44.0 \n", - "0x18f8f8a755b4e4cc0f8fac2c15a888247954a0e5 NaN NaN NaN \n", - "0xa8efa5bb5c6ad476c9e0377dbf66cc41cb6d5bdd NaN NaN NaN \n", - "0xb611a9f02b318339049264c7a66ac3401281cc3c NaN NaN 5.0 \n", - "0xe7715def604bccfb93f34ccaf3610ed6ee9c6741 35.0 37.0 NaN \n", - "0x0e84150ded38d87ab4d2571d178293749982e5ff NaN NaN NaN \n", - "0x05a4ed2367bd2f0aa63cc14897850be7474bc722 NaN NaN NaN \n", - "0x99fd0c09192094c2a9020235e97a7064c2b0ea5e NaN NaN NaN \n", - "\n", - "month_year 2024-04 2024-05 \n", - "trader_address \n", - "0x2dd9f5678484c1f59f97ed334725858b938b4102 180.0 59.0 \n", - "0x1665a7432fdc6557c4a2385cc9f458302300583b 173.0 48.0 \n", - "0xc83037dd1c876e2b3c38257372b70d0fa3b41079 169.0 47.0 \n", - "0x2fae80e1418d9ce9806d61dc3368447247221aa6 167.0 48.0 \n", - "0xc918c15b87746e6351e5f0646ddcaaca11af8568 166.0 43.0 \n", - "0xf4429de7007e82fdc1e516767a0366e4d8d573d2 161.0 53.0 \n", - "0x89b0648e2dd0cb3e98f72873f1fdec1e0f5ea72e 158.0 49.0 \n", - "0x7f429730d530e7514fe5e40873b931096c403b53 156.0 46.0 \n", - "0x3666da333dadd05083fef9ff6ddee588d26e4307 152.0 37.0 \n", - "0x220e814643627f4bc70814af90e6a6b29433d685 148.0 NaN \n", - "0x034c4ad84f7ac6638bf19300d5bbe7d9b981e736 125.0 54.0 \n", - "0xe593acc8a255d3d0241c308ec1320bbdbc432981 109.0 13.0 \n", - "0xe7aa88a1d044e5c987ecce55ae8d2b562a41b72d 84.0 56.0 \n", - "0x18f8f8a755b4e4cc0f8fac2c15a888247954a0e5 67.0 9.0 \n", - "0xa8efa5bb5c6ad476c9e0377dbf66cc41cb6d5bdd 67.0 82.0 \n", - "0xb611a9f02b318339049264c7a66ac3401281cc3c 39.0 NaN \n", - "0xe7715def604bccfb93f34ccaf3610ed6ee9c6741 21.0 NaN \n", - "0x0e84150ded38d87ab4d2571d178293749982e5ff 7.0 NaN \n", - "0x05a4ed2367bd2f0aa63cc14897850be7474bc722 2.0 NaN \n", - "0x99fd0c09192094c2a9020235e97a7064c2b0ea5e 2.0 53.0 " - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "all_trades_0.groupby(['month_year', 'trader_address']).count()['trade_id'].unstack().T.sort_values('2024-04', ascending=False)[:20]" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "month_year\n", - "2024-02 32\n", - "2024-03 240\n", - "2024-04 180\n", - "2024-05 59\n", - "Freq: M, Name: trade_id, dtype: int64" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "all_trades[all_trades['trader_address'] == '0x2dd9f5678484c1f59f97ed334725858b938b4102'].groupby('month_year')['trade_id'].count()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "from datetime import datetime\n", - "from gql import Client, gql\n", - "from gql.transport.requests import RequestsHTTPTransport\n", + " OPEN = 1\n", + " PENDING = 2\n", + " FINALIZING = 3\n", + " ARBITRATING = 4\n", + " CLOSED = 5\n", "\n", + " def __str__(self) -> str:\n", + " \"\"\"Prints the market status.\"\"\"\n", + " return self.name.capitalize()\n", "\n", - "import pandas as pd\n", - "from datetime import datetime\n", - "import requests\n", - "from typing import List, Dict, Optional\n", - "from requests.adapters import HTTPAdapter\n", - "from requests.exceptions import (\n", - " ReadTimeout as RequestsReadTimeoutError,\n", - " HTTPError as RequestsHTTPError,\n", + "\n", + "class MarketAttribute(Enum):\n", + " \"\"\"Attribute\"\"\"\n", + "\n", + " NUM_TRADES = \"Num_trades\"\n", + " WINNER_TRADES = \"Winner_trades\"\n", + " NUM_REDEEMED = \"Num_redeemed\"\n", + " INVESTMENT = \"Investment\"\n", + " FEES = \"Fees\"\n", + " MECH_CALLS = \"Mech_calls\"\n", + " MECH_FEES = \"Mech_fees\"\n", + " EARNINGS = \"Earnings\"\n", + " NET_EARNINGS = \"Net_earnings\"\n", + " REDEMPTIONS = \"Redemptions\"\n", + " ROI = \"ROI\"\n", + "\n", + " def __str__(self) -> str:\n", + " \"\"\"Prints the attribute.\"\"\"\n", + " return self.value\n", + "\n", + " def __repr__(self) -> str:\n", + " \"\"\"Prints the attribute representation.\"\"\"\n", + " return self.name\n", + "\n", + " @staticmethod\n", + " def argparse(s: str) -> \"MarketAttribute\":\n", + " \"\"\"Performs string conversion to MarketAttribute.\"\"\"\n", + " try:\n", + " return MarketAttribute[s.upper()]\n", + " except KeyError as e:\n", + " raise ValueError(f\"Invalid MarketAttribute: {s}\") from e\n", + "\n", + "\n", + "ALL_TRADES_STATS_DF_COLS = [\n", + " \"trader_address\",\n", + " \"trade_id\",\n", + " \"creation_timestamp\",\n", + " \"title\",\n", + " \"market_status\",\n", + " \"collateral_amount\",\n", + " \"outcome_index\",\n", + " \"trade_fee_amount\",\n", + " \"outcomes_tokens_traded\",\n", + " \"current_answer\",\n", + " \"is_invalid\",\n", + " \"winning_trade\",\n", + " \"earnings\",\n", + " \"redeemed\",\n", + " \"redeemed_amount\",\n", + " \"num_mech_calls\",\n", + " \"mech_fee_amount\",\n", + " \"net_earnings\",\n", + " \"roi\",\n", + "]\n", + "\n", + "SUMMARY_STATS_DF_COLS = [\n", + " \"trader_address\",\n", + " \"num_trades\",\n", + " \"num_winning_trades\",\n", + " \"num_redeemed\",\n", + " \"total_investment\",\n", + " \"total_trade_fees\",\n", + " \"num_mech_calls\",\n", + " \"total_mech_fees\",\n", + " \"total_earnings\",\n", + " \"total_redeemed_amount\",\n", + " \"total_net_earnings\",\n", + " \"total_net_earnings_wo_mech_fees\",\n", + " \"total_roi\",\n", + " \"total_roi_wo_mech_fees\",\n", + " \"mean_mech_calls_per_trade\",\n", + " \"mean_mech_fee_amount_per_trade\",\n", + "]\n", + "headers = {\n", + " \"Accept\": \"application/json, multipart/mixed\",\n", + " \"Content-Type\": \"application/json\",\n", + "}\n", + "\n", + "\n", + "omen_xdai_trades_query = Template(\n", + " \"\"\"\n", + " {\n", + " fpmmTrades(\n", + " where: {\n", + " type: Buy,\n", + " fpmm_: {\n", + " creator: \"${fpmm_creator}\"\n", + " creationTimestamp_gte: \"${fpmm_creationTimestamp_gte}\",\n", + " creationTimestamp_lt: \"${fpmm_creationTimestamp_lte}\"\n", + " },\n", + " creationTimestamp_gte: \"${creationTimestamp_gte}\",\n", + " creationTimestamp_lte: \"${creationTimestamp_lte}\"\n", + " id_gt: \"${id_gt}\"\n", + " }\n", + " first: ${first}\n", + " orderBy: id\n", + " orderDirection: asc\n", + " ) {\n", + " id\n", + " title\n", + " collateralToken\n", + " outcomeTokenMarginalPrice\n", + " oldOutcomeTokenMarginalPrice\n", + " type\n", + " creator {\n", + " id\n", + " }\n", + " creationTimestamp\n", + " collateralAmount\n", + " collateralAmountUSD\n", + " feeAmount\n", + " outcomeIndex\n", + " outcomeTokensTraded\n", + " transactionHash\n", + " fpmm {\n", + " id\n", + " outcomes\n", + " title\n", + " answerFinalizedTimestamp\n", + " currentAnswer\n", + " isPendingArbitration\n", + " arbitrationOccurred\n", + " openingTimestamp\n", + " condition {\n", + " id\n", + " }\n", + " }\n", + " }\n", + " }\n", + " \"\"\"\n", ")\n", - "from tqdm import tqdm\n", - "from urllib3 import Retry\n", - "from urllib3.exceptions import (\n", - " ReadTimeoutError as Urllib3ReadTimeoutError,\n", - " HTTPError as Urllib3HTTPError,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Subgraph to get requests and delivers data" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "def fetch_all_requests(api_url: str, timestamp_start: int, timestamp_end: int):\n", - " \"\"\"fetch_all_requests fetches all requests from the subgraph within the specified timestamp range.\"\"\"\n", - " transport = RequestsHTTPTransport(url=api_url)\n", - " client = Client(transport=transport, fetch_schema_from_transport=True)\n", "\n", - " # GraphQL query with placeholders for variables\n", - " query = gql(\"\"\"\n", - " query MyQuery($current_timestamp: BigInt!) {\n", - " requests(\n", - " orderBy: blockTimestamp, \n", - " where: {blockTimestamp_gt: $current_timestamp}, \n", - " first: 1000\n", + "\n", + "conditional_tokens_gc_user_query = Template(\n", + " \"\"\"\n", + " {\n", + " user(id: \"${id}\") {\n", + " userPositions(\n", + " first: ${first}\n", + " where: {\n", + " id_gt: \"${userPositions_id_gt}\"\n", + " }\n", + " orderBy: id\n", " ) {\n", - " blockNumber\n", - " blockTimestamp\n", + " balance\n", " id\n", - " ipfsHash\n", - " requestId\n", - " sender\n", - " transactionHash\n", + " position {\n", + " id\n", + " conditionIds\n", + " }\n", + " totalBalance\n", + " wrappedBalance\n", " }\n", " }\n", - " \"\"\")\n", + " }\n", + " \"\"\"\n", + ")\n", "\n", - " all_requests = []\n", - " current_timestamp = int(timestamp_start)\n", "\n", - " while True:\n", - " # Variables for the query\n", - " variables = {'current_timestamp': current_timestamp}\n", + "def _to_content(q: str) -> dict[str, Any]:\n", + " \"\"\"Convert the given query string to payload content, i.e., add it under a `queries` key and convert it to bytes.\"\"\"\n", + " finalized_query = {\n", + " \"query\": q,\n", + " \"variables\": None,\n", + " \"extensions\": {\"headers\": None},\n", + " }\n", + " return finalized_query\n", "\n", - " # Execute the query with the specified variables\n", - " result = client.execute(query, variable_values=variables)\n", - " requests = result['requests']\n", "\n", - " # If no more data is retrieved, or the last item's timestamp reaches the end timestamp, break the loop\n", - " if not requests or int(requests[-1]['blockTimestamp']) >= timestamp_end:\n", - " break\n", + "def _query_omen_xdai_subgraph(\n", + " from_timestamp: float,\n", + " to_timestamp: float,\n", + " fpmm_from_timestamp: float,\n", + " fpmm_to_timestamp: float,\n", + ") -> dict[str, Any]:\n", + " \"\"\"Query the subgraph.\"\"\"\n", + " url = \"https://api.thegraph.com/subgraphs/name/protofire/omen-xdai\"\n", "\n", - " # Extend the result list\n", - " all_requests.extend(requests)\n", + " grouped_results = defaultdict(list)\n", + " id_gt = \"\"\n", "\n", - " # Update the current_timestamp to the last item's timestamp to fetch the next batch\n", - " current_timestamp = int(requests[-1]['blockTimestamp'])\n", - " print(f'Fetched {len(all_requests)} requests')\n", - " print(f'Last timestamp: {datetime.fromtimestamp(current_timestamp)}')\n", + " while True:\n", + " query = omen_xdai_trades_query.substitute(\n", + " fpmm_creator=FPMM_CREATOR.lower(),\n", + " creationTimestamp_gte=int(from_timestamp),\n", + " creationTimestamp_lte=int(to_timestamp),\n", + " fpmm_creationTimestamp_gte=int(fpmm_from_timestamp),\n", + " fpmm_creationTimestamp_lte=int(fpmm_to_timestamp),\n", + " first=QUERY_BATCH_SIZE,\n", + " id_gt=id_gt,\n", + " )\n", + " content_json = _to_content(query)\n", + " res = requests.post(url, headers=headers, json=content_json)\n", + " result_json = res.json()\n", + " user_trades = result_json.get(\"data\", {}).get(\"fpmmTrades\", [])\n", "\n", - " return all_requests\n", + " if not user_trades:\n", + " break\n", "\n", + " for trade in user_trades:\n", + " fpmm_id = trade.get(\"fpmm\", {}).get(\"id\")\n", + " grouped_results[fpmm_id].append(trade)\n", "\n", - "def fetch_all_delivers(api_url: str, timestamp_start: int, timestamp_end: int):\n", - " \"\"\"fetch_all_delivers fetches all delivers from the subgraph within the specified timestamp range.\"\"\"\n", - " transport = RequestsHTTPTransport(url=api_url)\n", - " client = Client(transport=transport, fetch_schema_from_transport=True)\n", + " id_gt = user_trades[len(user_trades) - 1][\"id\"]\n", "\n", - " # GraphQL query with placeholders for variables\n", - " query = gql(\"\"\"\n", - " query MyQuery($current_timestamp: BigInt!) {\n", - " delivers(\n", - " orderBy: blockTimestamp, \n", - " where: {blockTimestamp_gt: $current_timestamp}, \n", - " first: 1000\n", - " ) {\n", - " blockNumber\n", - " blockTimestamp\n", - " id\n", - " ipfsHash\n", - " requestId\n", - " sender\n", - " transactionHash\n", - " }\n", + " all_results = {\n", + " \"data\": {\n", + " \"fpmmTrades\": [\n", + " trade\n", + " for trades_list in grouped_results.values()\n", + " for trade in trades_list\n", + " ]\n", " }\n", - " \"\"\")\n", + " }\n", + "\n", + " return all_results\n", "\n", - " all_delivers = []\n", - " current_timestamp = int(timestamp_start)\n", "\n", + "def _query_conditional_tokens_gc_subgraph(creator: str) -> dict[str, Any]:\n", + " \"\"\"Query the subgraph.\"\"\"\n", + " url = \"https://api.thegraph.com/subgraphs/name/gnosis/conditional-tokens-gc\"\n", + "\n", + " all_results: dict[str, Any] = {\"data\": {\"user\": {\"userPositions\": []}}}\n", + " userPositions_id_gt = \"\"\n", " while True:\n", - " # Variables for the query\n", - " variables = {'current_timestamp': current_timestamp}\n", + " query = conditional_tokens_gc_user_query.substitute(\n", + " id=creator.lower(),\n", + " first=QUERY_BATCH_SIZE,\n", + " userPositions_id_gt=userPositions_id_gt,\n", + " )\n", + " content_json = {\"query\": query}\n", + " res = requests.post(url, headers=headers, json=content_json)\n", + " result_json = res.json()\n", + " user_data = result_json.get(\"data\", {}).get(\"user\", {})\n", + "\n", + " if not user_data:\n", + " break\n", "\n", - " # Execute the query with the specified variables\n", - " result = client.execute(query, variable_values=variables)\n", - " delivers = result['delivers']\n", + " user_positions = user_data.get(\"userPositions\", [])\n", "\n", - " # If no more data is retrieved, or the last item's timestamp reaches the end timestamp, break the loop\n", - " if not delivers or int(delivers[-1]['blockTimestamp']) >= timestamp_end:\n", + " if user_positions:\n", + " all_results[\"data\"][\"user\"][\"userPositions\"].extend(user_positions)\n", + " userPositions_id_gt = user_positions[len(user_positions) - 1][\"id\"]\n", + " else:\n", " break\n", "\n", - " # Extend the result list\n", - " all_delivers.extend(delivers)\n", + " if len(all_results[\"data\"][\"user\"][\"userPositions\"]) == 0:\n", + " return {\"data\": {\"user\": None}}\n", "\n", - " # Update the current_timestamp to the last item's timestamp to fetch the next batch\n", - " current_timestamp = int(delivers[-1]['blockTimestamp'])\n", - " print(f'Fetched {len(all_delivers)} delivers')\n", - " print(f'Last timestamp: {datetime.fromtimestamp(current_timestamp)}')\n", + " return all_results\n", "\n", - " return all_delivers" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Fetched 1000 requests\n", - "Last timestamp: 2024-01-03 09:40:15\n", - "Fetched 2000 requests\n", - "Last timestamp: 2024-01-04 19:23:30\n", - "Fetched 3000 requests\n", - "Last timestamp: 2024-01-06 04:07:45\n", - "Fetched 4000 requests\n", - "Last timestamp: 2024-01-07 05:26:15\n", - "Fetched 5000 requests\n", - "Last timestamp: 2024-01-09 02:33:05\n", - "Fetched 6000 requests\n", - "Last timestamp: 2024-01-09 12:46:10\n", - "Fetched 7000 requests\n", - "Last timestamp: 2024-01-10 16:11:40\n", - "Fetched 8000 requests\n", - "Last timestamp: 2024-01-11 09:37:00\n", - "Fetched 9000 requests\n", - "Last timestamp: 2024-01-12 19:22:15\n", - "Fetched 10000 requests\n", - "Last timestamp: 2024-01-13 05:06:15\n", - "Fetched 11000 requests\n", - "Last timestamp: 2024-01-15 17:16:40\n", - "Fetched 12000 requests\n", - "Last timestamp: 2024-01-16 17:55:30\n", - "Fetched 13000 requests\n", - "Last timestamp: 2024-01-17 19:18:20\n", - "Fetched 14000 requests\n", - "Last timestamp: 2024-01-18 10:35:25\n", - "Fetched 15000 requests\n", - "Last timestamp: 2024-01-19 08:08:00\n", - "Fetched 16000 requests\n", - "Last timestamp: 2024-01-19 22:53:25\n", - "Fetched 17000 requests\n", - "Last timestamp: 2024-01-22 20:06:15\n", - "Fetched 18000 requests\n", - "Last timestamp: 2024-01-23 13:06:30\n", - "Fetched 19000 requests\n", - "Last timestamp: 2024-01-24 10:54:25\n", - "Fetched 20000 requests\n", - "Last timestamp: 2024-01-25 19:42:10\n", - "Fetched 21000 requests\n", - "Last timestamp: 2024-01-26 17:49:45\n", - "Fetched 22000 requests\n", - "Last timestamp: 2024-01-29 21:11:50\n", - "Fetched 23000 requests\n", - "Last timestamp: 2024-01-31 02:07:35\n", - "Fetched 24000 requests\n", - "Last timestamp: 2024-01-31 22:43:05\n", - "Fetched 25000 requests\n", - "Last timestamp: 2024-02-02 18:11:30\n", - "Fetched 26000 requests\n", - "Last timestamp: 2024-02-04 00:11:15\n", - "Fetched 27000 requests\n", - "Last timestamp: 2024-02-06 02:06:55\n", - "Fetched 28000 requests\n", - "Last timestamp: 2024-02-07 13:55:55\n", - "Fetched 29000 requests\n", - "Last timestamp: 2024-02-08 18:34:50\n", - "Fetched 30000 requests\n", - "Last timestamp: 2024-02-09 10:49:55\n", - "Fetched 31000 requests\n", - "Last timestamp: 2024-02-10 19:56:20\n", - "Fetched 32000 requests\n", - "Last timestamp: 2024-02-12 22:31:00\n", - "Fetched 33000 requests\n", - "Last timestamp: 2024-02-13 23:20:25\n", - "Fetched 34000 requests\n", - "Last timestamp: 2024-02-14 20:30:45\n", - "Fetched 35000 requests\n", - "Last timestamp: 2024-02-15 23:46:55\n", - "Fetched 36000 requests\n", - "Last timestamp: 2024-02-16 17:57:20\n", - "Fetched 37000 requests\n", - "Last timestamp: 2024-02-17 23:20:35\n", - "Fetched 38000 requests\n", - "Last timestamp: 2024-02-18 20:59:30\n", - "Fetched 39000 requests\n", - "Last timestamp: 2024-02-20 03:51:25\n", - "Fetched 40000 requests\n", - "Last timestamp: 2024-02-20 20:19:10\n", - "Fetched 41000 requests\n", - "Last timestamp: 2024-02-21 04:49:15\n", - "Fetched 42000 requests\n", - "Last timestamp: 2024-02-22 03:23:50\n", - "Fetched 43000 requests\n", - "Last timestamp: 2024-02-22 23:13:45\n", - "Fetched 44000 requests\n", - "Last timestamp: 2024-02-23 23:49:15\n", - "Fetched 45000 requests\n", - "Last timestamp: 2024-02-24 23:17:20\n", - "Fetched 46000 requests\n", - "Last timestamp: 2024-02-26 05:33:05\n", - "Fetched 47000 requests\n", - "Last timestamp: 2024-02-27 07:29:20\n", - "Fetched 48000 requests\n", - "Last timestamp: 2024-02-27 22:57:10\n", - "Fetched 49000 requests\n", - "Last timestamp: 2024-02-28 19:24:50\n", - "Fetched 50000 requests\n", - "Last timestamp: 2024-02-29 19:53:40\n", - "Fetched 51000 requests\n", - "Last timestamp: 2024-03-01 22:56:25\n", - "Fetched 52000 requests\n", - "Last timestamp: 2024-03-03 22:37:40\n", - "Fetched 53000 requests\n", - "Last timestamp: 2024-03-05 03:52:20\n", - "Fetched 54000 requests\n", - "Last timestamp: 2024-03-05 18:45:10\n", - "Fetched 55000 requests\n", - "Last timestamp: 2024-03-06 05:41:10\n", - "Fetched 56000 requests\n", - "Last timestamp: 2024-03-07 02:21:25\n", - "Fetched 57000 requests\n", - "Last timestamp: 2024-03-07 22:44:05\n", - "Fetched 58000 requests\n", - "Last timestamp: 2024-03-08 14:16:45\n", - "Fetched 59000 requests\n", - "Last timestamp: 2024-03-09 05:21:45\n", - "Fetched 60000 requests\n", - "Last timestamp: 2024-03-10 05:48:15\n", - "Fetched 61000 requests\n", - "Last timestamp: 2024-03-11 05:34:00\n", - "Fetched 62000 requests\n", - "Last timestamp: 2024-03-12 03:42:50\n", - "Fetched 63000 requests\n", - "Last timestamp: 2024-03-12 14:15:00\n", - "Fetched 64000 requests\n", - "Last timestamp: 2024-03-12 23:25:10\n", - "Fetched 65000 requests\n", - "Last timestamp: 2024-03-13 08:27:05\n", - "Fetched 66000 requests\n", - "Last timestamp: 2024-03-14 04:28:35\n", - "Fetched 67000 requests\n", - "Last timestamp: 2024-03-14 17:29:30\n", - "Fetched 68000 requests\n", - "Last timestamp: 2024-03-15 04:57:25\n", - "Fetched 69000 requests\n", - "Last timestamp: 2024-03-16 02:32:15\n", - "Fetched 70000 requests\n", - "Last timestamp: 2024-03-16 17:01:10\n", - "Fetched 71000 requests\n", - "Last timestamp: 2024-03-17 08:18:35\n", - "Fetched 72000 requests\n", - "Last timestamp: 2024-03-18 23:50:45\n", - "Fetched 73000 requests\n", - "Last timestamp: 2024-03-19 04:08:15\n", - "Fetched 74000 requests\n", - "Last timestamp: 2024-03-19 19:45:00\n", - "Fetched 75000 requests\n", - "Last timestamp: 2024-03-20 05:07:00\n", - "Fetched 76000 requests\n", - "Last timestamp: 2024-03-20 18:38:40\n", - "Fetched 77000 requests\n", - "Last timestamp: 2024-03-21 06:05:10\n", - "Fetched 78000 requests\n", - "Last timestamp: 2024-03-21 16:42:40\n", - "Fetched 79000 requests\n", - "Last timestamp: 2024-03-22 01:33:50\n", - "Fetched 80000 requests\n", - "Last timestamp: 2024-03-22 16:58:40\n", - "Fetched 81000 requests\n", - "Last timestamp: 2024-03-23 02:01:20\n", - "Fetched 82000 requests\n", - "Last timestamp: 2024-03-23 07:25:45\n", - "Fetched 83000 requests\n", - "Last timestamp: 2024-03-23 20:50:40\n", - "Fetched 84000 requests\n", - "Last timestamp: 2024-03-24 06:39:00\n", - "Fetched 85000 requests\n", - "Last timestamp: 2024-03-25 19:22:10\n", - "Fetched 86000 requests\n", - "Last timestamp: 2024-03-26 01:51:05\n", - "Fetched 87000 requests\n", - "Last timestamp: 2024-03-26 06:34:50\n", - "Fetched 88000 requests\n", - "Last timestamp: 2024-03-26 17:36:15\n", - "Fetched 89000 requests\n", - "Last timestamp: 2024-03-27 04:04:10\n", - "Fetched 90000 requests\n", - "Last timestamp: 2024-03-27 16:48:45\n", - "Fetched 91000 requests\n", - "Last timestamp: 2024-03-27 22:12:15\n", - "Fetched 92000 requests\n", - "Last timestamp: 2024-03-28 01:40:40\n", - "Fetched 93000 requests\n", - "Last timestamp: 2024-03-28 07:13:25\n", - "Fetched 94000 requests\n", - "Last timestamp: 2024-03-28 10:55:20\n", - "Fetched 95000 requests\n", - "Last timestamp: 2024-03-28 13:29:55\n", - "Fetched 96000 requests\n", - "Last timestamp: 2024-03-28 17:19:20\n", - "Fetched 97000 requests\n", - "Last timestamp: 2024-03-28 20:39:05\n", - "Fetched 98000 requests\n", - "Last timestamp: 2024-03-29 00:06:00\n", - "Fetched 99000 requests\n", - "Last timestamp: 2024-03-29 04:13:15\n", - "Fetched 100000 requests\n", - "Last timestamp: 2024-03-29 07:57:05\n", - "Fetched 101000 requests\n", - "Last timestamp: 2024-03-29 12:28:15\n", - "Fetched 102000 requests\n", - "Last timestamp: 2024-03-29 15:36:05\n", - "Fetched 103000 requests\n", - "Last timestamp: 2024-03-29 18:52:45\n", - "Fetched 104000 requests\n", - "Last timestamp: 2024-03-29 21:56:20\n", - "Fetched 105000 requests\n", - "Last timestamp: 2024-03-30 00:10:55\n", - "Fetched 106000 requests\n", - "Last timestamp: 2024-03-30 03:00:40\n", - "Fetched 107000 requests\n", - "Last timestamp: 2024-03-30 04:51:35\n", - "Fetched 108000 requests\n", - "Last timestamp: 2024-03-30 08:32:05\n", - "Fetched 109000 requests\n", - "Last timestamp: 2024-03-30 11:51:45\n", - "Fetched 110000 requests\n", - "Last timestamp: 2024-03-30 15:41:00\n", - "Fetched 111000 requests\n", - "Last timestamp: 2024-03-30 20:33:40\n", - "Fetched 112000 requests\n", - "Last timestamp: 2024-03-31 00:37:35\n", - "Fetched 113000 requests\n", - "Last timestamp: 2024-03-31 03:48:15\n", - "Fetched 114000 requests\n", - "Last timestamp: 2024-03-31 09:10:55\n", - "Fetched 115000 requests\n", - "Last timestamp: 2024-03-31 12:42:20\n", - "Fetched 116000 requests\n", - "Last timestamp: 2024-03-31 18:08:25\n", - "Fetched 117000 requests\n", - "Last timestamp: 2024-03-31 22:25:00\n", - "Fetched 118000 requests\n", - "Last timestamp: 2024-04-01 03:20:35\n", - "Fetched 119000 requests\n", - "Last timestamp: 2024-04-01 07:17:05\n", - "Fetched 120000 requests\n", - "Last timestamp: 2024-04-01 11:30:55\n", - "Fetched 121000 requests\n", - "Last timestamp: 2024-04-01 15:21:10\n", - "Fetched 122000 requests\n", - "Last timestamp: 2024-04-01 22:06:10\n", - "Fetched 123000 requests\n", - "Last timestamp: 2024-04-02 07:35:00\n", - "Fetched 124000 requests\n", - "Last timestamp: 2024-04-02 19:08:00\n", - "Fetched 125000 requests\n", - "Last timestamp: 2024-04-03 02:43:10\n", - "Fetched 126000 requests\n", - "Last timestamp: 2024-04-03 08:27:50\n", - "Fetched 127000 requests\n", - "Last timestamp: 2024-04-03 16:19:40\n", - "Fetched 128000 requests\n", - "Last timestamp: 2024-04-04 05:21:00\n", - "Fetched 129000 requests\n", - "Last timestamp: 2024-04-04 23:35:10\n", - "Fetched 130000 requests\n", - "Last timestamp: 2024-04-05 08:31:05\n", - "Fetched 131000 requests\n", - "Last timestamp: 2024-04-05 19:33:40\n", - "Fetched 132000 requests\n", - "Last timestamp: 2024-04-06 03:35:15\n", - "Fetched 133000 requests\n", - "Last timestamp: 2024-04-06 07:20:30\n", - "Fetched 134000 requests\n", - "Last timestamp: 2024-04-06 12:18:55\n", - "Fetched 135000 requests\n", - "Last timestamp: 2024-04-06 16:04:05\n", - "Fetched 136000 requests\n", - "Last timestamp: 2024-04-06 20:26:15\n", - "Fetched 137000 requests\n", - "Last timestamp: 2024-04-07 00:32:00\n", - "Fetched 138000 requests\n", - "Last timestamp: 2024-04-07 04:39:05\n", - "Fetched 139000 requests\n", - "Last timestamp: 2024-04-07 09:44:15\n", - "Fetched 140000 requests\n", - "Last timestamp: 2024-04-07 16:07:05\n", - "Fetched 141000 requests\n", - "Last timestamp: 2024-04-08 15:41:45\n", - "Fetched 142000 requests\n", - "Last timestamp: 2024-04-08 19:36:45\n", - "Fetched 143000 requests\n", - "Last timestamp: 2024-04-08 23:01:35\n", - "Fetched 144000 requests\n", - "Last timestamp: 2024-04-09 01:35:10\n", - "Fetched 145000 requests\n", - "Last timestamp: 2024-04-09 03:23:00\n", - "Fetched 146000 requests\n", - "Last timestamp: 2024-04-09 05:08:15\n", - "Fetched 147000 requests\n", - "Last timestamp: 2024-04-09 07:00:30\n", - "Fetched 148000 requests\n", - "Last timestamp: 2024-04-09 08:51:20\n", - "Fetched 149000 requests\n", - "Last timestamp: 2024-04-09 10:53:10\n", - "Fetched 150000 requests\n", - "Last timestamp: 2024-04-09 13:05:05\n", - "Fetched 151000 requests\n", - "Last timestamp: 2024-04-09 15:54:05\n", - "Fetched 152000 requests\n", - "Last timestamp: 2024-04-09 20:27:50\n", - "Fetched 153000 requests\n", - "Last timestamp: 2024-04-10 01:53:05\n", - "Fetched 154000 requests\n", - "Last timestamp: 2024-04-10 06:31:00\n", - "Fetched 155000 requests\n", - "Last timestamp: 2024-04-10 13:03:35\n", - "Fetched 156000 requests\n", - "Last timestamp: 2024-04-11 00:06:55\n", - "Fetched 157000 requests\n", - "Last timestamp: 2024-04-11 06:07:55\n", - "Fetched 158000 requests\n", - "Last timestamp: 2024-04-11 17:46:45\n", - "Fetched 159000 requests\n", - "Last timestamp: 2024-04-12 02:18:10\n", - "Fetched 160000 requests\n", - "Last timestamp: 2024-04-12 09:47:50\n", - "Fetched 161000 requests\n", - "Last timestamp: 2024-04-12 22:05:55\n", - "Fetched 162000 requests\n", - "Last timestamp: 2024-04-13 17:17:40\n", - "Fetched 163000 requests\n", - "Last timestamp: 2024-04-14 11:01:00\n", - "Fetched 164000 requests\n", - "Last timestamp: 2024-04-15 07:10:50\n", - "Fetched 165000 requests\n", - "Last timestamp: 2024-04-15 22:15:55\n", - "Fetched 166000 requests\n", - "Last timestamp: 2024-04-16 07:05:00\n", - "Fetched 167000 requests\n", - "Last timestamp: 2024-04-16 18:23:15\n", - "Fetched 168000 requests\n", - "Last timestamp: 2024-04-17 02:09:40\n", - "Fetched 169000 requests\n", - "Last timestamp: 2024-04-17 15:57:50\n", - "Fetched 170000 requests\n", - "Last timestamp: 2024-04-18 00:33:30\n", - "Fetched 171000 requests\n", - "Last timestamp: 2024-04-18 06:33:35\n", - "Fetched 172000 requests\n", - "Last timestamp: 2024-04-19 00:06:50\n", - "Fetched 173000 requests\n", - "Last timestamp: 2024-04-20 08:52:55\n", - "Fetched 174000 requests\n", - "Last timestamp: 2024-04-21 08:48:20\n", - "Fetched 175000 requests\n", - "Last timestamp: 2024-04-21 18:18:30\n", - "Fetched 176000 requests\n", - "Last timestamp: 2024-04-22 00:17:50\n", - "Fetched 177000 requests\n", - "Last timestamp: 2024-04-22 06:06:35\n", - "Fetched 178000 requests\n", - "Last timestamp: 2024-04-22 19:02:00\n", - "Fetched 179000 requests\n", - "Last timestamp: 2024-04-23 04:19:55\n", - "Fetched 180000 requests\n", - "Last timestamp: 2024-04-23 11:50:45\n", - "Fetched 181000 requests\n", - "Last timestamp: 2024-04-23 19:44:00\n", - "Fetched 182000 requests\n", - "Last timestamp: 2024-04-24 03:40:30\n", - "Fetched 183000 requests\n", - "Last timestamp: 2024-04-24 11:26:45\n", - "Fetched 184000 requests\n", - "Last timestamp: 2024-04-24 18:26:40\n", - "Fetched 185000 requests\n", - "Last timestamp: 2024-04-25 00:24:05\n", - "Fetched 186000 requests\n", - "Last timestamp: 2024-04-25 07:08:50\n", - "Fetched 187000 requests\n", - "Last timestamp: 2024-04-25 13:42:55\n", - "Fetched 188000 requests\n", - "Last timestamp: 2024-04-25 20:24:10\n", - "Fetched 189000 requests\n", - "Last timestamp: 2024-04-26 03:00:30\n", - "Fetched 190000 requests\n", - "Last timestamp: 2024-04-26 11:40:20\n", - "Fetched 191000 requests\n", - "Last timestamp: 2024-04-26 18:44:20\n", - "Fetched 192000 requests\n", - "Last timestamp: 2024-04-27 00:59:45\n", - "Fetched 193000 requests\n", - "Last timestamp: 2024-04-27 07:07:10\n", - "Fetched 194000 requests\n", - "Last timestamp: 2024-04-27 13:15:15\n", - "Fetched 195000 requests\n", - "Last timestamp: 2024-04-28 00:33:35\n", - "Fetched 196000 requests\n", - "Last timestamp: 2024-04-29 18:10:40\n" - ] - } - ], - "source": [ - "api_url = \"https://api.studio.thegraph.com/query/57238/mech/version/latest\"\n", - "timestamp_start = int(datetime(2024, 1, 1).timestamp()) # Start timestamp\n", - "timestamp_end = int(datetime(2024, 4, 30).timestamp()) # End timestamp\n", - "requests_data = fetch_all_requests(api_url, timestamp_start, timestamp_end)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Fetched 1000 delivers\n", - "Last timestamp: 2024-01-03 09:41:05\n", - "Fetched 2000 delivers\n", - "Last timestamp: 2024-01-04 19:24:45\n", - "Fetched 3000 delivers\n", - "Last timestamp: 2024-01-06 04:10:20\n", - "Fetched 4000 delivers\n", - "Last timestamp: 2024-01-07 05:29:00\n", - "Fetched 5000 delivers\n", - "Last timestamp: 2024-01-09 02:35:55\n", - "Fetched 6000 delivers\n", - "Last timestamp: 2024-01-09 12:55:30\n", - "Fetched 7000 delivers\n", - "Last timestamp: 2024-01-10 16:30:30\n", - "Fetched 8000 delivers\n", - "Last timestamp: 2024-01-11 09:55:30\n", - "Fetched 9000 delivers\n", - "Last timestamp: 2024-01-12 19:40:45\n", - "Fetched 10000 delivers\n", - "Last timestamp: 2024-01-13 05:22:30\n", - "Fetched 11000 delivers\n", - "Last timestamp: 2024-01-15 17:55:25\n", - "Fetched 12000 delivers\n", - "Last timestamp: 2024-01-16 18:34:50\n", - "Fetched 13000 delivers\n", - "Last timestamp: 2024-01-17 20:28:45\n", - "Fetched 14000 delivers\n", - "Last timestamp: 2024-01-18 17:49:20\n", - "Fetched 15000 delivers\n", - "Last timestamp: 2024-01-19 10:48:05\n", - "Fetched 16000 delivers\n", - "Last timestamp: 2024-01-19 23:44:35\n", - "Fetched 17000 delivers\n", - "Last timestamp: 2024-01-22 20:27:10\n", - "Fetched 18000 delivers\n", - "Last timestamp: 2024-01-23 14:05:45\n", - "Fetched 19000 delivers\n", - "Last timestamp: 2024-01-24 16:25:45\n", - "Fetched 20000 delivers\n", - "Last timestamp: 2024-01-25 20:17:50\n", - "Fetched 21000 delivers\n", - "Last timestamp: 2024-01-26 19:44:00\n", - "Fetched 22000 delivers\n", - "Last timestamp: 2024-01-30 00:23:25\n", - "Fetched 23000 delivers\n", - "Last timestamp: 2024-01-31 03:13:00\n", - "Fetched 24000 delivers\n", - "Last timestamp: 2024-02-01 02:33:15\n", - "Fetched 25000 delivers\n", - "Last timestamp: 2024-02-02 17:52:25\n", - "Fetched 26000 delivers\n", - "Last timestamp: 2024-02-03 23:16:25\n", - "Fetched 27000 delivers\n", - "Last timestamp: 2024-02-06 00:17:25\n", - "Fetched 28000 delivers\n", - "Last timestamp: 2024-02-07 00:51:30\n", - "Fetched 29000 delivers\n", - "Last timestamp: 2024-02-08 02:10:00\n", - "Fetched 30000 delivers\n", - "Last timestamp: 2024-02-09 03:46:25\n", - "Fetched 31000 delivers\n", - "Last timestamp: 2024-02-10 09:17:15\n", - "Fetched 32000 delivers\n", - "Last timestamp: 2024-02-12 18:25:25\n", - "Fetched 33000 delivers\n", - "Last timestamp: 2024-02-13 19:38:50\n", - "Fetched 34000 delivers\n", - "Last timestamp: 2024-02-14 17:51:05\n", - "Fetched 35000 delivers\n", - "Last timestamp: 2024-02-15 21:00:35\n", - "Fetched 36000 delivers\n", - "Last timestamp: 2024-02-16 06:11:40\n", - "Fetched 37000 delivers\n", - "Last timestamp: 2024-02-17 03:58:30\n", - "Fetched 38000 delivers\n", - "Last timestamp: 2024-02-18 07:48:20\n", - "Fetched 39000 delivers\n", - "Last timestamp: 2024-02-19 21:27:35\n", - "Fetched 40000 delivers\n", - "Last timestamp: 2024-02-20 14:26:00\n", - "Fetched 41000 delivers\n", - "Last timestamp: 2024-02-20 23:39:20\n", - "Fetched 42000 delivers\n", - "Last timestamp: 2024-02-21 22:36:30\n", - "Fetched 43000 delivers\n", - "Last timestamp: 2024-02-22 15:12:10\n", - "Fetched 44000 delivers\n", - "Last timestamp: 2024-02-23 07:21:50\n", - "Fetched 45000 delivers\n", - "Last timestamp: 2024-02-24 15:06:15\n", - "Fetched 46000 delivers\n", - "Last timestamp: 2024-02-25 10:33:50\n", - "Fetched 47000 delivers\n", - "Last timestamp: 2024-02-26 20:17:00\n", - "Fetched 48000 delivers\n", - "Last timestamp: 2024-02-27 17:54:45\n", - "Fetched 49000 delivers\n", - "Last timestamp: 2024-02-28 10:53:20\n", - "Fetched 50000 delivers\n", - "Last timestamp: 2024-02-29 04:45:20\n", - "Fetched 51000 delivers\n", - "Last timestamp: 2024-03-01 18:26:45\n", - "Fetched 52000 delivers\n", - "Last timestamp: 2024-03-02 19:54:05\n", - "Fetched 53000 delivers\n", - "Last timestamp: 2024-03-05 00:10:00\n", - "Fetched 54000 delivers\n", - "Last timestamp: 2024-03-05 08:51:15\n", - "Fetched 55000 delivers\n", - "Last timestamp: 2024-03-06 01:23:10\n", - "Fetched 56000 delivers\n", - "Last timestamp: 2024-03-06 22:43:40\n", - "Fetched 57000 delivers\n", - "Last timestamp: 2024-03-07 12:03:00\n", - "Fetched 58000 delivers\n", - "Last timestamp: 2024-03-08 02:57:25\n", - "Fetched 59000 delivers\n", - "Last timestamp: 2024-03-09 03:08:20\n", - "Fetched 60000 delivers\n", - "Last timestamp: 2024-03-10 00:04:20\n", - "Fetched 61000 delivers\n", - "Last timestamp: 2024-03-11 01:14:35\n", - "Fetched 62000 delivers\n", - "Last timestamp: 2024-03-11 21:48:20\n", - "Fetched 63000 delivers\n", - "Last timestamp: 2024-03-12 08:43:00\n", - "Fetched 64000 delivers\n", - "Last timestamp: 2024-03-12 21:14:40\n", - "Fetched 65000 delivers\n", - "Last timestamp: 2024-03-13 03:39:40\n", - "Fetched 66000 delivers\n", - "Last timestamp: 2024-03-13 21:05:30\n", - "Fetched 67000 delivers\n", - "Last timestamp: 2024-03-14 11:24:15\n", - "Fetched 68000 delivers\n", - "Last timestamp: 2024-03-15 01:12:40\n", - "Fetched 69000 delivers\n", - "Last timestamp: 2024-03-15 22:56:10\n", - "Fetched 70000 delivers\n", - "Last timestamp: 2024-03-16 08:53:10\n", - "Fetched 71000 delivers\n", - "Last timestamp: 2024-03-17 03:14:50\n", - "Fetched 72000 delivers\n", - "Last timestamp: 2024-03-18 17:17:30\n", - "Fetched 73000 delivers\n", - "Last timestamp: 2024-03-19 02:34:05\n", - "Fetched 74000 delivers\n", - "Last timestamp: 2024-03-19 09:33:45\n", - "Fetched 75000 delivers\n", - "Last timestamp: 2024-03-20 01:28:25\n", - "Fetched 76000 delivers\n", - "Last timestamp: 2024-03-20 11:51:45\n", - "Fetched 77000 delivers\n", - "Last timestamp: 2024-03-21 03:37:25\n", - "Fetched 78000 delivers\n", - "Last timestamp: 2024-03-21 11:40:25\n", - "Fetched 79000 delivers\n", - "Last timestamp: 2024-03-21 22:45:45\n", - "Fetched 80000 delivers\n", - "Last timestamp: 2024-03-22 04:36:50\n", - "Fetched 81000 delivers\n", - "Last timestamp: 2024-03-22 23:14:15\n", - "Fetched 82000 delivers\n", - "Last timestamp: 2024-03-23 05:07:15\n", - "Fetched 83000 delivers\n", - "Last timestamp: 2024-03-23 19:02:30\n", - "Fetched 84000 delivers\n", - "Last timestamp: 2024-03-24 01:00:05\n", - "Fetched 85000 delivers\n", - "Last timestamp: 2024-03-25 05:51:00\n", - "Fetched 86000 delivers\n", - "Last timestamp: 2024-03-25 23:38:05\n", - "Fetched 87000 delivers\n", - "Last timestamp: 2024-03-26 04:44:15\n", - "Fetched 88000 delivers\n", - "Last timestamp: 2024-03-26 09:58:55\n", - "Fetched 89000 delivers\n", - "Last timestamp: 2024-03-27 02:14:10\n", - "Fetched 90000 delivers\n", - "Last timestamp: 2024-03-27 07:57:00\n", - "Fetched 91000 delivers\n", - "Last timestamp: 2024-03-27 20:56:10\n", - "Fetched 92000 delivers\n", - "Last timestamp: 2024-03-28 00:11:05\n", - "Fetched 93000 delivers\n", - "Last timestamp: 2024-03-28 05:59:50\n", - "Fetched 94000 delivers\n", - "Last timestamp: 2024-03-28 10:11:15\n", - "Fetched 95000 delivers\n", - "Last timestamp: 2024-03-28 12:21:20\n", - "Fetched 96000 delivers\n", - "Last timestamp: 2024-03-28 15:58:45\n", - "Fetched 97000 delivers\n", - "Last timestamp: 2024-03-28 19:38:45\n", - "Fetched 98000 delivers\n", - "Last timestamp: 2024-03-28 23:17:30\n", - "Fetched 99000 delivers\n", - "Last timestamp: 2024-03-29 03:10:10\n", - "Fetched 100000 delivers\n", - "Last timestamp: 2024-03-29 06:02:30\n", - "Fetched 101000 delivers\n", - "Last timestamp: 2024-03-29 11:17:40\n", - "Fetched 102000 delivers\n", - "Last timestamp: 2024-03-29 14:39:25\n", - "Fetched 103000 delivers\n", - "Last timestamp: 2024-03-29 17:58:45\n", - "Fetched 104000 delivers\n", - "Last timestamp: 2024-03-29 21:06:25\n", - "Fetched 105000 delivers\n", - "Last timestamp: 2024-03-29 23:31:45\n", - "Fetched 106000 delivers\n", - "Last timestamp: 2024-03-30 02:41:30\n", - "Fetched 107000 delivers\n", - "Last timestamp: 2024-03-30 04:23:10\n", - "Fetched 108000 delivers\n", - "Last timestamp: 2024-03-30 06:51:25\n", - "Fetched 109000 delivers\n", - "Last timestamp: 2024-03-30 11:00:40\n", - "Fetched 110000 delivers\n", - "Last timestamp: 2024-03-30 14:16:00\n", - "Fetched 111000 delivers\n", - "Last timestamp: 2024-03-30 19:57:35\n", - "Fetched 112000 delivers\n", - "Last timestamp: 2024-03-30 23:58:10\n", - "Fetched 113000 delivers\n", - "Last timestamp: 2024-03-31 03:06:30\n", - "Fetched 114000 delivers\n", - "Last timestamp: 2024-03-31 07:57:30\n", - "Fetched 115000 delivers\n", - "Last timestamp: 2024-03-31 11:45:40\n", - "Fetched 116000 delivers\n", - "Last timestamp: 2024-03-31 16:05:20\n", - "Fetched 117000 delivers\n", - "Last timestamp: 2024-03-31 21:13:05\n", - "Fetched 118000 delivers\n", - "Last timestamp: 2024-04-01 02:05:30\n", - "Fetched 119000 delivers\n", - "Last timestamp: 2024-04-01 06:20:15\n", - "Fetched 120000 delivers\n", - "Last timestamp: 2024-04-01 10:30:55\n", - "Fetched 121000 delivers\n", - "Last timestamp: 2024-04-01 14:07:55\n", - "Fetched 122000 delivers\n", - "Last timestamp: 2024-04-01 20:19:45\n", - "Fetched 123000 delivers\n", - "Last timestamp: 2024-04-02 02:59:40\n", - "Fetched 124000 delivers\n", - "Last timestamp: 2024-04-02 16:36:05\n", - "Fetched 125000 delivers\n", - "Last timestamp: 2024-04-03 01:27:20\n", - "Fetched 126000 delivers\n", - "Last timestamp: 2024-04-03 06:33:35\n", - "Fetched 127000 delivers\n", - "Last timestamp: 2024-04-03 12:57:50\n", - "Fetched 128000 delivers\n", - "Last timestamp: 2024-04-04 03:33:15\n", - "Fetched 129000 delivers\n", - "Last timestamp: 2024-04-04 22:07:20\n", - "Fetched 130000 delivers\n", - "Last timestamp: 2024-04-05 05:24:35\n", - "Fetched 131000 delivers\n", - "Last timestamp: 2024-04-05 17:06:05\n", - "Fetched 132000 delivers\n", - "Last timestamp: 2024-04-06 02:38:35\n", - "Fetched 133000 delivers\n", - "Last timestamp: 2024-04-06 06:22:50\n", - "Fetched 134000 delivers\n", - "Last timestamp: 2024-04-06 11:35:15\n", - "Fetched 135000 delivers\n", - "Last timestamp: 2024-04-06 14:54:50\n", - "Fetched 136000 delivers\n", - "Last timestamp: 2024-04-06 19:23:50\n", - "Fetched 137000 delivers\n", - "Last timestamp: 2024-04-06 23:26:45\n", - "Fetched 138000 delivers\n", - "Last timestamp: 2024-04-07 03:39:10\n", - "Fetched 139000 delivers\n", - "Last timestamp: 2024-04-07 08:08:20\n", - "Fetched 140000 delivers\n", - "Last timestamp: 2024-04-07 13:52:25\n", - "Fetched 141000 delivers\n", - "Last timestamp: 2024-04-08 12:37:45\n", - "Fetched 142000 delivers\n", - "Last timestamp: 2024-04-08 18:49:25\n", - "Fetched 143000 delivers\n", - "Last timestamp: 2024-04-08 22:01:35\n", - "Fetched 144000 delivers\n", - "Last timestamp: 2024-04-09 01:11:40\n", - "Fetched 145000 delivers\n", - "Last timestamp: 2024-04-09 02:50:00\n", - "Fetched 146000 delivers\n", - "Last timestamp: 2024-04-09 04:42:55\n", - "Fetched 147000 delivers\n", - "Last timestamp: 2024-04-09 06:36:20\n", - "Fetched 148000 delivers\n", - "Last timestamp: 2024-04-09 08:22:05\n", - "Fetched 149000 delivers\n", - "Last timestamp: 2024-04-09 10:26:30\n", - "Fetched 150000 delivers\n", - "Last timestamp: 2024-04-09 12:33:35\n", - "Fetched 151000 delivers\n", - "Last timestamp: 2024-04-09 15:02:35\n", - "Fetched 152000 delivers\n", - "Last timestamp: 2024-04-09 19:29:05\n", - "Fetched 153000 delivers\n", - "Last timestamp: 2024-04-10 00:53:30\n", - "Fetched 154000 delivers\n", - "Last timestamp: 2024-04-10 05:10:40\n", - "Fetched 155000 delivers\n", - "Last timestamp: 2024-04-10 11:40:25\n", - "Fetched 156000 delivers\n", - "Last timestamp: 2024-04-10 22:34:15\n", - "Fetched 157000 delivers\n", - "Last timestamp: 2024-04-11 04:07:00\n", - "Fetched 158000 delivers\n", - "Last timestamp: 2024-04-11 14:44:25\n", - "Fetched 159000 delivers\n", - "Last timestamp: 2024-04-12 00:18:30\n", - "Fetched 160000 delivers\n", - "Last timestamp: 2024-04-12 07:58:40\n", - "Fetched 161000 delivers\n", - "Last timestamp: 2024-04-12 17:50:10\n", - "Fetched 162000 delivers\n", - "Last timestamp: 2024-04-13 13:35:15\n", - "Fetched 163000 delivers\n", - "Last timestamp: 2024-04-14 07:37:00\n", - "Fetched 164000 delivers\n", - "Last timestamp: 2024-04-15 03:01:40\n", - "Fetched 165000 delivers\n", - "Last timestamp: 2024-04-15 20:23:10\n", - "Fetched 166000 delivers\n", - "Last timestamp: 2024-04-16 05:14:45\n", - "Fetched 167000 delivers\n", - "Last timestamp: 2024-04-16 16:23:55\n", - "Fetched 168000 delivers\n", - "Last timestamp: 2024-04-17 00:49:05\n", - "Fetched 169000 delivers\n", - "Last timestamp: 2024-04-17 12:39:30\n", - "Fetched 170000 delivers\n", - "Last timestamp: 2024-04-17 23:28:10\n", - "Fetched 171000 delivers\n", - "Last timestamp: 2024-04-18 04:54:50\n", - "Fetched 172000 delivers\n", - "Last timestamp: 2024-04-18 23:22:15\n", - "Fetched 173000 delivers\n", - "Last timestamp: 2024-04-20 07:20:55\n", - "Fetched 174000 delivers\n", - "Last timestamp: 2024-04-21 08:10:10\n", - "Fetched 175000 delivers\n", - "Last timestamp: 2024-04-21 13:24:50\n", - "Fetched 176000 delivers\n", - "Last timestamp: 2024-04-21 23:19:55\n", - "Fetched 177000 delivers\n", - "Last timestamp: 2024-04-22 05:25:25\n", - "Fetched 178000 delivers\n", - "Last timestamp: 2024-04-22 17:34:45\n", - "Fetched 179000 delivers\n", - "Last timestamp: 2024-04-23 03:11:40\n", - "Fetched 180000 delivers\n", - "Last timestamp: 2024-04-23 10:45:40\n", - "Fetched 181000 delivers\n", - "Last timestamp: 2024-04-23 18:36:25\n", - "Fetched 182000 delivers\n", - "Last timestamp: 2024-04-24 02:41:40\n", - "Fetched 183000 delivers\n", - "Last timestamp: 2024-04-24 10:25:35\n", - "Fetched 184000 delivers\n", - "Last timestamp: 2024-04-24 17:46:25\n", - "Fetched 185000 delivers\n", - "Last timestamp: 2024-04-24 23:41:25\n", - "Fetched 186000 delivers\n", - "Last timestamp: 2024-04-25 06:17:30\n", - "Fetched 187000 delivers\n", - "Last timestamp: 2024-04-25 12:54:10\n", - "Fetched 188000 delivers\n", - "Last timestamp: 2024-04-25 19:31:10\n", - "Fetched 189000 delivers\n", - "Last timestamp: 2024-04-26 02:09:45\n", - "Fetched 190000 delivers\n", - "Last timestamp: 2024-04-26 10:39:35\n", - "Fetched 191000 delivers\n", - "Last timestamp: 2024-04-26 18:04:55\n", - "Fetched 192000 delivers\n", - "Last timestamp: 2024-04-27 00:26:50\n", - "Fetched 193000 delivers\n", - "Last timestamp: 2024-04-27 06:17:45\n", - "Fetched 194000 delivers\n", - "Last timestamp: 2024-04-27 12:29:15\n", - "Fetched 195000 delivers\n", - "Last timestamp: 2024-04-27 23:27:25\n", - "Fetched 196000 delivers\n", - "Last timestamp: 2024-04-29 14:07:35\n" - ] - } - ], - "source": [ - "api_url = \"https://api.studio.thegraph.com/query/57238/mech/version/latest\"\n", - "timestamp_start = int(datetime(2024, 1, 1).timestamp()) # Start timestamp\n", - "timestamp_end = int(datetime(2024, 4, 30).timestamp()) # End timestamp\n", - "delivers_data = fetch_all_delivers(api_url, timestamp_start, timestamp_end)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Get requests content from ipfs" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [], - "source": [ - "requests_df = pd.DataFrame(requests_data)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [], - "source": [ - "N_IPFS_RETRIES = 2\n", - "BACKOFF_FACTOR = 0.5\n", - "STATUS_FORCELIST = [404, 500, 502, 503, 504]\n", - "HTTP_TIMEOUT = 10\n", - "IPFS_ADDRESS = \"https://gateway.autonolas.tech/ipfs/\"\n", - "IPFS_REQUEST_LINK = IPFS_ADDRESS\n", - "IRRELEVANT_TOOLS = [\n", - " \"openai-text-davinci-002\",\n", - " \"openai-text-davinci-003\",\n", - " \"openai-gpt-3.5-turbo\",\n", - " \"openai-gpt-4\",\n", - " \"stabilityai-stable-diffusion-v1-5\",\n", - " \"stabilityai-stable-diffusion-xl-beta-v2-2-2\",\n", - " \"stabilityai-stable-diffusion-512-v2-1\",\n", - " \"stabilityai-stable-diffusion-768-v2-1\",\n", - " \"deepmind-optimization-strong\",\n", - " \"deepmind-optimization\",\n", - "]" + "\n", + "def convert_hex_to_int(x: Union[str, float]) -> Union[int, float]:\n", + " \"\"\"Convert hex to int\"\"\"\n", + " if isinstance(x, float):\n", + " return np.nan\n", + " elif isinstance(x, str):\n", + " if x == INVALID_ANSWER_HEX:\n", + " return -1\n", + " else:\n", + " return int(x, 16)\n", + "\n", + "\n", + "def wei_to_unit(wei: int) -> float:\n", + " \"\"\"Converts wei to currency unit.\"\"\"\n", + " return wei / 10**18\n", + "\n", + "\n", + "def _is_redeemed(user_json: dict[str, Any], fpmmTrade: dict[str, Any]) -> bool:\n", + " \"\"\"Returns whether the user has redeemed the position.\"\"\"\n", + " user_positions = user_json[\"data\"][\"user\"][\"userPositions\"]\n", + " outcomes_tokens_traded = int(fpmmTrade[\"outcomeTokensTraded\"])\n", + " condition_id = fpmmTrade[\"fpmm.condition.id\"]\n", + "\n", + " for position in user_positions:\n", + " position_condition_ids = position[\"position\"][\"conditionIds\"]\n", + " balance = int(position[\"balance\"])\n", + "\n", + " if condition_id in position_condition_ids:\n", + " if balance == 0:\n", + " return True\n", + " # return early\n", + " return False\n", + " return False\n" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ - "def get_requests_ipfs_content(ipfs_hash: str) -> Optional[Dict]:\n", - " \"\"\"Get IPFS content from the specified IPFS hash with retries and timeout.\"\"\"\n", - " session = requests.Session()\n", - " session.mount('https://', HTTPAdapter(max_retries=Retry(\n", - " total=N_IPFS_RETRIES,\n", - " backoff_factor=BACKOFF_FACTOR,\n", - " status_forcelist=STATUS_FORCELIST,\n", - " )))\n", - " \n", - " response = session.get(f\"{IPFS_ADDRESS}{ipfs_hash}/metadata.json\", timeout=HTTP_TIMEOUT)\n", - " response.raise_for_status()\n", - "\n", - " return response\n", - "\n", - "\n", - "def get_delivers_ipfs_content(ipfs_hash: str, request_id: str) -> Optional[Dict]:\n", - " \"\"\"Get IPFS content from the specified IPFS hash with retries and timeout.\"\"\"\n", - " session = requests.Session()\n", - " session.mount('https://', HTTPAdapter(max_retries=Retry(\n", - " total=N_IPFS_RETRIES,\n", - " backoff_factor=BACKOFF_FACTOR,\n", - " status_forcelist=STATUS_FORCELIST,\n", - " )))\n", - " \n", - " response = session.get(f\"{IPFS_ADDRESS}{ipfs_hash}/{request_id}\", timeout=HTTP_TIMEOUT)\n", - " response.raise_for_status()\n", - "\n", - " return response" + "def determine_market_status(trade, current_answer):\n", + " \"\"\"Determine the market status of a trade.\"\"\"\n", + " if current_answer is np.nan and time.time() >= int(trade[\"fpmm.openingTimestamp\"]):\n", + " return MarketState.PENDING\n", + " elif current_answer == np.nan:\n", + " return MarketState.OPEN\n", + " elif trade[\"fpmm.isPendingArbitration\"]:\n", + " return MarketState.ARBITRATING\n", + " elif time.time() < int(trade[\"fpmm.answerFinalizedTimestamp\"]):\n", + " return MarketState.FINALIZING\n", + " return MarketState.CLOSED" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - " 7%|▋ | 13417/196000 [31:54<5:29:32, 9.23it/s] " - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Error fetching IPFS content for request 13825813273711797497112452608307201680555393326362213620973836331653161080152: HTTPSConnectionPool(host='gateway.autonolas.tech', port=443): Max retries exceeded with url: /ipfs/f01701220be696918656e5d846e75b2f477308ad6825bbc8bcfb360abd7ef614f2b977c30/metadata.json (Caused by ResponseError('too many 404 error responses'))\n", - "Error fetching IPFS content for request 35727069124499649100424841146789196343122034717560557039716930760771966449491: HTTPSConnectionPool(host='gateway.autonolas.tech', port=443): Max retries exceeded with url: /ipfs/f01701220d13dab39b98df80516e5854c8d88b70c07c2ff07b978243cb6383221fb53c70c/metadata.json (Caused by ResponseError('too many 404 error responses'))\n", - "Error fetching IPFS content for request 75534657934389915301925172407482127992698564142524531848803752672099544538379: HTTPSConnectionPool(host='gateway.autonolas.tech', port=443): Max retries exceeded with url: /ipfs/f0170122008769822edfdbad92a973d755e8386b141656ae5b04c674cf66170671629350e/metadata.json (Caused by ResponseError('too many 404 error responses'))\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " 7%|▋ | 13422/196000 [31:57<8:38:55, 5.86it/s]" + "Analysing creators: 0%| | 0/280 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
blockNumberblockTimestampidipfsHashrequestIdsendertransactionHash
03320927517119008300x9f282c379def8d7be769437b1554d8318b1d6232adac...f017012206d6c3d3bd7b3e18c2fa4d5d6cdbad2d178656...2774586068362718047809601148610339467320512062...0x5e1d1eb61e1164d5a50b28c575da73a29595dff70x9f282c379def8d7be769437b1554d8318b1d6232adac...
13320927517119008300x9f282c379def8d7be769437b1554d8318b1d6232adac...f017012201cb120cfcc3662f31647e83014319da383849...4648168291852200886664195317016503629867351278...0x5e1d1eb61e1164d5a50b28c575da73a29595dff70x9f282c379def8d7be769437b1554d8318b1d6232adac...
23320928617119008850x7bbf2cf856594e299cc93c1ad8a0e1c366309681e6aa...f01701220a12cb811cf1524857b01bc1d06dfa134ee0d7...5380255412671663810616331066528465418384427065...0x5e1d1eb61e1164d5a50b28c575da73a29595dff70x7bbf2cf856594e299cc93c1ad8a0e1c366309681e6aa...
33320928617119008850x7bbf2cf856594e299cc93c1ad8a0e1c366309681e6aa...f01701220731bf503c048fb0c4e7db205a0c43033c9430...1043020795008854655104809099654590706402257795...0x5e1d1eb61e1164d5a50b28c575da73a29595dff70x7bbf2cf856594e299cc93c1ad8a0e1c366309681e6aa...
43320929517119009350x2c1d90947119660d668c3bca624793fdfeb850c6edda...f01701220c1356d75a5f90079427076df82ce3c4b18eda...1093255953140841133742565962133965768653523162...0x5e1d1eb61e1164d5a50b28c575da73a29595dff70x2c1d90947119660d668c3bca624793fdfeb850c6edda...
........................
789953369058117143998050xd927a8704b123424edf33fcdca47652b5efedbe1e1e0...f0170122049584edd38c26fb53e81c11a547124978e1e1...1129226996669490235144877106653011168777108293...0x5e1d1eb61e1164d5a50b28c575da73a29595dff70xd927a8704b123424edf33fcdca47652b5efedbe1e1e0...
789963369059117143998600x9376ea3bbda33e995d7be0c3904dba488078c6223662...f01701220aa26de3ed40c5acc069e3f59f773ac7f1e32e...9716097954897565285908354930850978668067253967...0x5e1d1eb61e1164d5a50b28c575da73a29595dff70x9376ea3bbda33e995d7be0c3904dba488078c6223662...
789973369059117143998600x9376ea3bbda33e995d7be0c3904dba488078c6223662...f01701220f7f5566792d496678ff24c3893ce85e606916...1055784542786161801179068129585805928596451472...0x5e1d1eb61e1164d5a50b28c575da73a29595dff70x9376ea3bbda33e995d7be0c3904dba488078c6223662...
789983369060017143999050x34804c2660a67096a5782f82c55462286872c3530b68...f01701220e3fd6bd96b922e3b6b13bb2910ae207bc9942...2254891903101056121081437842119722904472371887...0x5e1d1eb61e1164d5a50b28c575da73a29595dff70x34804c2660a67096a5782f82c55462286872c3530b68...
789993369060017143999050x34804c2660a67096a5782f82c55462286872c3530b68...f0170122037bfb9fbc1ee13557ad0026e62334c48c66ba...3191618166064479803560987615994088133237774725...0x5e1d1eb61e1164d5a50b28c575da73a29595dff70x34804c2660a67096a5782f82c55462286872c3530b68...
\n", - "

79000 rows × 7 columns

\n", - "" - ], - "text/plain": [ - " blockNumber blockTimestamp \\\n", - "0 33209275 1711900830 \n", - "1 33209275 1711900830 \n", - "2 33209286 1711900885 \n", - "3 33209286 1711900885 \n", - "4 33209295 1711900935 \n", - "... ... ... \n", - "78995 33690581 1714399805 \n", - "78996 33690591 1714399860 \n", - "78997 33690591 1714399860 \n", - "78998 33690600 1714399905 \n", - "78999 33690600 1714399905 \n", - "\n", - " id \\\n", - "0 0x9f282c379def8d7be769437b1554d8318b1d6232adac... \n", - "1 0x9f282c379def8d7be769437b1554d8318b1d6232adac... \n", - "2 0x7bbf2cf856594e299cc93c1ad8a0e1c366309681e6aa... \n", - "3 0x7bbf2cf856594e299cc93c1ad8a0e1c366309681e6aa... \n", - "4 0x2c1d90947119660d668c3bca624793fdfeb850c6edda... \n", - "... ... \n", - "78995 0xd927a8704b123424edf33fcdca47652b5efedbe1e1e0... \n", - "78996 0x9376ea3bbda33e995d7be0c3904dba488078c6223662... \n", - "78997 0x9376ea3bbda33e995d7be0c3904dba488078c6223662... \n", - "78998 0x34804c2660a67096a5782f82c55462286872c3530b68... \n", - "78999 0x34804c2660a67096a5782f82c55462286872c3530b68... \n", - "\n", - " ipfsHash \\\n", - "0 f017012206d6c3d3bd7b3e18c2fa4d5d6cdbad2d178656... \n", - "1 f017012201cb120cfcc3662f31647e83014319da383849... \n", - "2 f01701220a12cb811cf1524857b01bc1d06dfa134ee0d7... \n", - "3 f01701220731bf503c048fb0c4e7db205a0c43033c9430... \n", - "4 f01701220c1356d75a5f90079427076df82ce3c4b18eda... \n", - "... ... \n", - "78995 f0170122049584edd38c26fb53e81c11a547124978e1e1... \n", - "78996 f01701220aa26de3ed40c5acc069e3f59f773ac7f1e32e... \n", - "78997 f01701220f7f5566792d496678ff24c3893ce85e606916... \n", - "78998 f01701220e3fd6bd96b922e3b6b13bb2910ae207bc9942... \n", - "78999 f0170122037bfb9fbc1ee13557ad0026e62334c48c66ba... \n", - "\n", - " requestId \\\n", - "0 2774586068362718047809601148610339467320512062... \n", - "1 4648168291852200886664195317016503629867351278... \n", - "2 5380255412671663810616331066528465418384427065... \n", - "3 1043020795008854655104809099654590706402257795... \n", - "4 1093255953140841133742565962133965768653523162... \n", - "... ... \n", - "78995 1129226996669490235144877106653011168777108293... \n", - "78996 9716097954897565285908354930850978668067253967... \n", - "78997 1055784542786161801179068129585805928596451472... \n", - "78998 2254891903101056121081437842119722904472371887... \n", - "78999 3191618166064479803560987615994088133237774725... \n", - "\n", - " sender \\\n", - "0 0x5e1d1eb61e1164d5a50b28c575da73a29595dff7 \n", - "1 0x5e1d1eb61e1164d5a50b28c575da73a29595dff7 \n", - "2 0x5e1d1eb61e1164d5a50b28c575da73a29595dff7 \n", - "3 0x5e1d1eb61e1164d5a50b28c575da73a29595dff7 \n", - "4 0x5e1d1eb61e1164d5a50b28c575da73a29595dff7 \n", - "... ... \n", - "78995 0x5e1d1eb61e1164d5a50b28c575da73a29595dff7 \n", - "78996 0x5e1d1eb61e1164d5a50b28c575da73a29595dff7 \n", - "78997 0x5e1d1eb61e1164d5a50b28c575da73a29595dff7 \n", - "78998 0x5e1d1eb61e1164d5a50b28c575da73a29595dff7 \n", - "78999 0x5e1d1eb61e1164d5a50b28c575da73a29595dff7 \n", - "\n", - " transactionHash \n", - "0 0x9f282c379def8d7be769437b1554d8318b1d6232adac... \n", - "1 0x9f282c379def8d7be769437b1554d8318b1d6232adac... \n", - "2 0x7bbf2cf856594e299cc93c1ad8a0e1c366309681e6aa... \n", - "3 0x7bbf2cf856594e299cc93c1ad8a0e1c366309681e6aa... \n", - "4 0x2c1d90947119660d668c3bca624793fdfeb850c6edda... \n", - "... ... \n", - "78995 0xd927a8704b123424edf33fcdca47652b5efedbe1e1e0... \n", - "78996 0x9376ea3bbda33e995d7be0c3904dba488078c6223662... \n", - "78997 0x9376ea3bbda33e995d7be0c3904dba488078c6223662... \n", - "78998 0x34804c2660a67096a5782f82c55462286872c3530b68... \n", - "78999 0x34804c2660a67096a5782f82c55462286872c3530b68... \n", - "\n", - "[79000 rows x 7 columns]" - ] - }, - "execution_count": 80, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from concurrent.futures import ThreadPoolExecutor\n", - "from tqdm import tqdm\n", + " # Compute invalidity\n", + " is_invalid = current_answer == INVALID_ANSWER\n", "\n", - "def fetch_and_update_deliver(row):\n", - " try:\n", - " ipfs_hash = row['ipfsHash']\n", - " request_id = row['requestId']\n", - " response = get_delivers_ipfs_content(ipfs_hash, request_id)\n", - " row['prompt_deliver'] = response.json()['prompt']\n", - " row['tool'] = response.json()['tool']\n", - " row['nonce'] = response.json()['nonce']\n", - " return row\n", - " except Exception as e:\n", - " print(f\"Error fetching IPFS content for deliver {row['requestId']}: {e}\")\n", - " return None\n", + " # Compute earnings and winner trade status\n", + " if is_invalid:\n", + " earnings = collateral_amount\n", + " winner_trade = False\n", + " elif trade[\"outcomeIndex\"] == current_answer:\n", + " earnings = outcome_tokens_traded\n", + " winner_trade = True\n", "\n", - "with ThreadPoolExecutor(max_workers=10) as executor:\n", - " results = list(tqdm(executor.map(fetch_and_update_deliver, delivers_df.to_dict('records')), total=delivers_df.shape[0], desc=\"Fetching delivers\"))\n", + " # Compute mech calls\n", + " num_mech_calls = (\n", + " tools_usage[\"prompt_request\"].apply(lambda x: trade[\"title\"] in x).sum()\n", + " )\n", + " net_earnings = (\n", + " earnings\n", + " - fee_amount\n", + " - (num_mech_calls * DEFAULT_MECH_FEE)\n", + " - collateral_amount\n", + " )\n", "\n", - "# Update DataFrame with results\n", - "for result in results:\n", - " if result:\n", - " delivers_df.update(pd.DataFrame([result]))\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### TOOLS CSV" + " # Assign values to DataFrame\n", + " trades_df.loc[i] = {\n", + " \"trader_address\": trader_address,\n", + " \"trade_id\": trade[\"id\"],\n", + " \"market_status\": market_status.name,\n", + " \"creation_timestamp\": creation_timestamp_utc,\n", + " \"title\": trade[\"title\"],\n", + " \"collateral_amount\": collateral_amount,\n", + " \"outcome_index\": trade[\"outcomeIndex\"],\n", + " \"trade_fee_amount\": fee_amount,\n", + " \"outcomes_tokens_traded\": outcome_tokens_traded,\n", + " \"current_answer\": current_answer,\n", + " \"is_invalid\": is_invalid,\n", + " \"winning_trade\": winner_trade,\n", + " \"earnings\": earnings,\n", + " \"redeemed\": redemption,\n", + " \"redeemed_amount\": earnings if redemption else 0,\n", + " \"num_mech_calls\": num_mech_calls,\n", + " \"mech_fee_amount\": num_mech_calls * DEFAULT_MECH_FEE,\n", + " \"net_earnings\": net_earnings,\n", + " \"roi\": net_earnings / (collateral_amount + fee_amount + num_mech_calls * DEFAULT_MECH_FEE),\n", + " }\n", + " except Exception as e:\n", + " print(f\"Error processing trade {i}: {e}\")\n", + " raise e" ] }, { @@ -7022,7 +3364,7 @@ ], "metadata": { "kernelspec": { - "display_name": "autogen", + "display_name": "akash", "language": "python", "name": "python3" }, @@ -7037,8 +3379,7 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.14" - }, - "orig_nbformat": 4 + } }, "nbformat": 4, "nbformat_minor": 2