diff --git a/bancor_research/bancor_simulator/v3/spec/network.py b/bancor_research/bancor_simulator/v3/spec/network.py
index 15e1c193..6445903f 100644
--- a/bancor_research/bancor_simulator/v3/spec/network.py
+++ b/bancor_research/bancor_simulator/v3/spec/network.py
@@ -13,13 +13,17 @@
from bancor_research import DEFAULT, PandasDataFrame, read_price_feeds, pd
-def toDecimal(percent: str):
+def to_decimal(percent: str):
return Decimal(percent[:-1]) / 100
-def userAmount(state: State, tkn_name: str, user_name: str, amount: str):
- if amount.endswith("%"):
- return get_user_balance(state, user_name, tkn_name) * toDecimal(amount)
+def get_user_amount(state: State, tkn_name: str, user_name: str, amount: Any):
+ if str(amount).endswith("%"):
+ return (
+ get_user_balance(state, user_name, tkn_name)
+ * Decimal(str(amount)[:-1])
+ / 100
+ )
return Decimal(amount)
@@ -74,7 +78,7 @@ def __init__(
whitelisted_tokens = {
k: {
- "trading_fee": toDecimal(v["trading_fee"]),
+ "trading_fee": to_decimal(v["trading_fee"]),
"bnt_funding_limit": Decimal(v["bnt_funding_limit"]),
}
for k, v in whitelisted_tokens.items()
@@ -92,9 +96,9 @@ def __init__(
whitelisted_tokens=whitelisted_tokens,
usernames=[],
cooldown_time=cooldown_time,
- network_fee=toDecimal(network_fee),
+ network_fee=to_decimal(network_fee),
bnt_min_liquidity=Decimal(bnt_min_liquidity),
- withdrawal_fee=toDecimal(withdrawal_fee),
+ withdrawal_fee=to_decimal(withdrawal_fee),
)
# initialize bnt
@@ -187,10 +191,10 @@ def deposit(
Top level logic for deposit actions.
"""
state = self.get_state(copy_type="initial", timestamp=timestamp)
- state, tkn_name, user_name = validate_input(
- state, tkn_name, user_name, timestamp
+ tkn_amt = get_user_amount(state, tkn_name, user_name, tkn_amt)
+ state, tkn_name, tkn_amt, user_name = validate_input(
+ state, tkn_name, tkn_amt, user_name, timestamp
)
- tkn_amt = userAmount(state, tkn_name, user_name, tkn_amt)
if tkn_name == "bnt":
state = deposit_bnt(
state=state, tkn_name=tkn_name, tkn_amt=tkn_amt, user_name=user_name
@@ -223,13 +227,10 @@ def trade(
Main logic for trade actions.
"""
state = self.get_state(copy_type="initial", timestamp=timestamp)
- state, source_token, user_name = validate_input(
- state, source_token, user_name, timestamp
+ tkn_amt = get_user_amount(state, source_token, user_name, tkn_amt)
+ state, source_token, tkn_amt, user_name = validate_input(
+ state, source_token, tkn_amt, user_name, timestamp
)
- state, target_token, user_name = validate_input(
- state, target_token, user_name, timestamp
- )
- tkn_amt = userAmount(state, source_token, user_name, tkn_amt)
state = process_trade(
state, tkn_amt, source_token, target_token, user_name, timestamp
)
@@ -255,10 +256,10 @@ def begin_cooldown(
Begin the withdrawal cooldown operation.
"""
state = self.get_state(copy_type="initial", timestamp=timestamp)
- state, tkn_name, user_name = validate_input(
- state, tkn_name, user_name, timestamp
+ tkn_amt = get_user_amount(state, tkn_name, user_name, tkn_amt)
+ state, tkn_name, tkn_amt, user_name = validate_input(
+ state, tkn_name, tkn_amt, user_name, timestamp
)
- tkn_amt = userAmount(state, tkn_name, user_name, tkn_amt)
state, id_number = begin_withdrawal_cooldown(
state, tkn_amt, tkn_name, user_name
)
@@ -518,7 +519,7 @@ def burn_pool_tokens(
state, tkn_name, user_name = validate_input(
state, tkn_name, user_name, timestamp
)
- tkn_amt = userAmount(state, tkn_name, user_name, tkn_amt)
+ tkn_amt = get_user_amount(state, tkn_name, user_name, tkn_amt)
if tkn_name != "bnt":
state.decrease_pooltoken_balance(tkn_name, tkn_amt)
state.decrease_user_balance(
@@ -582,7 +583,7 @@ def join_standard_rewards_program(
state, tkn_name, user_name = validate_input(
state, tkn_name, user_name, timestamp
)
- tkn_amt = userAmount(state, tkn_name, user_name, tkn_amt)
+ tkn_amt = get_user_amount(state, tkn_name, user_name, tkn_amt)
state = join_standard_reward_program(
state=state,
user_name=user_name,
@@ -611,7 +612,7 @@ def leave_standard_rewards_program(
state, tkn_name, user_name = validate_input(
state, tkn_name, user_name, timestamp
)
- tkn_amt = userAmount(state, tkn_name, user_name, tkn_amt)
+ tkn_amt = get_user_amount(state, tkn_name, user_name, tkn_amt)
state = leave_standard_reward_program(
state=state,
user_name=user_name,
@@ -695,7 +696,7 @@ def set_trading_fee(
"""
state = self.get_state(copy_type="initial", timestamp=timestamp)
state, tkn_name, user_name = validate_input(state, tkn_name, "", timestamp)
- value = toDecimal(percent)
+ value = to_decimal(percent)
state.set_trading_fee(tkn_name, value)
self.next_transaction(state)
handle_logging(
@@ -715,7 +716,7 @@ def set_network_fee(
"""
state = self.get_state(copy_type="initial", timestamp=timestamp)
state, tkn_name, user_name = validate_input(state, tkn_name, "", timestamp)
- value = toDecimal(percent)
+ value = to_decimal(percent)
state.set_network_fee(tkn_name, value)
self.next_transaction(state)
handle_logging(
@@ -735,7 +736,7 @@ def set_withdrawal_fee(
"""
state = self.get_state(copy_type="initial", timestamp=timestamp)
state, tkn_name, user_name = validate_input(state, tkn_name, "", timestamp)
- value = toDecimal(percent)
+ value = to_decimal(percent)
state.set_withdrawal_fee(tkn_name, value)
self.next_transaction(state)
handle_logging(
@@ -755,7 +756,7 @@ def set_bnt_funding_limit(
"""
state = self.get_state(copy_type="initial", timestamp=timestamp)
state, tkn_name, user_name = validate_input(state, tkn_name, "", timestamp)
- value = toDecimal(amount)
+ value = to_decimal(amount)
state.set_bnt_funding_limit(tkn_name, value)
self.next_transaction(state)
handle_logging(
diff --git a/bancor_research/scenario_generator/agents.py b/bancor_research/scenario_generator/agents.py
index 7787eb20..d75b0397 100644
--- a/bancor_research/scenario_generator/agents.py
+++ b/bancor_research/scenario_generator/agents.py
@@ -3,16 +3,23 @@
# Licensed under the MIT LICENSE. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------------------------------
"""Mesa Agent-based implementations of the Bancor protocol."""
+from decimal import Decimal
+from typing import Tuple
import mesa
+from bancor_research.bancor_simulator.v3.spec import get_prices, State, get_bnt_trading_liquidity, \
+ get_tkn_trading_liquidity, get_trading_fee, get_user_balance, get_is_trading_enabled, get_network_fee, get_ema_rate, \
+ get_spot_rate, get_vault_balance, get_pooltoken_balance, get_staked_balance, get_external_protection_vault, \
+ get_protocol_wallet_balance, get_vortex_balance, get_bnt_funding_limit, get_bnbnt_rate, get_max_bnt_deposit, \
+ get_user_pending_withdrawals
from bancor_research.bancor_simulator.v3.spec.actions import (
unpack_withdrawal_cooldown,
vortex_burner,
)
from bancor_research.bancor_simulator.v3.spec.network import BancorDapp
-from bancor_research.bancor_simulator.v3.simulation.random_walk import RandomWalker
-from bancor_research.bancor_simulator.v3.simulation.utils import (
+from bancor_research.scenario_generator.monte_carlo import MonteCarlo
+from bancor_research.scenario_generator.utils import (
trade_tkn_to_ema,
trade_bnt_to_ema,
process_arbitrage_trade,
@@ -26,7 +33,7 @@
)
-class Trader(RandomWalker):
+class Trader(MonteCarlo):
"""
Represents a Bancor dapp user (trader and/or arbitrageur). Subclass to Mesa Agent
"""
@@ -267,9 +274,8 @@ def perform_random_ema_force_trade(self):
return self
def get_random_tkn_names(self, state: State) -> Tuple[str, str]:
- tokens = state.whitelisted_tokens
- source_tkn = self.random.choice(tokens)
- target_tkn = self.random.choice([tkn for tkn in tokens if tkn != source_tkn])
+ tokens = [tkn for tkn in state.whitelisted_tokens]
+ source_tkn, target_tkn = self.random.sample(tokens, 2)
return source_tkn, target_tkn
def get_average_trading_fee(self):
@@ -328,7 +334,7 @@ def step(self):
self.transact()
-class LP(RandomWalker):
+class LP(MonteCarlo):
"""
Represents a Bancor dapp liquidity provider. Subclass to Mesa Agent
"""
@@ -432,7 +438,7 @@ def get_random_bnt_funding_limit(self, bnt_funding_amt: Decimal) -> Decimal:
def set_random_trading_fee(self):
state = self.protocol.v3.global_state
for i in range(self.random.randint(1, 3)):
- tkn_name = self.random.choice(state.whitelisted_tokens)
+ tkn_name = self.random.choice([tkn for tkn in state.whitelisted_tokens])
trading_fee = get_trading_fee(state, tkn_name)
trading_fee = self.get_random_trading_fee(trading_fee)
state.set_trading_fee(tkn_name, trading_fee)
@@ -441,7 +447,7 @@ def set_random_trading_fee(self):
def set_random_network_fee(self):
state = self.protocol.v3.global_state
- tkn_name = self.random.choice(state.whitelisted_tokens)
+ tkn_name = self.random.choice([tkn for tkn in state.whitelisted_tokens])
network_fee = get_network_fee(state, tkn_name)
network_fee = self.get_random_network_fee(network_fee)
state.set_network_fee(tkn_name, network_fee)
@@ -451,7 +457,7 @@ def set_random_network_fee(self):
def set_random_withdrawal_fee(self):
state = self.protocol.v3.global_state
withdrawal_fee = state.withdrawal_fee
- tkn_name = self.random.choice(state.whitelisted_tokens)
+ tkn_name = self.random.choice([tkn for tkn in state.whitelisted_tokens])
withdrawal_fee = self.get_random_withdrawal_fee(withdrawal_fee)
state.set_withdrawal_fee(tkn_name, withdrawal_fee)
self.protocol.v3.set_state(state)
@@ -459,7 +465,7 @@ def set_random_withdrawal_fee(self):
def set_random_bnt_funding_limit(self):
state = self.protocol.v3.global_state
- tkn_name = self.random.choice(state.whitelisted_tokens)
+ tkn_name = self.random.choice([tkn for tkn in state.whitelisted_tokens])
bnt_funding_limit = get_bnt_funding_limit(state, tkn_name)
updated_bnt_funding_limit = self.get_random_bnt_funding_limit(bnt_funding_limit)
state.set_bnt_funding_limit(tkn_name, updated_bnt_funding_limit)
@@ -467,9 +473,9 @@ def set_random_bnt_funding_limit(self):
return self
def perform_random_enable_trading(self):
- self.protocol.v3.dao_msig_init_pools(
- self.protocol.v3.global_state.whitelisted_tokens, "bnt"
- )
+ state = self.protocol.v3.global_state
+ for tkn in [tkn for tkn in state.whitelisted_tokens]:
+ self.protocol.v3.enable_trading(tkn)
return self
def get_random_withdrawal_amt(self, tkn_name: str) -> Decimal:
@@ -497,9 +503,8 @@ def get_random_amt(self, amt: Decimal) -> Decimal:
return Decimal(self.random.uniform(float(min_amt), float(max_amt)))
def get_random_tkn_names(self, state: State) -> Tuple[str, str]:
- tokens = state.whitelisted_tokens
- source_tkn = self.random.choice(tokens)
- target_tkn = self.random.choice([tkn for tkn in tokens if tkn != source_tkn])
+ tokens = [tkn for tkn in state.whitelisted_tokens]
+ source_tkn, target_tkn = self.random.sample(tokens, 2)
return source_tkn, target_tkn
def is_protocol_bnbnt_healthy(
@@ -554,7 +559,7 @@ def create_random_autocompounding_rewards(self):
timestamp = state.timestamp
start_time = 1 + timestamp
- tkn_name = self.random.choice(state.whitelisted_tokens)
+ tkn_name = self.random.choice([tkn for tkn in state.whitelisted_tokens])
distribution_type = self.random.choice(["flat", "exp"])
if distribution_type == "flat":
@@ -769,7 +774,7 @@ def perform_random_withdrawal(self):
state = self.protocol.v3.global_state
timestamp = state.timestamp
user_name = self.random.choice(state.usernames)
- tkn_name = self.random.choice(state.whitelisted_tokens)
+ tkn_name = self.random.choice([tkn for tkn in state.whitelisted_tokens])
pending_withdrawals = get_user_pending_withdrawals(state, user_name, tkn_name)
if len(pending_withdrawals) > 0:
id_number = self.random.choice(pending_withdrawals)
@@ -965,10 +970,8 @@ def __init__(
self.v3 = BancorDapp(
price_feeds=price_feeds,
whitelisted_tokens=whitelisted_tokens,
- trading_fee=trading_fee,
network_fee=network_fee,
withdrawal_fee=withdrawal_fee,
- bnt_funding_limit=bnt_funding_limit,
bnt_min_liquidity=bnt_min_liquidity,
)
diff --git a/bancor_research/scenario_generator/batch_run.py b/bancor_research/scenario_generator/batch_run.py
index 5333d27d..1f89141f 100644
--- a/bancor_research/scenario_generator/batch_run.py
+++ b/bancor_research/scenario_generator/batch_run.py
@@ -22,6 +22,13 @@
"""
import os
+import mesa
+from bancor_research.scenario_generator.constants import SIMULATION_MAX_STEPS, SIMULATION_OUTPUT_PATH
+
+from bancor_research.scenario_generator.model import BancorSimulation
+
+from bancor_research.bancor_simulator.v3.spec import *
+
# Add any desired parameters to sweep below.
br_params = {
"trading_fee": [
diff --git a/bancor_research/scenario_generator/constants.py b/bancor_research/scenario_generator/constants.py
index b5e6849d..e99b418c 100644
--- a/bancor_research/scenario_generator/constants.py
+++ b/bancor_research/scenario_generator/constants.py
@@ -4,6 +4,11 @@
# --------------------------------------------------------------------------------------------------------------------
"""Simulation constants and default state variables."""
from decimal import Decimal
+from bancor_research import DEFAULT
+DEFAULT_TRADING_FEE = DEFAULT.TRADING_FEE
+DEFAULT_BNT_FUNDING_LIMIT = DEFAULT.BNT_FUNDING_LIMIT
+DEFAULT_NETWORK_FEE = DEFAULT.NETWORK_FEE
+DEFAULT_WITHDRAWAL_FEE = DEFAULT.WITHDRAWAL_FEE
SIMULATION_TARGET_TVL: Decimal = Decimal("160000000")
SIMULATION_TARGET_TRADE_VOLUME: Decimal = Decimal("20000000")
@@ -13,6 +18,25 @@
SIMULATION_TARGET_NUM_WITHDRAWALS_PER_DAY: int = 200
SIMULATION_NUM_TRADERS = 2
SIMULATION_NUM_LPs = 2
-SIMULATION_WHITELISTED_TOKENS = ["tkn", "bnt"]
+
+
+SIMULATION_WHITELISTED_TOKENS = {
+ "eth": {
+ "trading_fee": DEFAULT_TRADING_FEE,
+ "bnt_funding_limit": DEFAULT_BNT_FUNDING_LIMIT,
+ },
+ "link": {
+ "trading_fee": DEFAULT_TRADING_FEE,
+ "bnt_funding_limit": DEFAULT_BNT_FUNDING_LIMIT,
+ },
+ "tkn": {
+ "trading_fee": DEFAULT_TRADING_FEE,
+ "bnt_funding_limit": DEFAULT_BNT_FUNDING_LIMIT,
+ },
+ "wbtc": {
+ "trading_fee": DEFAULT_TRADING_FEE,
+ "bnt_funding_limit": DEFAULT_BNT_FUNDING_LIMIT,
+ },
+}
SIMULATION_MAX_STEPS = 100
-SIMULATION_OUTPUT_PATH: str = "data/simulation_output.csv"
+SIMULATION_OUTPUT_PATH: str = "examples/studies/limit_max_on_curve_liquidity/data/simulation_output.csv"
diff --git a/bancor_research/scenario_generator/model.py b/bancor_research/scenario_generator/model.py
index 2c6ccd0b..0e2c059c 100644
--- a/bancor_research/scenario_generator/model.py
+++ b/bancor_research/scenario_generator/model.py
@@ -2,20 +2,20 @@
# --------------------------------------------------------------------------------------------------------------------
# Licensed under the MIT LICENSE. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------------------------------
-"""Main Bancor Simulation module interface."""
-
+"""Main Bancor Simulation module interface.
+If you want to perform a parameter sweep, call batch_run.py instead of run.py.
+For details see batch_run.py in the same directory as run.py.
+"""
import mesa
import itertools
from decimal import Decimal
-from mesa.datacollection import DataCollector
-from pydantic.types import Any
-from bancor_research.bancor_simulator.v3.simulation.agents import Trader, LP, Protocol
+from bancor_research.scenario_generator.agents import Protocol, Trader, LP
-"""
-If you want to perform a parameter sweep, call batch_run.py instead of run.py.
-For details see batch_run.py in the same directory as run.py.
-"""
+from bancor_research.bancor_simulator.v3.spec import *
+from bancor_research.scenario_generator.constants import *
+from mesa.datacollection import DataCollector
+from pydantic.types import Any
def track_params(model):
@@ -53,22 +53,22 @@ class BancorSimulation(mesa.Model):
max_steps = SIMULATION_MAX_STEPS
def __init__(
- self,
- height=grid_h,
- width=grid_w,
- init_traders=SIMULATION_NUM_TRADERS,
- init_lps=SIMULATION_NUM_LPs,
- whale_threshold=SIMULATION_WHALE_THRESHOLD,
- trading_fee=float(DEFAULT_TRADING_FEE),
- network_fee=float(DEFAULT_NETWORK_FEE),
- withdrawal_fee=float(DEFAULT_WITHDRAWAL_FEE),
- whitelisted_tokens=None,
- target_tvl=SIMULATION_TARGET_TVL,
- price_feeds=DEFAULT_PRICE_FEEDS,
- bnt_funding_limit=float(DEFAULT_BNT_FUNDING_LIMIT),
- bnt_min_liquidity=float(DEFAULT_BNT_MIN_LIQUIDITY),
- *args: Any,
- **kwargs: Any
+ self,
+ height=grid_h,
+ width=grid_w,
+ init_traders=SIMULATION_NUM_TRADERS,
+ init_lps=SIMULATION_NUM_LPs,
+ whale_threshold=SIMULATION_WHALE_THRESHOLD,
+ trading_fee=float(DEFAULT_TRADING_FEE),
+ network_fee=float(DEFAULT_NETWORK_FEE),
+ withdrawal_fee=float(DEFAULT_WITHDRAWAL_FEE),
+ whitelisted_tokens=None,
+ target_tvl=SIMULATION_TARGET_TVL,
+ price_feeds=DEFAULT_PRICE_FEEDS,
+ bnt_funding_limit=float(DEFAULT_BNT_FUNDING_LIMIT),
+ bnt_min_liquidity=float(DEFAULT_BNT_MIN_LIQUIDITY),
+ *args: Any,
+ **kwargs: Any
):
if whitelisted_tokens is None:
diff --git a/bancor_research/scenario_generator/random_walk.py b/bancor_research/scenario_generator/monte_carlo.py
similarity index 87%
rename from bancor_research/scenario_generator/random_walk.py
rename to bancor_research/scenario_generator/monte_carlo.py
index 6ea3efb2..e5645a38 100644
--- a/bancor_research/scenario_generator/random_walk.py
+++ b/bancor_research/scenario_generator/monte_carlo.py
@@ -4,15 +4,15 @@
# --------------------------------------------------------------------------
"""
-Generalized behavior for random walking, one grid cell at a time.
+Generalized behavior for monte carlo simulation
"""
import mesa
-class RandomWalker(mesa.Agent):
+class MonteCarlo(mesa.Agent):
"""
- Class implementing random walker methods in a generalized manner.
+ Class implementing monte carlo methods in a generalized manner.
"""
grid = None
diff --git a/bancor_research/scenario_generator/run.py b/bancor_research/scenario_generator/run.py
index 1350945c..1a06b4dc 100644
--- a/bancor_research/scenario_generator/run.py
+++ b/bancor_research/scenario_generator/run.py
@@ -1,3 +1,4 @@
-from bancor_research.bancor_simulator.v3.simulation.server import server
+# coding=utf-8
+from bancor_research.scenario_generator.server import server
server.launch()
diff --git a/bancor_research/scenario_generator/server.py b/bancor_research/scenario_generator/server.py
index d47cdb22..5b52333e 100644
--- a/bancor_research/scenario_generator/server.py
+++ b/bancor_research/scenario_generator/server.py
@@ -3,8 +3,16 @@
# Licensed under the MIT LICENSE. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------------------------------
"""Sets up the interactive visualization server for the Mesa Agent-based simulation."""
+from decimal import Decimal
+
+import mesa
+from bancor_research.scenario_generator.constants import *
# The colors here are taken from Matplotlib's tab10 palette
+from bancor_research.scenario_generator.model import BancorSimulation
+
+from bancor_research.scenario_generator.agents import Trader, LP
+
RICH_COLOR = "#2ca02c" # Green
POOR_COLOR = "#d62728" # Red
MID_COLOR = "#1f77b4" # Blue
diff --git a/bancor_research/scenario_generator/utils.py b/bancor_research/scenario_generator/utils.py
index bfe637bb..9984df47 100644
--- a/bancor_research/scenario_generator/utils.py
+++ b/bancor_research/scenario_generator/utils.py
@@ -3,6 +3,8 @@
# Licensed under the MIT LICENSE. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------------------------------
"""Simulation utility functions."""
+from decimal import Decimal
+from typing import Tuple
def trade_tkn_to_ema(
diff --git a/examples/simulation-example.ipynb b/examples/simulation-example.ipynb
index 9b855037..2fe2ba40 100644
--- a/examples/simulation-example.ipynb
+++ b/examples/simulation-example.ipynb
@@ -14,6 +14,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
+
"zsh:1: command not found: python\n"
]
}
diff --git a/examples/studies/ahp/Analytical Hierarchy Process.png b/examples/studies/ahp/Analytical Hierarchy Process.png
new file mode 100644
index 00000000..32adcc9d
Binary files /dev/null and b/examples/studies/ahp/Analytical Hierarchy Process.png differ
diff --git a/examples/studies/ahp/ahp-example.ipynb b/examples/studies/ahp/ahp-example.ipynb
new file mode 100644
index 00000000..5a0746b7
--- /dev/null
+++ b/examples/studies/ahp/ahp-example.ipynb
@@ -0,0 +1,1251 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# AHPy\n",
+ "\n",
+ "**AHPy** is an implementation of the Analytic Hierarchy Process ([AHP](https://en.wikipedia.org/wiki/Analytic_hierarchy_process)), a method used to structure, synthesize and evaluate the elements of a decision problem. Developed by [Thomas Saaty](http://www.creativedecisions.org/about/ThomasLSaaty.php) in the 1970s, AHP's broad use in fields well beyond that of operational research is a testament to its simple yet powerful combination of psychology and mathematics.\n",
+ "\n",
+ "
\n",
+ "
\n",
+ "
"
+ ],
+ "metadata": {
+ "collapsed": false
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 994,
+ "outputs": [],
+ "source": [
+ "from fractions import Fraction\n",
+ "import itertools\n",
+ "import random\n",
+ "import pandas as pd\n",
+ "import ahpy"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [],
+ "metadata": {
+ "collapsed": false
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "### The following code demonstrates how to arrive at a decision matrix such as that shown below."
+ ],
+ "metadata": {
+ "collapsed": false
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1029,
+ "outputs": [
+ {
+ "data": {
+ "text/plain": " Unnamed: 0 Fees Resources Deficit Alignment \\\n0 Remove BNT from pools Proposal 0.346 0.45 0.318 0.222 \n1 Airswap Proposal 0.269 0.40 0.273 0.259 \n2 USDT liquidity Proposal 0.192 0.05 0.227 0.259 \n3 Enable deposits Proposal 0.192 0.10 0.182 0.259 \n\n Risk Total \n0 0.222 1.558 \n1 0.185 1.386 \n2 0.259 0.987 \n3 0.333 1.066 ",
+ "text/html": "\n\n
\n \n \n | \n Unnamed: 0 | \n Fees | \n Resources | \n Deficit | \n Alignment | \n Risk | \n Total | \n
\n \n \n \n | 0 | \n Remove BNT from pools Proposal | \n 0.346 | \n 0.45 | \n 0.318 | \n 0.222 | \n 0.222 | \n 1.558 | \n
\n \n | 1 | \n Airswap Proposal | \n 0.269 | \n 0.40 | \n 0.273 | \n 0.259 | \n 0.185 | \n 1.386 | \n
\n \n | 2 | \n USDT liquidity Proposal | \n 0.192 | \n 0.05 | \n 0.227 | \n 0.259 | \n 0.259 | \n 0.987 | \n
\n \n | 3 | \n Enable deposits Proposal | \n 0.192 | \n 0.10 | \n 0.182 | \n 0.259 | \n 0.333 | \n 1.066 | \n
\n \n
\n
"
+ },
+ "execution_count": 1029,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pd.read_csv('ahp_example.csv')"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 995,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "# Simulated survey takers (could be only the task force or volunteers or the entire dao survey respondents)\n",
+ "dao_survey_respondents = {\n",
+ " 'Mark': [],\n",
+ " 'Rick': [],\n",
+ " 'Stefan': [],\n",
+ " 'Tyler': []\n",
+ "}"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "### "
+ ],
+ "metadata": {
+ "collapsed": false
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 996,
+ "outputs": [
+ {
+ "data": {
+ "text/plain": "[('Airswap Proposal', 'USDT liquidity Proposal'),\n ('Airswap Proposal', 'Remove BNT from pools Proposal'),\n ('Airswap Proposal', 'Enable deposits Proposal'),\n ('USDT liquidity Proposal', 'Remove BNT from pools Proposal'),\n ('USDT liquidity Proposal', 'Enable deposits Proposal'),\n ('Remove BNT from pools Proposal', 'Enable deposits Proposal')]"
+ },
+ "execution_count": 996,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Alternative recovery proposals\n",
+ "alternatives = (\n",
+ " 'Airswap Proposal',\n",
+ " 'USDT liquidity Proposal',\n",
+ " 'Remove BNT from pools Proposal',\n",
+ " 'Enable deposits Proposal'\n",
+ ")\n",
+ "alternatives_pairs = list(itertools.combinations(alternatives, 2))\n",
+ "alternatives_pairs"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 997,
+ "outputs": [],
+ "source": [
+ "# Simulated survey takers with randomized responses for demonstration\n",
+ "def simulate_dao_survey(alternatives_pairs, survey, results={}, response={}):\n",
+ " for alternative in alternatives_pairs:\n",
+ " for comparison in survey:\n",
+ " importance = random.randint(1, 9)\n",
+ " results[comparison] = importance\n",
+ " return [float(Fraction(results[alternatives_pairs[i][0]], results[alternatives_pairs[i][1]])) for i in range(len(alternatives_pairs))]"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "### Pairwise survey questions using a standardized ranking system such the [fundamental scale](https://en.wikipedia.org/wiki/Analytic_hierarchy_process_–_car_example)"
+ ],
+ "metadata": {
+ "collapsed": false
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 998,
+ "outputs": [
+ {
+ "data": {
+ "text/plain": "{('Airswap Proposal', 'USDT liquidity Proposal'): 1.4,\n ('Airswap Proposal', 'Remove BNT from pools Proposal'): 0.7777777777777778,\n ('Airswap Proposal', 'Enable deposits Proposal'): 1.4,\n ('USDT liquidity Proposal',\n 'Remove BNT from pools Proposal'): 0.5555555555555556,\n ('USDT liquidity Proposal', 'Enable deposits Proposal'): 1.0,\n ('Remove BNT from pools Proposal', 'Enable deposits Proposal'): 1.8}"
+ },
+ "execution_count": 998,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "fees_values = simulate_dao_survey(alternatives_pairs, alternatives)\n",
+ "fees_comparisons = dict(zip(alternatives_pairs, fees_values))\n",
+ "fees_comparisons"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 999,
+ "outputs": [
+ {
+ "data": {
+ "text/plain": "{('Airswap Proposal', 'USDT liquidity Proposal'): 8.0,\n ('Airswap Proposal', 'Remove BNT from pools Proposal'): 0.8888888888888888,\n ('Airswap Proposal', 'Enable deposits Proposal'): 4.0,\n ('USDT liquidity Proposal',\n 'Remove BNT from pools Proposal'): 0.1111111111111111,\n ('USDT liquidity Proposal', 'Enable deposits Proposal'): 0.5,\n ('Remove BNT from pools Proposal', 'Enable deposits Proposal'): 4.5}"
+ },
+ "execution_count": 999,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "resources_values = simulate_dao_survey(alternatives_pairs, alternatives)\n",
+ "resources_comparisons = dict(zip(alternatives_pairs, resources_values))\n",
+ "resources_comparisons"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1000,
+ "outputs": [
+ {
+ "data": {
+ "text/plain": "{('Airswap Proposal', 'USDT liquidity Proposal'): 1.2,\n ('Airswap Proposal', 'Remove BNT from pools Proposal'): 0.8571428571428571,\n ('Airswap Proposal', 'Enable deposits Proposal'): 1.5,\n ('USDT liquidity Proposal',\n 'Remove BNT from pools Proposal'): 0.7142857142857143,\n ('USDT liquidity Proposal', 'Enable deposits Proposal'): 1.25,\n ('Remove BNT from pools Proposal', 'Enable deposits Proposal'): 1.75}"
+ },
+ "execution_count": 1000,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "deficit_values = simulate_dao_survey(alternatives_pairs, alternatives)\n",
+ "deficit_comparisons = dict(zip(alternatives_pairs, deficit_values))\n",
+ "deficit_comparisons"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1001,
+ "outputs": [
+ {
+ "data": {
+ "text/plain": "{('Airswap Proposal', 'USDT liquidity Proposal'): 1.0,\n ('Airswap Proposal', 'Remove BNT from pools Proposal'): 1.1666666666666667,\n ('Airswap Proposal', 'Enable deposits Proposal'): 1.0,\n ('USDT liquidity Proposal',\n 'Remove BNT from pools Proposal'): 1.1666666666666667,\n ('USDT liquidity Proposal', 'Enable deposits Proposal'): 1.0,\n ('Remove BNT from pools Proposal',\n 'Enable deposits Proposal'): 0.8571428571428571}"
+ },
+ "execution_count": 1001,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "alignment_values = simulate_dao_survey(alternatives_pairs, alternatives)\n",
+ "alignment_comparisons = dict(zip(alternatives_pairs, alignment_values))\n",
+ "alignment_comparisons"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1002,
+ "outputs": [
+ {
+ "data": {
+ "text/plain": "{('Airswap Proposal', 'USDT liquidity Proposal'): 0.8,\n ('Airswap Proposal', 'Remove BNT from pools Proposal'): 0.4444444444444444,\n ('Airswap Proposal', 'Enable deposits Proposal'): 0.5,\n ('USDT liquidity Proposal',\n 'Remove BNT from pools Proposal'): 0.5555555555555556,\n ('USDT liquidity Proposal', 'Enable deposits Proposal'): 0.625,\n ('Remove BNT from pools Proposal', 'Enable deposits Proposal'): 1.125}"
+ },
+ "execution_count": 1002,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "legal_risk_values = simulate_dao_survey(alternatives_pairs, alternatives)\n",
+ "legal_risk_comparisons = dict(zip(alternatives_pairs, legal_risk_values))\n",
+ "legal_risk_comparisons\n"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1003,
+ "outputs": [
+ {
+ "data": {
+ "text/plain": "{('Airswap Proposal', 'USDT liquidity Proposal'): 0.3333333333333333,\n ('Airswap Proposal', 'Remove BNT from pools Proposal'): 3.0,\n ('Airswap Proposal', 'Enable deposits Proposal'): 1.0,\n ('USDT liquidity Proposal', 'Remove BNT from pools Proposal'): 9.0,\n ('USDT liquidity Proposal', 'Enable deposits Proposal'): 3.0,\n ('Remove BNT from pools Proposal',\n 'Enable deposits Proposal'): 0.3333333333333333}"
+ },
+ "execution_count": 1003,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "lp_alienation_risk_values = simulate_dao_survey(alternatives_pairs, alternatives)\n",
+ "lp_alienation_risk_comparisons = dict(zip(alternatives_pairs, lp_alienation_risk_values))\n",
+ "lp_alienation_risk_comparisons\n"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1004,
+ "outputs": [
+ {
+ "data": {
+ "text/plain": "{('Airswap Proposal', 'USDT liquidity Proposal'): 8.0,\n ('Airswap Proposal', 'Remove BNT from pools Proposal'): 4.0,\n ('Airswap Proposal', 'Enable deposits Proposal'): 2.0,\n ('USDT liquidity Proposal', 'Remove BNT from pools Proposal'): 0.5,\n ('USDT liquidity Proposal', 'Enable deposits Proposal'): 0.25,\n ('Remove BNT from pools Proposal', 'Enable deposits Proposal'): 0.5}"
+ },
+ "execution_count": 1004,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "reputational_risk_values = simulate_dao_survey(alternatives_pairs, alternatives)\n",
+ "reputational_risk_comparisons = dict(zip(alternatives_pairs, reputational_risk_values))\n",
+ "reputational_risk_comparisons\n"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1005,
+ "outputs": [
+ {
+ "data": {
+ "text/plain": "{('Airswap Proposal', 'USDT liquidity Proposal'): 3.0,\n ('Airswap Proposal', 'Remove BNT from pools Proposal'): 3.0,\n ('Airswap Proposal', 'Enable deposits Proposal'): 1.5,\n ('USDT liquidity Proposal', 'Remove BNT from pools Proposal'): 1.0,\n ('USDT liquidity Proposal', 'Enable deposits Proposal'): 0.5,\n ('Remove BNT from pools Proposal', 'Enable deposits Proposal'): 0.5}"
+ },
+ "execution_count": 1005,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "security_risk_values = simulate_dao_survey(alternatives_pairs, alternatives)\n",
+ "security_risk_comparisons = dict(zip(alternatives_pairs, security_risk_values))\n",
+ "security_risk_comparisons\n"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1006,
+ "outputs": [
+ {
+ "data": {
+ "text/plain": "{('Airswap Proposal', 'USDT liquidity Proposal'): 0.7142857142857143,\n ('Airswap Proposal', 'Remove BNT from pools Proposal'): 0.8333333333333334,\n ('Airswap Proposal', 'Enable deposits Proposal'): 0.5555555555555556,\n ('USDT liquidity Proposal',\n 'Remove BNT from pools Proposal'): 1.1666666666666667,\n ('USDT liquidity Proposal', 'Enable deposits Proposal'): 0.7777777777777778,\n ('Remove BNT from pools Proposal',\n 'Enable deposits Proposal'): 0.6666666666666666}"
+ },
+ "execution_count": 1006,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "risk_values = simulate_dao_survey(alternatives_pairs, alternatives)\n",
+ "risk_comparisons = dict(zip(alternatives_pairs, risk_values))\n",
+ "risk_comparisons"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "### Use the AHPy library to calculate comparison values."
+ ],
+ "metadata": {
+ "collapsed": false
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1007,
+ "outputs": [],
+ "source": [
+ "comparisons=[]"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1008,
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{\n",
+ " \"name\": \"Fees\",\n",
+ " \"global_weight\": 1.0,\n",
+ " \"local_weight\": 1.0,\n",
+ " \"target_weights\": {\n",
+ " \"Remove BNT from pools Proposal\": 0.346,\n",
+ " \"Airswap Proposal\": 0.269,\n",
+ " \"USDT liquidity Proposal\": 0.192,\n",
+ " \"Enable deposits Proposal\": 0.192\n",
+ " },\n",
+ " \"elements\": {\n",
+ " \"global_weights\": {\n",
+ " \"Remove BNT from pools Proposal\": 0.346,\n",
+ " \"Airswap Proposal\": 0.269,\n",
+ " \"USDT liquidity Proposal\": 0.192,\n",
+ " \"Enable deposits Proposal\": 0.192\n",
+ " },\n",
+ " \"local_weights\": {\n",
+ " \"Remove BNT from pools Proposal\": 0.346,\n",
+ " \"Airswap Proposal\": 0.269,\n",
+ " \"USDT liquidity Proposal\": 0.192,\n",
+ " \"Enable deposits Proposal\": 0.192\n",
+ " },\n",
+ " \"consistency_ratio\": 0.0\n",
+ " }\n",
+ "}\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": " Remove BNT from pools Proposal Airswap Proposal \\\nFees 0.346 0.269 \n\n USDT liquidity Proposal Enable deposits Proposal \nFees 0.192 0.192 ",
+ "text/html": "\n\n
\n \n \n | \n Remove BNT from pools Proposal | \n Airswap Proposal | \n USDT liquidity Proposal | \n Enable deposits Proposal | \n
\n \n \n \n | Fees | \n 0.346 | \n 0.269 | \n 0.192 | \n 0.192 | \n
\n \n
\n
"
+ },
+ "execution_count": 1008,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "fees = ahpy.Compare('Fees', fees_comparisons, precision=3)\n",
+ "report = fees.report(show=True)\n",
+ "fees_df = pd.DataFrame(fees.target_weights, index=['Fees'])\n",
+ "comparisons.append(fees_df)\n",
+ "fees_df"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1009,
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{\n",
+ " \"name\": \"Resources\",\n",
+ " \"global_weight\": 1.0,\n",
+ " \"local_weight\": 1.0,\n",
+ " \"target_weights\": {\n",
+ " \"Remove BNT from pools Proposal\": 0.45,\n",
+ " \"Airswap Proposal\": 0.4,\n",
+ " \"Enable deposits Proposal\": 0.1,\n",
+ " \"USDT liquidity Proposal\": 0.05\n",
+ " },\n",
+ " \"elements\": {\n",
+ " \"global_weights\": {\n",
+ " \"Remove BNT from pools Proposal\": 0.45,\n",
+ " \"Airswap Proposal\": 0.4,\n",
+ " \"Enable deposits Proposal\": 0.1,\n",
+ " \"USDT liquidity Proposal\": 0.05\n",
+ " },\n",
+ " \"local_weights\": {\n",
+ " \"Remove BNT from pools Proposal\": 0.45,\n",
+ " \"Airswap Proposal\": 0.4,\n",
+ " \"Enable deposits Proposal\": 0.1,\n",
+ " \"USDT liquidity Proposal\": 0.05\n",
+ " },\n",
+ " \"consistency_ratio\": 0.0\n",
+ " }\n",
+ "}\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": " Remove BNT from pools Proposal Airswap Proposal \\\nResources 0.45 0.4 \n\n Enable deposits Proposal USDT liquidity Proposal \nResources 0.1 0.05 ",
+ "text/html": "\n\n
\n \n \n | \n Remove BNT from pools Proposal | \n Airswap Proposal | \n Enable deposits Proposal | \n USDT liquidity Proposal | \n
\n \n \n \n | Resources | \n 0.45 | \n 0.4 | \n 0.1 | \n 0.05 | \n
\n \n
\n
"
+ },
+ "execution_count": 1009,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "resources = ahpy.Compare('Resources', resources_comparisons, precision=3)\n",
+ "report = resources.report(show=True)\n",
+ "resources_df = pd.DataFrame(resources.target_weights, index=['Resources'])\n",
+ "comparisons.append(resources_df)\n",
+ "resources_df"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1010,
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{\n",
+ " \"name\": \"Deficit\",\n",
+ " \"global_weight\": 1.0,\n",
+ " \"local_weight\": 1.0,\n",
+ " \"target_weights\": {\n",
+ " \"Remove BNT from pools Proposal\": 0.318,\n",
+ " \"Airswap Proposal\": 0.273,\n",
+ " \"USDT liquidity Proposal\": 0.227,\n",
+ " \"Enable deposits Proposal\": 0.182\n",
+ " },\n",
+ " \"elements\": {\n",
+ " \"global_weights\": {\n",
+ " \"Remove BNT from pools Proposal\": 0.318,\n",
+ " \"Airswap Proposal\": 0.273,\n",
+ " \"USDT liquidity Proposal\": 0.227,\n",
+ " \"Enable deposits Proposal\": 0.182\n",
+ " },\n",
+ " \"local_weights\": {\n",
+ " \"Remove BNT from pools Proposal\": 0.318,\n",
+ " \"Airswap Proposal\": 0.273,\n",
+ " \"USDT liquidity Proposal\": 0.227,\n",
+ " \"Enable deposits Proposal\": 0.182\n",
+ " },\n",
+ " \"consistency_ratio\": 0.0\n",
+ " }\n",
+ "}\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": " Remove BNT from pools Proposal Airswap Proposal \\\nDeficit 0.318 0.273 \n\n USDT liquidity Proposal Enable deposits Proposal \nDeficit 0.227 0.182 ",
+ "text/html": "\n\n
\n \n \n | \n Remove BNT from pools Proposal | \n Airswap Proposal | \n USDT liquidity Proposal | \n Enable deposits Proposal | \n
\n \n \n \n | Deficit | \n 0.318 | \n 0.273 | \n 0.227 | \n 0.182 | \n
\n \n
\n
"
+ },
+ "execution_count": 1010,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "\n",
+ "deficit = ahpy.Compare('Deficit', deficit_comparisons, precision=3)\n",
+ "report = deficit.report(show=True)\n",
+ "deficit_df = pd.DataFrame(deficit.target_weights, index=['Deficit'])\n",
+ "comparisons.append(deficit_df)\n",
+ "deficit_df"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1011,
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{\n",
+ " \"name\": \"Alignment\",\n",
+ " \"global_weight\": 1.0,\n",
+ " \"local_weight\": 1.0,\n",
+ " \"target_weights\": {\n",
+ " \"Airswap Proposal\": 0.259,\n",
+ " \"USDT liquidity Proposal\": 0.259,\n",
+ " \"Enable deposits Proposal\": 0.259,\n",
+ " \"Remove BNT from pools Proposal\": 0.222\n",
+ " },\n",
+ " \"elements\": {\n",
+ " \"global_weights\": {\n",
+ " \"Airswap Proposal\": 0.259,\n",
+ " \"USDT liquidity Proposal\": 0.259,\n",
+ " \"Enable deposits Proposal\": 0.259,\n",
+ " \"Remove BNT from pools Proposal\": 0.222\n",
+ " },\n",
+ " \"local_weights\": {\n",
+ " \"Airswap Proposal\": 0.259,\n",
+ " \"USDT liquidity Proposal\": 0.259,\n",
+ " \"Enable deposits Proposal\": 0.259,\n",
+ " \"Remove BNT from pools Proposal\": 0.222\n",
+ " },\n",
+ " \"consistency_ratio\": 0.0\n",
+ " }\n",
+ "}\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": " Airswap Proposal USDT liquidity Proposal \\\nAlignment 0.259 0.259 \n\n Enable deposits Proposal Remove BNT from pools Proposal \nAlignment 0.259 0.222 ",
+ "text/html": "\n\n
\n \n \n | \n Airswap Proposal | \n USDT liquidity Proposal | \n Enable deposits Proposal | \n Remove BNT from pools Proposal | \n
\n \n \n \n | Alignment | \n 0.259 | \n 0.259 | \n 0.259 | \n 0.222 | \n
\n \n
\n
"
+ },
+ "execution_count": 1011,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "\n",
+ "alignment = ahpy.Compare('Alignment', alignment_comparisons, precision=3)\n",
+ "report = alignment.report(show=True)\n",
+ "alignment_df = pd.DataFrame(alignment.target_weights, index=['Alignment'])\n",
+ "comparisons.append(alignment_df)\n",
+ "alignment_df"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1012,
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{\n",
+ " \"name\": \"Legal Risk\",\n",
+ " \"global_weight\": 1.0,\n",
+ " \"local_weight\": 1.0,\n",
+ " \"target_weights\": {\n",
+ " \"Remove BNT from pools Proposal\": 0.346,\n",
+ " \"Enable deposits Proposal\": 0.308,\n",
+ " \"USDT liquidity Proposal\": 0.192,\n",
+ " \"Airswap Proposal\": 0.154\n",
+ " },\n",
+ " \"elements\": {\n",
+ " \"global_weights\": {\n",
+ " \"Remove BNT from pools Proposal\": 0.346,\n",
+ " \"Enable deposits Proposal\": 0.308,\n",
+ " \"USDT liquidity Proposal\": 0.192,\n",
+ " \"Airswap Proposal\": 0.154\n",
+ " },\n",
+ " \"local_weights\": {\n",
+ " \"Remove BNT from pools Proposal\": 0.346,\n",
+ " \"Enable deposits Proposal\": 0.308,\n",
+ " \"USDT liquidity Proposal\": 0.192,\n",
+ " \"Airswap Proposal\": 0.154\n",
+ " },\n",
+ " \"consistency_ratio\": 0.0,\n",
+ " \"random_index\": \"Donegan & Dodd\",\n",
+ " \"count\": 4,\n",
+ " \"names\": [\n",
+ " \"Airswap Proposal\",\n",
+ " \"USDT liquidity Proposal\",\n",
+ " \"Remove BNT from pools Proposal\",\n",
+ " \"Enable deposits Proposal\"\n",
+ " ]\n",
+ " },\n",
+ " \"children\": null,\n",
+ " \"comparisons\": {\n",
+ " \"count\": 6,\n",
+ " \"input\": {\n",
+ " \"Airswap Proposal, USDT liquidity Proposal\": 0.8,\n",
+ " \"Airswap Proposal, Remove BNT from pools Proposal\": 0.4444444444444444,\n",
+ " \"Airswap Proposal, Enable deposits Proposal\": 0.5,\n",
+ " \"USDT liquidity Proposal, Remove BNT from pools Proposal\": 0.5555555555555556,\n",
+ " \"USDT liquidity Proposal, Enable deposits Proposal\": 0.625,\n",
+ " \"Remove BNT from pools Proposal, Enable deposits Proposal\": 1.125\n",
+ " },\n",
+ " \"computed\": null\n",
+ " }\n",
+ "}\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": " Remove BNT from pools Proposal Enable deposits Proposal \\\nLegal Risk 0.346 0.308 \n\n USDT liquidity Proposal Airswap Proposal \nLegal Risk 0.192 0.154 ",
+ "text/html": "\n\n
\n \n \n | \n Remove BNT from pools Proposal | \n Enable deposits Proposal | \n USDT liquidity Proposal | \n Airswap Proposal | \n
\n \n \n \n | Legal Risk | \n 0.346 | \n 0.308 | \n 0.192 | \n 0.154 | \n
\n \n
\n
"
+ },
+ "execution_count": 1012,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "legal_risk = ahpy.Compare('Legal Risk', legal_risk_comparisons, precision=3)\n",
+ "report = legal_risk.report(show=True, verbose=True)\n",
+ "legal_risk_df = pd.DataFrame(legal_risk.target_weights, index=['Legal Risk'])\n",
+ "# comparisons.append(legal_risk_df)\n",
+ "legal_risk_df\n"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1013,
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{\n",
+ " \"name\": \"Reputational Risk\",\n",
+ " \"global_weight\": 1.0,\n",
+ " \"local_weight\": 1.0,\n",
+ " \"target_weights\": {\n",
+ " \"Airswap Proposal\": 0.533,\n",
+ " \"Enable deposits Proposal\": 0.267,\n",
+ " \"Remove BNT from pools Proposal\": 0.133,\n",
+ " \"USDT liquidity Proposal\": 0.067\n",
+ " },\n",
+ " \"elements\": {\n",
+ " \"global_weights\": {\n",
+ " \"Airswap Proposal\": 0.533,\n",
+ " \"Enable deposits Proposal\": 0.267,\n",
+ " \"Remove BNT from pools Proposal\": 0.133,\n",
+ " \"USDT liquidity Proposal\": 0.067\n",
+ " },\n",
+ " \"local_weights\": {\n",
+ " \"Airswap Proposal\": 0.533,\n",
+ " \"Enable deposits Proposal\": 0.267,\n",
+ " \"Remove BNT from pools Proposal\": 0.133,\n",
+ " \"USDT liquidity Proposal\": 0.067\n",
+ " },\n",
+ " \"consistency_ratio\": 0.0,\n",
+ " \"random_index\": \"Donegan & Dodd\",\n",
+ " \"count\": 4,\n",
+ " \"names\": [\n",
+ " \"Airswap Proposal\",\n",
+ " \"USDT liquidity Proposal\",\n",
+ " \"Remove BNT from pools Proposal\",\n",
+ " \"Enable deposits Proposal\"\n",
+ " ]\n",
+ " },\n",
+ " \"children\": null,\n",
+ " \"comparisons\": {\n",
+ " \"count\": 6,\n",
+ " \"input\": {\n",
+ " \"Airswap Proposal, USDT liquidity Proposal\": 8.0,\n",
+ " \"Airswap Proposal, Remove BNT from pools Proposal\": 4.0,\n",
+ " \"Airswap Proposal, Enable deposits Proposal\": 2.0,\n",
+ " \"USDT liquidity Proposal, Remove BNT from pools Proposal\": 0.5,\n",
+ " \"USDT liquidity Proposal, Enable deposits Proposal\": 0.25,\n",
+ " \"Remove BNT from pools Proposal, Enable deposits Proposal\": 0.5\n",
+ " },\n",
+ " \"computed\": null\n",
+ " }\n",
+ "}\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": " Airswap Proposal Enable deposits Proposal \\\nReputational Risk 0.533 0.267 \n\n Remove BNT from pools Proposal USDT liquidity Proposal \nReputational Risk 0.133 0.067 ",
+ "text/html": "\n\n
\n \n \n | \n Airswap Proposal | \n Enable deposits Proposal | \n Remove BNT from pools Proposal | \n USDT liquidity Proposal | \n
\n \n \n \n | Reputational Risk | \n 0.533 | \n 0.267 | \n 0.133 | \n 0.067 | \n
\n \n
\n
"
+ },
+ "execution_count": 1013,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "reputational_risk = ahpy.Compare('Reputational Risk', reputational_risk_comparisons, precision=3)\n",
+ "report = reputational_risk.report(show=True, verbose=True)\n",
+ "reputational_risk_df = pd.DataFrame(reputational_risk.target_weights, index=['Reputational Risk'])\n",
+ "# comparisons.append(reputational_risk_df)\n",
+ "reputational_risk_df\n"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1014,
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{\n",
+ " \"name\": \"LP Alienation Risk\",\n",
+ " \"global_weight\": 1.0,\n",
+ " \"local_weight\": 1.0,\n",
+ " \"target_weights\": {\n",
+ " \"USDT liquidity Proposal\": 0.562,\n",
+ " \"Airswap Proposal\": 0.188,\n",
+ " \"Enable deposits Proposal\": 0.188,\n",
+ " \"Remove BNT from pools Proposal\": 0.062\n",
+ " },\n",
+ " \"elements\": {\n",
+ " \"global_weights\": {\n",
+ " \"USDT liquidity Proposal\": 0.562,\n",
+ " \"Airswap Proposal\": 0.188,\n",
+ " \"Enable deposits Proposal\": 0.188,\n",
+ " \"Remove BNT from pools Proposal\": 0.062\n",
+ " },\n",
+ " \"local_weights\": {\n",
+ " \"USDT liquidity Proposal\": 0.562,\n",
+ " \"Airswap Proposal\": 0.188,\n",
+ " \"Enable deposits Proposal\": 0.188,\n",
+ " \"Remove BNT from pools Proposal\": 0.062\n",
+ " },\n",
+ " \"consistency_ratio\": 0.0,\n",
+ " \"random_index\": \"Donegan & Dodd\",\n",
+ " \"count\": 4,\n",
+ " \"names\": [\n",
+ " \"Airswap Proposal\",\n",
+ " \"USDT liquidity Proposal\",\n",
+ " \"Remove BNT from pools Proposal\",\n",
+ " \"Enable deposits Proposal\"\n",
+ " ]\n",
+ " },\n",
+ " \"children\": null,\n",
+ " \"comparisons\": {\n",
+ " \"count\": 6,\n",
+ " \"input\": {\n",
+ " \"Airswap Proposal, USDT liquidity Proposal\": 0.3333333333333333,\n",
+ " \"Airswap Proposal, Remove BNT from pools Proposal\": 3.0,\n",
+ " \"Airswap Proposal, Enable deposits Proposal\": 1.0,\n",
+ " \"USDT liquidity Proposal, Remove BNT from pools Proposal\": 9.0,\n",
+ " \"USDT liquidity Proposal, Enable deposits Proposal\": 3.0,\n",
+ " \"Remove BNT from pools Proposal, Enable deposits Proposal\": 0.3333333333333333\n",
+ " },\n",
+ " \"computed\": null\n",
+ " }\n",
+ "}\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": " USDT liquidity Proposal Airswap Proposal \\\nLP Alienation Risk 0.562 0.188 \n\n Enable deposits Proposal Remove BNT from pools Proposal \nLP Alienation Risk 0.188 0.062 ",
+ "text/html": "\n\n
\n \n \n | \n USDT liquidity Proposal | \n Airswap Proposal | \n Enable deposits Proposal | \n Remove BNT from pools Proposal | \n
\n \n \n \n | LP Alienation Risk | \n 0.562 | \n 0.188 | \n 0.188 | \n 0.062 | \n
\n \n
\n
"
+ },
+ "execution_count": 1014,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "\n",
+ "lp_alienation_risk = ahpy.Compare('LP Alienation Risk', lp_alienation_risk_comparisons, precision=3)\n",
+ "report = lp_alienation_risk.report(show=True, verbose=True)\n",
+ "lp_alienation_risk_df = pd.DataFrame(lp_alienation_risk.target_weights, index=['LP Alienation Risk'])\n",
+ "# comparisons.append(lp_alienation_risk_df)\n",
+ "lp_alienation_risk_df\n"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1015,
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{\n",
+ " \"name\": \"Security Risk\",\n",
+ " \"global_weight\": 1.0,\n",
+ " \"local_weight\": 1.0,\n",
+ " \"target_weights\": {\n",
+ " \"Airswap Proposal\": 0.429,\n",
+ " \"Enable deposits Proposal\": 0.286,\n",
+ " \"USDT liquidity Proposal\": 0.143,\n",
+ " \"Remove BNT from pools Proposal\": 0.143\n",
+ " },\n",
+ " \"elements\": {\n",
+ " \"global_weights\": {\n",
+ " \"Airswap Proposal\": 0.429,\n",
+ " \"Enable deposits Proposal\": 0.286,\n",
+ " \"USDT liquidity Proposal\": 0.143,\n",
+ " \"Remove BNT from pools Proposal\": 0.143\n",
+ " },\n",
+ " \"local_weights\": {\n",
+ " \"Airswap Proposal\": 0.429,\n",
+ " \"Enable deposits Proposal\": 0.286,\n",
+ " \"USDT liquidity Proposal\": 0.143,\n",
+ " \"Remove BNT from pools Proposal\": 0.143\n",
+ " },\n",
+ " \"consistency_ratio\": 0.0,\n",
+ " \"random_index\": \"Donegan & Dodd\",\n",
+ " \"count\": 4,\n",
+ " \"names\": [\n",
+ " \"Airswap Proposal\",\n",
+ " \"USDT liquidity Proposal\",\n",
+ " \"Remove BNT from pools Proposal\",\n",
+ " \"Enable deposits Proposal\"\n",
+ " ]\n",
+ " },\n",
+ " \"children\": null,\n",
+ " \"comparisons\": {\n",
+ " \"count\": 6,\n",
+ " \"input\": {\n",
+ " \"Airswap Proposal, USDT liquidity Proposal\": 3.0,\n",
+ " \"Airswap Proposal, Remove BNT from pools Proposal\": 3.0,\n",
+ " \"Airswap Proposal, Enable deposits Proposal\": 1.5,\n",
+ " \"USDT liquidity Proposal, Remove BNT from pools Proposal\": 1.0,\n",
+ " \"USDT liquidity Proposal, Enable deposits Proposal\": 0.5,\n",
+ " \"Remove BNT from pools Proposal, Enable deposits Proposal\": 0.5\n",
+ " },\n",
+ " \"computed\": null\n",
+ " }\n",
+ "}\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": " Airswap Proposal Enable deposits Proposal \\\nSecurity Risk 0.429 0.286 \n\n USDT liquidity Proposal Remove BNT from pools Proposal \nSecurity Risk 0.143 0.143 ",
+ "text/html": "\n\n
\n \n \n | \n Airswap Proposal | \n Enable deposits Proposal | \n USDT liquidity Proposal | \n Remove BNT from pools Proposal | \n
\n \n \n \n | Security Risk | \n 0.429 | \n 0.286 | \n 0.143 | \n 0.143 | \n
\n \n
\n
"
+ },
+ "execution_count": 1015,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "\n",
+ "security_risk = ahpy.Compare('Security Risk', security_risk_comparisons, precision=3)\n",
+ "report = security_risk.report(show=True, verbose=True)\n",
+ "security_risk_df = pd.DataFrame(security_risk.target_weights, index=['Security Risk'])\n",
+ "# comparisons.append(security_risk_df)\n",
+ "security_risk_df"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1016,
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{\n",
+ " \"name\": \"Risk\",\n",
+ " \"global_weight\": 1.0,\n",
+ " \"local_weight\": 1.0,\n",
+ " \"target_weights\": {},\n",
+ " \"elements\": {\n",
+ " \"global_weights\": {\n",
+ " \"Enable deposits Proposal\": 0.333,\n",
+ " \"USDT liquidity Proposal\": 0.259,\n",
+ " \"Remove BNT from pools Proposal\": 0.222,\n",
+ " \"Airswap Proposal\": 0.185\n",
+ " },\n",
+ " \"local_weights\": {\n",
+ " \"Enable deposits Proposal\": 0.333,\n",
+ " \"USDT liquidity Proposal\": 0.259,\n",
+ " \"Remove BNT from pools Proposal\": 0.222,\n",
+ " \"Airswap Proposal\": 0.185\n",
+ " },\n",
+ " \"consistency_ratio\": 0.0,\n",
+ " \"random_index\": \"Donegan & Dodd\",\n",
+ " \"count\": 4,\n",
+ " \"names\": [\n",
+ " \"Airswap Proposal\",\n",
+ " \"USDT liquidity Proposal\",\n",
+ " \"Remove BNT from pools Proposal\",\n",
+ " \"Enable deposits Proposal\"\n",
+ " ]\n",
+ " },\n",
+ " \"children\": {\n",
+ " \"count\": 4,\n",
+ " \"names\": [\n",
+ " \"Legal Risk\",\n",
+ " \"Reputational Risk\",\n",
+ " \"LP Alienation Risk\",\n",
+ " \"Security Risk\"\n",
+ " ]\n",
+ " },\n",
+ " \"comparisons\": {\n",
+ " \"count\": 6,\n",
+ " \"input\": {\n",
+ " \"Airswap Proposal, USDT liquidity Proposal\": 0.7142857142857143,\n",
+ " \"Airswap Proposal, Remove BNT from pools Proposal\": 0.8333333333333334,\n",
+ " \"Airswap Proposal, Enable deposits Proposal\": 0.5555555555555556,\n",
+ " \"USDT liquidity Proposal, Remove BNT from pools Proposal\": 1.1666666666666667,\n",
+ " \"USDT liquidity Proposal, Enable deposits Proposal\": 0.7777777777777778,\n",
+ " \"Remove BNT from pools Proposal, Enable deposits Proposal\": 0.6666666666666666\n",
+ " },\n",
+ " \"computed\": null\n",
+ " }\n",
+ "}\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": " Enable deposits Proposal USDT liquidity Proposal \\\nRisk 0.333 0.259 \n\n Remove BNT from pools Proposal Airswap Proposal \nRisk 0.222 0.185 ",
+ "text/html": "\n\n
\n \n \n | \n Enable deposits Proposal | \n USDT liquidity Proposal | \n Remove BNT from pools Proposal | \n Airswap Proposal | \n
\n \n \n \n | Risk | \n 0.333 | \n 0.259 | \n 0.222 | \n 0.185 | \n
\n \n
\n
"
+ },
+ "execution_count": 1016,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "risk = ahpy.Compare('Risk', risk_comparisons, precision=3)\n",
+ "risk.add_children([legal_risk, reputational_risk, lp_alienation_risk, security_risk])\n",
+ "report = risk.report(show=True, verbose=True)\n",
+ "risk_df = pd.DataFrame(report['elements']['global_weights'], index=['Risk'])\n",
+ "comparisons.append(risk_df)\n",
+ "risk_df"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1017,
+ "outputs": [
+ {
+ "data": {
+ "text/plain": " Remove BNT from pools Proposal Airswap Proposal \\\nFees 0.346 0.269 \nResources 0.450 0.400 \nDeficit 0.318 0.273 \nAlignment 0.222 0.259 \nRisk 0.222 0.185 \n\n USDT liquidity Proposal Enable deposits Proposal \nFees 0.192 0.192 \nResources 0.050 0.100 \nDeficit 0.227 0.182 \nAlignment 0.259 0.259 \nRisk 0.259 0.333 ",
+ "text/html": "\n\n
\n \n \n | \n Remove BNT from pools Proposal | \n Airswap Proposal | \n USDT liquidity Proposal | \n Enable deposits Proposal | \n
\n \n \n \n | Fees | \n 0.346 | \n 0.269 | \n 0.192 | \n 0.192 | \n
\n \n | Resources | \n 0.450 | \n 0.400 | \n 0.050 | \n 0.100 | \n
\n \n | Deficit | \n 0.318 | \n 0.273 | \n 0.227 | \n 0.182 | \n
\n \n | Alignment | \n 0.222 | \n 0.259 | \n 0.259 | \n 0.259 | \n
\n \n | Risk | \n 0.222 | \n 0.185 | \n 0.259 | \n 0.333 | \n
\n \n
\n
"
+ },
+ "execution_count": 1017,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "comparisons_df = pd.concat(comparisons)\n",
+ "comparisons_df"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1018,
+ "outputs": [
+ {
+ "data": {
+ "text/plain": " Fees Resources Deficit Alignment Risk\nRemove BNT from pools Proposal 0.346 0.45 0.318 0.222 0.222\nAirswap Proposal 0.269 0.40 0.273 0.259 0.185\nUSDT liquidity Proposal 0.192 0.05 0.227 0.259 0.259\nEnable deposits Proposal 0.192 0.10 0.182 0.259 0.333",
+ "text/html": "\n\n
\n \n \n | \n Fees | \n Resources | \n Deficit | \n Alignment | \n Risk | \n
\n \n \n \n | Remove BNT from pools Proposal | \n 0.346 | \n 0.45 | \n 0.318 | \n 0.222 | \n 0.222 | \n
\n \n | Airswap Proposal | \n 0.269 | \n 0.40 | \n 0.273 | \n 0.259 | \n 0.185 | \n
\n \n | USDT liquidity Proposal | \n 0.192 | \n 0.05 | \n 0.227 | \n 0.259 | \n 0.259 | \n
\n \n | Enable deposits Proposal | \n 0.192 | \n 0.10 | \n 0.182 | \n 0.259 | \n 0.333 | \n
\n \n
\n
"
+ },
+ "execution_count": 1018,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "comparisons_df.T"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1019,
+ "outputs": [],
+ "source": [
+ "totals = [\n",
+ " comparisons_df.T.iloc[0].sum(),\n",
+ " comparisons_df.T.iloc[1].sum(),\n",
+ " comparisons_df.T.iloc[2].sum(),\n",
+ " comparisons_df.T.iloc[3].sum(),\n",
+ "]\n"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1020,
+ "outputs": [
+ {
+ "data": {
+ "text/plain": " Fees Resources Deficit Alignment Risk \\\nRemove BNT from pools Proposal 0.346 0.45 0.318 0.222 0.222 \nAirswap Proposal 0.269 0.40 0.273 0.259 0.185 \nUSDT liquidity Proposal 0.192 0.05 0.227 0.259 0.259 \nEnable deposits Proposal 0.192 0.10 0.182 0.259 0.333 \n\n Total \nRemove BNT from pools Proposal 1.558 \nAirswap Proposal 1.386 \nUSDT liquidity Proposal 0.987 \nEnable deposits Proposal 1.066 ",
+ "text/html": "\n\n
\n \n \n | \n Fees | \n Resources | \n Deficit | \n Alignment | \n Risk | \n Total | \n
\n \n \n \n | Remove BNT from pools Proposal | \n 0.346 | \n 0.45 | \n 0.318 | \n 0.222 | \n 0.222 | \n 1.558 | \n
\n \n | Airswap Proposal | \n 0.269 | \n 0.40 | \n 0.273 | \n 0.259 | \n 0.185 | \n 1.386 | \n
\n \n | USDT liquidity Proposal | \n 0.192 | \n 0.05 | \n 0.227 | \n 0.259 | \n 0.259 | \n 0.987 | \n
\n \n | Enable deposits Proposal | \n 0.192 | \n 0.10 | \n 0.182 | \n 0.259 | \n 0.333 | \n 1.066 | \n
\n \n
\n
"
+ },
+ "execution_count": 1020,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "comparisons_df=comparisons_df.T\n",
+ "comparisons_df['Total']=totals\n",
+ "comparisons_df"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1022,
+ "outputs": [
+ {
+ "data": {
+ "text/plain": "Index(['Remove BNT from pools Proposal', 'Airswap Proposal',\n 'USDT liquidity Proposal', 'Enable deposits Proposal'],\n dtype='object')"
+ },
+ "execution_count": 1022,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "comparisons_df.index"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1025,
+ "outputs": [
+ {
+ "data": {
+ "text/plain": "(0.9989999999999999, 1.0000000000000002, 1.0)"
+ },
+ "execution_count": 1025,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "comparisons_df['Fees'].sum(),comparisons_df['Resources'].sum(),comparisons_df['Deficit'].sum()"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1028,
+ "outputs": [],
+ "source": [
+ "comparisons_df.to_csv('ahp_example.csv')"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "outputs": [],
+ "source": [],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 2
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython2",
+ "version": "2.7.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
\ No newline at end of file
diff --git a/examples/studies/ahp/ahp_example.csv b/examples/studies/ahp/ahp_example.csv
new file mode 100644
index 00000000..c0b37d38
--- /dev/null
+++ b/examples/studies/ahp/ahp_example.csv
@@ -0,0 +1,5 @@
+,Fees,Resources,Deficit,Alignment,Risk,Total
+Remove BNT from pools Proposal,0.346,0.45,0.318,0.222,0.222,1.558
+Airswap Proposal,0.269,0.4,0.273,0.259,0.185,1.3860000000000001
+USDT liquidity Proposal,0.192,0.05,0.227,0.259,0.259,0.987
+Enable deposits Proposal,0.192,0.1,0.182,0.259,0.333,1.066
diff --git a/examples/studies/join_tables.ipynb b/examples/studies/join_tables.ipynb
new file mode 100644
index 00000000..7de689ed
--- /dev/null
+++ b/examples/studies/join_tables.ipynb
@@ -0,0 +1 @@
+{"cells":[{"cell_type":"code","source":["total_liquidity = spark.sql('select * from default.events_poolcollection_totalliquidityupdated_csv')\n\n# convert to python\ntotal_liquidity = total_liquidity.toPandas()\n\n# convert to date\ntotal_liquidity['date'] = total_liquidity['time'].dt.date\n\n# sort by timestamp\ntotal_liquidity = total_liquidity.sort_values('time', ascending=False)\n\n# drop all but the last timestamp\ntotal_liquidity = total_liquidity.drop_duplicates(subset=['date', 'poolSymbol'])\n\n# keep only what we need\ntotal_liquidity = total_liquidity[['date', 'poolSymbol', 'liquidity_real', 'stakedBalance_real', 'poolTokenSupply_real']]\n\n#cleanup\ntotal_liquidity = total_liquidity.rename({'poolSymbol':'targetSymbol'}, axis=1)\ntotal_liquidity"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"169b59db-3107-4a7f-a46c-e48d17450614"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"/databricks/spark/python/pyspark/sql/pandas/utils.py:79: UserWarning: The conversion of DecimalType columns is inefficient and may take a long time. Column names: [liquidity, stakedBalance, poolTokenSupply] If those columns are not necessary, you may consider dropping them or converting to primitive types before the conversion.\n warnings.warn(\nOut[65]:
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n/databricks/spark/python/pyspark/sql/pandas/utils.py:79: UserWarning: The conversion of DecimalType columns is inefficient and may take a long time. Column names: [liquidity, stakedBalance, poolTokenSupply] If those columns are not necessary, you may consider dropping them or converting to primitive types before the conversion.\n warnings.warn(\nOut[65]:
"]}},{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"\n\n
\n \n \n | \n date | \n targetSymbol | \n liquidity_real | \n stakedBalance_real | \n poolTokenSupply_real | \n
\n \n \n \n | 7448 | \n 2022-07-31 | \n ocean | \n 6.912618e+05 | \n 6.843423e+05 | \n 6.843039e+05 | \n
\n \n | 7447 | \n 2022-07-31 | \n link | \n 1.953899e+06 | \n 3.559284e+06 | \n 3.545272e+06 | \n
\n \n | 7442 | \n 2022-07-31 | \n usdc | \n 1.545114e+06 | \n 2.700176e+06 | \n 2.693568e+06 | \n
\n \n | 7441 | \n 2022-07-31 | \n aave | \n 8.895992e+02 | \n 9.905408e+02 | \n 9.896419e+02 | \n
\n \n | 7440 | \n 2022-07-31 | \n eth | \n 8.271622e+03 | \n 1.637554e+04 | \n 1.633647e+04 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 31 | \n 2022-04-19 | \n dai | \n 1.718687e+05 | \n 1.718687e+05 | \n 1.718687e+05 | \n
\n \n | 30 | \n 2022-04-19 | \n eth | \n 5.711200e+01 | \n 5.711200e+01 | \n 5.711200e+01 | \n
\n \n | 29 | \n 2022-04-18 | \n dai | \n 1.718457e+05 | \n 1.718457e+05 | \n 1.718457e+05 | \n
\n \n | 25 | \n 2022-04-18 | \n link | \n 1.237110e+04 | \n 1.237110e+04 | \n 1.237110e+04 | \n
\n \n | 17 | \n 2022-04-18 | \n eth | \n 5.710200e+01 | \n 5.710200e+01 | \n 5.710200e+01 | \n
\n \n
\n
1360 rows × 5 columns
\n
","textData":null,"removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"htmlSandbox","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n\n
\n \n \n | \n date | \n targetSymbol | \n liquidity_real | \n stakedBalance_real | \n poolTokenSupply_real | \n
\n \n \n \n | 7448 | \n 2022-07-31 | \n ocean | \n 6.912618e+05 | \n 6.843423e+05 | \n 6.843039e+05 | \n
\n \n | 7447 | \n 2022-07-31 | \n link | \n 1.953899e+06 | \n 3.559284e+06 | \n 3.545272e+06 | \n
\n \n | 7442 | \n 2022-07-31 | \n usdc | \n 1.545114e+06 | \n 2.700176e+06 | \n 2.693568e+06 | \n
\n \n | 7441 | \n 2022-07-31 | \n aave | \n 8.895992e+02 | \n 9.905408e+02 | \n 9.896419e+02 | \n
\n \n | 7440 | \n 2022-07-31 | \n eth | \n 8.271622e+03 | \n 1.637554e+04 | \n 1.633647e+04 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 31 | \n 2022-04-19 | \n dai | \n 1.718687e+05 | \n 1.718687e+05 | \n 1.718687e+05 | \n
\n \n | 30 | \n 2022-04-19 | \n eth | \n 5.711200e+01 | \n 5.711200e+01 | \n 5.711200e+01 | \n
\n \n | 29 | \n 2022-04-18 | \n dai | \n 1.718457e+05 | \n 1.718457e+05 | \n 1.718457e+05 | \n
\n \n | 25 | \n 2022-04-18 | \n link | \n 1.237110e+04 | \n 1.237110e+04 | \n 1.237110e+04 | \n
\n \n | 17 | \n 2022-04-18 | \n eth | \n 5.710200e+01 | \n 5.710200e+01 | \n 5.710200e+01 | \n
\n \n
\n
1360 rows × 5 columns
\n
"]}}],"execution_count":0},{"cell_type":"code","source":["spot_rates = spark.sql('select * from default.events_v3_historical_spotrates_emarates_parquet')\nspot_rates = spot_rates.toPandas()\nspot_rates = spot_rates.rename({'poolSymbol':'targetSymbol'}, axis=1)\nspot_rates"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"Events - v3_historical_spotrates_emarates","showTitle":true,"inputWidgets":{},"nuid":"db5a4322-b7d1-48b4-b997-a2c974715ae8"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"Out[7]:
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\nOut[7]:
"]}},{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"\n\n
\n \n \n | \n blocknumber | \n time | \n targetSymbol | \n spotRate | \n emaRate | \n bntprice | \n spotRate_usd | \n emaRate_usd | \n
\n \n \n \n | 0 | \n 14625066 | \n 2022-04-20 | \n dai | \n 0.4367140288643459389036819938 | \n 0.4367140288643459389036776080 | \n 2.2966630695016823 | \n 1.002984982026035027163148242 | \n 1.002984982026035027163138169 | \n
\n \n | 1 | \n 14625066 | \n 2022-04-20 | \n eth | \n 1345.750198415145197216429676 | \n 1345.750198415145197206623839 | \n 2.2966630695016823 | \n 3090.734781474625359486062034 | \n 3090.734781474625359463541331 | \n
\n \n | 2 | \n 14625066 | \n 2022-04-20 | \n link | \n 6.078602620087336244542068687 | \n 6.078602620087336244541484716 | \n 2.2966630695016823 | \n 13.96050215173075005065636302 | \n 13.96050215173075005065502183 | \n
\n \n | 3 | \n 14625066 | \n 2022-04-20 | \n bnt | \n 1 | \n 1 | \n 2.2966630695016823 | \n 2.2966630695016823 | \n 2.2966630695016823 | \n
\n \n | 4 | \n 14631356 | \n 2022-04-21 | \n dai | \n 0.4367140288643459389036796103 | \n 0.4367140288643459389036776080 | \n 2.2848382209601885 | \n 0.9978209047787685848131251028 | \n 0.9978209047787685848131205279 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 4897 | \n 15253305 | \n 2022-07-31 | \n wsteth | \n 3150.605438862183002349325071 | \n 3222.200955037924168430422691 | \n 0.5687196261580798 | \n 1791.811147361313660293911392 | \n 1832.528922555375931418315045 | \n
\n \n | 4898 | \n 15253305 | \n 2022-07-31 | \n wxt | \n 0 | \n 0E+18 | \n 0.5687196261580798 | \n 0E-16 | \n 0E+2 | \n
\n \n | 4899 | \n 15253305 | \n 2022-07-31 | \n yfi | \n 19095.58648213066206067842982 | \n 19499.33223112877664638917964 | \n 0.5687196261580798 | \n 10860.03480538663230225934455 | \n 11089.65293681975395140237928 | \n
\n \n | 4900 | \n 15253305 | \n 2022-07-31 | \n zcn | \n 0.3373845262408244294475070551 | \n 0.3431324574798884287148608234 | \n 0.5687196261580798 | \n 0.1918772016352025338782938767 | \n 0.1951461629406653599523725750 | \n
\n \n | 4901 | \n 15253305 | \n 2022-07-31 | \n bnt | \n 1 | \n 1 | \n 0.5687196261580798 | \n 0.5687196261580798 | \n 0.5687196261580798 | \n
\n \n
\n
4902 rows × 8 columns
\n
","textData":null,"removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"htmlSandbox","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n\n
\n \n \n | \n blocknumber | \n time | \n targetSymbol | \n spotRate | \n emaRate | \n bntprice | \n spotRate_usd | \n emaRate_usd | \n
\n \n \n \n | 0 | \n 14625066 | \n 2022-04-20 | \n dai | \n 0.4367140288643459389036819938 | \n 0.4367140288643459389036776080 | \n 2.2966630695016823 | \n 1.002984982026035027163148242 | \n 1.002984982026035027163138169 | \n
\n \n | 1 | \n 14625066 | \n 2022-04-20 | \n eth | \n 1345.750198415145197216429676 | \n 1345.750198415145197206623839 | \n 2.2966630695016823 | \n 3090.734781474625359486062034 | \n 3090.734781474625359463541331 | \n
\n \n | 2 | \n 14625066 | \n 2022-04-20 | \n link | \n 6.078602620087336244542068687 | \n 6.078602620087336244541484716 | \n 2.2966630695016823 | \n 13.96050215173075005065636302 | \n 13.96050215173075005065502183 | \n
\n \n | 3 | \n 14625066 | \n 2022-04-20 | \n bnt | \n 1 | \n 1 | \n 2.2966630695016823 | \n 2.2966630695016823 | \n 2.2966630695016823 | \n
\n \n | 4 | \n 14631356 | \n 2022-04-21 | \n dai | \n 0.4367140288643459389036796103 | \n 0.4367140288643459389036776080 | \n 2.2848382209601885 | \n 0.9978209047787685848131251028 | \n 0.9978209047787685848131205279 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 4897 | \n 15253305 | \n 2022-07-31 | \n wsteth | \n 3150.605438862183002349325071 | \n 3222.200955037924168430422691 | \n 0.5687196261580798 | \n 1791.811147361313660293911392 | \n 1832.528922555375931418315045 | \n
\n \n | 4898 | \n 15253305 | \n 2022-07-31 | \n wxt | \n 0 | \n 0E+18 | \n 0.5687196261580798 | \n 0E-16 | \n 0E+2 | \n
\n \n | 4899 | \n 15253305 | \n 2022-07-31 | \n yfi | \n 19095.58648213066206067842982 | \n 19499.33223112877664638917964 | \n 0.5687196261580798 | \n 10860.03480538663230225934455 | \n 11089.65293681975395140237928 | \n
\n \n | 4900 | \n 15253305 | \n 2022-07-31 | \n zcn | \n 0.3373845262408244294475070551 | \n 0.3431324574798884287148608234 | \n 0.5687196261580798 | \n 0.1918772016352025338782938767 | \n 0.1951461629406653599523725750 | \n
\n \n | 4901 | \n 15253305 | \n 2022-07-31 | \n bnt | \n 1 | \n 1 | \n 0.5687196261580798 | \n 0.5687196261580798 | \n 0.5687196261580798 | \n
\n \n
\n
4902 rows × 8 columns
\n
"]}}],"execution_count":0},{"cell_type":"code","source":["trading_liquidity = spark.sql('select * from default.events_poolcollection_tradingliquidityupdated_spotrates_csv')\n\n# convert to pandas\ntrading_liquidity = trading_liquidity.toPandas()\n\n# convert to date\ntrading_liquidity['date'] = trading_liquidity['time'].dt.date\n\n# sort by datetime\ntrading_liquidity = trading_liquidity.sort_values('time', ascending=False)\n\n# keep only needed columns\ntrading_liquidity = trading_liquidity[[\n 'blocknumber', \n 'date', \n 'poolSymbol', \n 'tknTradingLiquidity_real', \n 'bntTradingLiquidity_real', \n 'spotRate', \n 'price'\n]]\n\ntrading_liquidity = trading_liquidity.rename({'poolSymbol':'targetSymbol'}, axis=1)\ntrading_liquidity"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"Events - poolcollection_tradingliquidityupdated_spotrates","showTitle":true,"inputWidgets":{},"nuid":"de7d552c-ad83-4638-9979-c5d374327bfd"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"Out[4]:
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\nOut[4]:
"]}},{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"\n\n
\n \n \n | \n blocknumber | \n date | \n targetSymbol | \n tknTradingLiquidity_real | \n bntTradingLiquidity_real | \n spotRate | \n price | \n
\n \n \n \n | 490763 | \n 15136844 | \n 2022-07-13 | \n temp | \n 4.063618e+05 | \n 3.579333e+04 | \n 0.088082 | \n 0.4518 | \n
\n \n | 490726 | \n 15136844 | \n 2022-07-13 | \n reth | \n 0.000000e+00 | \n 0.000000e+00 | \n 0.000000 | \n 0.4518 | \n
\n \n | 490737 | \n 15136844 | \n 2022-07-13 | \n mfg | \n 1.395533e+06 | \n 2.531836e+04 | \n 0.018142 | \n 0.4518 | \n
\n \n | 490736 | \n 15136844 | \n 2022-07-13 | \n usdc | \n 9.223219e+05 | \n 2.044195e+06 | \n 2.216357 | \n 0.4518 | \n
\n \n | 490735 | \n 15136844 | \n 2022-07-13 | \n mkr | \n 4.071976e+01 | \n 7.632130e+04 | \n 1874.306453 | \n 0.4518 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 3 | \n 14623208 | \n 2022-04-20 | \n eth | \n 1.486048e+01 | \n 2.000000e+04 | \n 1345.851528 | \n 2.2800 | \n
\n \n | 5 | \n 14623208 | \n 2022-04-20 | \n dai | \n 4.580000e+04 | \n 2.000000e+04 | \n 0.436681 | \n 2.2800 | \n
\n \n | 2 | \n 14623206 | \n 2022-04-20 | \n dai | \n 4.580000e+04 | \n 2.000000e+04 | \n 0.436681 | \n 2.2800 | \n
\n \n | 1 | \n 14623206 | \n 2022-04-20 | \n eth | \n 1.486048e+01 | \n 2.000000e+04 | \n 1345.851528 | \n 2.2800 | \n
\n \n | 0 | \n 14623202 | \n 2022-04-20 | \n eth | \n 1.486048e+01 | \n 2.000000e+04 | \n 1345.851528 | \n 2.2800 | \n
\n \n
\n
490764 rows × 7 columns
\n
","textData":null,"removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"htmlSandbox","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n\n
\n \n \n | \n blocknumber | \n date | \n targetSymbol | \n tknTradingLiquidity_real | \n bntTradingLiquidity_real | \n spotRate | \n price | \n
\n \n \n \n | 490763 | \n 15136844 | \n 2022-07-13 | \n temp | \n 4.063618e+05 | \n 3.579333e+04 | \n 0.088082 | \n 0.4518 | \n
\n \n | 490726 | \n 15136844 | \n 2022-07-13 | \n reth | \n 0.000000e+00 | \n 0.000000e+00 | \n 0.000000 | \n 0.4518 | \n
\n \n | 490737 | \n 15136844 | \n 2022-07-13 | \n mfg | \n 1.395533e+06 | \n 2.531836e+04 | \n 0.018142 | \n 0.4518 | \n
\n \n | 490736 | \n 15136844 | \n 2022-07-13 | \n usdc | \n 9.223219e+05 | \n 2.044195e+06 | \n 2.216357 | \n 0.4518 | \n
\n \n | 490735 | \n 15136844 | \n 2022-07-13 | \n mkr | \n 4.071976e+01 | \n 7.632130e+04 | \n 1874.306453 | \n 0.4518 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 3 | \n 14623208 | \n 2022-04-20 | \n eth | \n 1.486048e+01 | \n 2.000000e+04 | \n 1345.851528 | \n 2.2800 | \n
\n \n | 5 | \n 14623208 | \n 2022-04-20 | \n dai | \n 4.580000e+04 | \n 2.000000e+04 | \n 0.436681 | \n 2.2800 | \n
\n \n | 2 | \n 14623206 | \n 2022-04-20 | \n dai | \n 4.580000e+04 | \n 2.000000e+04 | \n 0.436681 | \n 2.2800 | \n
\n \n | 1 | \n 14623206 | \n 2022-04-20 | \n eth | \n 1.486048e+01 | \n 2.000000e+04 | \n 1345.851528 | \n 2.2800 | \n
\n \n | 0 | \n 14623202 | \n 2022-04-20 | \n eth | \n 1.486048e+01 | \n 2.000000e+04 | \n 1345.851528 | \n 2.2800 | \n
\n \n
\n
490764 rows × 7 columns
\n
"]}}],"execution_count":0},{"cell_type":"code","source":["events_bancornetwork_tokenstraded_updated_csv = spark.sql('select * from default.events_bancornetwork_tokenstraded_updated_csv')\nevents_bancornetwork_tokenstraded_updated_csv = events_bancornetwork_tokenstraded_updated_csv.toPandas()\n\ntrade_count = events_bancornetwork_tokenstraded_updated_csv.groupby(['blocknumber', 'targetSymbol'])[[\n 'sourceAmount_real']].count()\ntrade_count = trade_count.reset_index()\ntrade_count = trade_count.rename({'sourceAmount_real':'trade_count'}, axis=1)\ntrade_count"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"Events - tokenstraded_updated","showTitle":true,"inputWidgets":{},"nuid":"a103bbfe-6824-402d-bda1-07bd5ebd7339"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"Out[2]:
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\nOut[2]:
"]}},{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"\n\n
\n \n \n | \n blocknumber | \n targetSymbol | \n trade_count | \n
\n \n \n \n | 0 | \n 14623625 | \n dai | \n 1 | \n
\n \n | 1 | \n 14623992 | \n dai | \n 1 | \n
\n \n | 2 | \n 14624215 | \n dai | \n 1 | \n
\n \n | 3 | \n 14628426 | \n bnt | \n 1 | \n
\n \n | 4 | \n 14628429 | \n bnt | \n 1 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n
\n \n | 17641 | \n 15253029 | \n wbtc | \n 1 | \n
\n \n | 17642 | \n 15253034 | \n usdc | \n 1 | \n
\n \n | 17643 | \n 15253080 | \n woo | \n 1 | \n
\n \n | 17644 | \n 15253095 | \n wnxm | \n 1 | \n
\n \n | 17645 | \n 15253096 | \n wnxm | \n 1 | \n
\n \n
\n
17646 rows × 3 columns
\n
","textData":null,"removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"htmlSandbox","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n\n
\n \n \n | \n blocknumber | \n targetSymbol | \n trade_count | \n
\n \n \n \n | 0 | \n 14623625 | \n dai | \n 1 | \n
\n \n | 1 | \n 14623992 | \n dai | \n 1 | \n
\n \n | 2 | \n 14624215 | \n dai | \n 1 | \n
\n \n | 3 | \n 14628426 | \n bnt | \n 1 | \n
\n \n | 4 | \n 14628429 | \n bnt | \n 1 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n
\n \n | 17641 | \n 15253029 | \n wbtc | \n 1 | \n
\n \n | 17642 | \n 15253034 | \n usdc | \n 1 | \n
\n \n | 17643 | \n 15253080 | \n woo | \n 1 | \n
\n \n | 17644 | \n 15253095 | \n wnxm | \n 1 | \n
\n \n | 17645 | \n 15253096 | \n wnxm | \n 1 | \n
\n \n
\n
17646 rows × 3 columns
\n
"]}}],"execution_count":0},{"cell_type":"code","source":["trade_count['trade_count'].unique()"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"b1b5c8c8-24b1-404d-b015-e0ac6d93a860"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"Out[3]: array([1, 2, 3, 4, 5, 6])
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\nOut[3]: array([1, 2, 3, 4, 5, 6])
"]}}],"execution_count":0},{"cell_type":"code","source":["daily_trades = spark.sql('select * from default.events_combined_tokenstraded_daily_parquet')\ndaily_trades = daily_trades.toPandas()\ndaily_trades"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"Events - combined_tokenstraded_daily","showTitle":true,"inputWidgets":{},"nuid":"49443bb8-0ef4-4776-988a-ab7f88382b7b"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"Out[5]:
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\nOut[5]:
"]}},{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"\n\n
\n \n \n | \n time | \n v2_totalVolume_real | \n v2_totalVolume_real_bnt | \n v2_totalVolume_real_usd | \n v2_daily_tx_count | \n v2_daily_trade_count | \n v2_average_trade_size_usd | \n poolSymbol | \n v2_targetFeeAmount_real | \n v2_targetFeeAmount_real_bnt | \n v2_targetFeeAmount_real_usd | \n v2_actualTotalFees_real_usd | \n v2_average_fee_size_usd | \n v3_totalVolume_real | \n v3_totalVolume_real_bnt | \n v3_totalVolume_real_usd | \n v3_daily_tx_count | \n v3_daily_trade_count | \n v3_average_trade_size_usd | \n v3_targetFeeAmount_real | \n v3_targetFeeAmount_real_bnt | \n v3_targetFeeAmount_real_usd | \n v3_actualTotalFees_real_usd | \n v3_average_fee_size_usd | \n __index_level_0__ | \n
\n \n \n \n | 0 | \n 2022-01-01 | \n 4608.848378164935710148 | \n 7918.322504058137920432 | \n 26094.030114 | \n 2.0 | \n 2 | \n 13047.015057 | \n aave | \n 0.085072813908422931 | \n 6.717285491049108675 | \n 22.368560 | \n 22.368560 | \n 11.184280 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n
\n \n | 1 | \n 2022-01-01 | \n 6.564457235883314658 | \n 595.929884372800288980 | \n 1975.000389 | \n 2.0 | \n 2 | \n 987.5001945 | \n alcx | \n 0.013155224921609848 | \n 1.194248265276152793 | \n 3.957916 | \n 3.957916 | \n 1.978958 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 1 | \n
\n \n | 2 | \n 2022-01-01 | \n 15902.227692357448998316 | \n 3207.420806078097003823 | \n 10501.222684 | \n 7.0 | \n 7 | \n 1500.174669142857142857142857 | \n aleph | \n 30.879845332313141268 | \n 5.439350570230271541 | \n 17.812639 | \n 17.812639 | \n 2.544662714285714285714285714 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 2 | \n
\n \n | 3 | \n 2022-01-01 | \n 55643.000302957741468749 | \n 16164.000437033041199509 | \n 52745.909153 | \n 4.0 | \n 4 | \n 13186.47728825 | \n alpha | \n 99.758439526533671688 | \n 20.642207330291787381 | \n 67.281648 | \n 67.281648 | \n 16.820412 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 3 | \n
\n \n | 4 | \n 2022-01-01 | \n 6289.525366749284234357 | \n 6289.525366749284234357 | \n 20692.538456 | \n 1.0 | \n 1 | \n 20692.538456 | \n amp | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 4 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 21219 | \n 2022-07-23 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n vbnt | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 52270.307171814508909929 | \n 47149.68660825069492776345844 | \n 23881.13442069795089184057134 | \n 7.0 | \n 7 | \n 1695.485845923437346648596443 | \n 435.866736553418881934 | \n 356.8381934185755298295650850 | \n 180.7370698700110877124994117 | \n 181.4448845649799400245349117 | \n 25.9206977949971342892192731 | \n 21219 | \n
\n \n | 21220 | \n 2022-08-01 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n vbnt | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 8984.007389347564329533 | \n 8189.023526367364629562669387 | \n 4625.160487692287542776995670 | \n 1.0 | \n 1 | \n 2298.735793393418233691474070 | \n 74.086043104193075602 | \n 61.97968986083978067859726802 | \n 35.00612883340230812727173698 | \n 35.00612883340230812727173698 | \n 35.00612883340230812727173698 | \n 21220 | \n
\n \n | 21221 | \n 2022-07-27 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n wnxm | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 1806.441323378191226103 | \n 25393.69701819452008327895821 | \n 12829.19713691181335857905933 | \n 2.0 | \n 2 | \n 3202.751627747802830774644422 | \n 4.251678063239722136 | \n 128.0614773553445423741899562 | \n 64.70205308581419858887833340 | \n 88.64952164745429816059353338 | \n 44.32476082372714908029676669 | \n 21221 | \n
\n \n | 21222 | \n 2022-07-21 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n wsteth | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 4660.962833978745278730 | \n 559.5333854480719568705104399 | \n 290.3978270475493456157949183 | \n 1.0 | \n 1 | \n 147.0234727415913692791695221 | \n 0.000177416210343904 | \n 0.5676998418478215459146589231 | \n 0.2946362179190193823297079811 | \n 0.5861906219848937747647079810 | \n 0.5861906219848937747647079810 | \n 21222 | \n
\n \n | 21223 | \n 2022-07-27 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n wsteth | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 496.847404475920428868 | \n 2073.617365768558751147740828 | \n 1041.169950354220062581534564 | \n 2.0 | \n 2 | \n 265.2963295227463087231965464 | \n 0.000649874057830526 | \n 2.117202641561095917136017151 | \n 1.063311941974933449183849550 | \n 1.715721633697740271905449550 | \n 0.857860816848870135952724775 | \n 21223 | \n
\n \n
\n
21224 rows × 25 columns
\n
","textData":null,"removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"htmlSandbox","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n\n
\n \n \n | \n time | \n v2_totalVolume_real | \n v2_totalVolume_real_bnt | \n v2_totalVolume_real_usd | \n v2_daily_tx_count | \n v2_daily_trade_count | \n v2_average_trade_size_usd | \n poolSymbol | \n v2_targetFeeAmount_real | \n v2_targetFeeAmount_real_bnt | \n v2_targetFeeAmount_real_usd | \n v2_actualTotalFees_real_usd | \n v2_average_fee_size_usd | \n v3_totalVolume_real | \n v3_totalVolume_real_bnt | \n v3_totalVolume_real_usd | \n v3_daily_tx_count | \n v3_daily_trade_count | \n v3_average_trade_size_usd | \n v3_targetFeeAmount_real | \n v3_targetFeeAmount_real_bnt | \n v3_targetFeeAmount_real_usd | \n v3_actualTotalFees_real_usd | \n v3_average_fee_size_usd | \n __index_level_0__ | \n
\n \n \n \n | 0 | \n 2022-01-01 | \n 4608.848378164935710148 | \n 7918.322504058137920432 | \n 26094.030114 | \n 2.0 | \n 2 | \n 13047.015057 | \n aave | \n 0.085072813908422931 | \n 6.717285491049108675 | \n 22.368560 | \n 22.368560 | \n 11.184280 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n
\n \n | 1 | \n 2022-01-01 | \n 6.564457235883314658 | \n 595.929884372800288980 | \n 1975.000389 | \n 2.0 | \n 2 | \n 987.5001945 | \n alcx | \n 0.013155224921609848 | \n 1.194248265276152793 | \n 3.957916 | \n 3.957916 | \n 1.978958 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 1 | \n
\n \n | 2 | \n 2022-01-01 | \n 15902.227692357448998316 | \n 3207.420806078097003823 | \n 10501.222684 | \n 7.0 | \n 7 | \n 1500.174669142857142857142857 | \n aleph | \n 30.879845332313141268 | \n 5.439350570230271541 | \n 17.812639 | \n 17.812639 | \n 2.544662714285714285714285714 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 2 | \n
\n \n | 3 | \n 2022-01-01 | \n 55643.000302957741468749 | \n 16164.000437033041199509 | \n 52745.909153 | \n 4.0 | \n 4 | \n 13186.47728825 | \n alpha | \n 99.758439526533671688 | \n 20.642207330291787381 | \n 67.281648 | \n 67.281648 | \n 16.820412 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 3 | \n
\n \n | 4 | \n 2022-01-01 | \n 6289.525366749284234357 | \n 6289.525366749284234357 | \n 20692.538456 | \n 1.0 | \n 1 | \n 20692.538456 | \n amp | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 4 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 21219 | \n 2022-07-23 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n vbnt | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 52270.307171814508909929 | \n 47149.68660825069492776345844 | \n 23881.13442069795089184057134 | \n 7.0 | \n 7 | \n 1695.485845923437346648596443 | \n 435.866736553418881934 | \n 356.8381934185755298295650850 | \n 180.7370698700110877124994117 | \n 181.4448845649799400245349117 | \n 25.9206977949971342892192731 | \n 21219 | \n
\n \n | 21220 | \n 2022-08-01 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n vbnt | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 8984.007389347564329533 | \n 8189.023526367364629562669387 | \n 4625.160487692287542776995670 | \n 1.0 | \n 1 | \n 2298.735793393418233691474070 | \n 74.086043104193075602 | \n 61.97968986083978067859726802 | \n 35.00612883340230812727173698 | \n 35.00612883340230812727173698 | \n 35.00612883340230812727173698 | \n 21220 | \n
\n \n | 21221 | \n 2022-07-27 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n wnxm | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 1806.441323378191226103 | \n 25393.69701819452008327895821 | \n 12829.19713691181335857905933 | \n 2.0 | \n 2 | \n 3202.751627747802830774644422 | \n 4.251678063239722136 | \n 128.0614773553445423741899562 | \n 64.70205308581419858887833340 | \n 88.64952164745429816059353338 | \n 44.32476082372714908029676669 | \n 21221 | \n
\n \n | 21222 | \n 2022-07-21 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n wsteth | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 4660.962833978745278730 | \n 559.5333854480719568705104399 | \n 290.3978270475493456157949183 | \n 1.0 | \n 1 | \n 147.0234727415913692791695221 | \n 0.000177416210343904 | \n 0.5676998418478215459146589231 | \n 0.2946362179190193823297079811 | \n 0.5861906219848937747647079810 | \n 0.5861906219848937747647079810 | \n 21222 | \n
\n \n | 21223 | \n 2022-07-27 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n wsteth | \n 0 | \n 0 | \n 0 | \n 0 | \n 0 | \n 496.847404475920428868 | \n 2073.617365768558751147740828 | \n 1041.169950354220062581534564 | \n 2.0 | \n 2 | \n 265.2963295227463087231965464 | \n 0.000649874057830526 | \n 2.117202641561095917136017151 | \n 1.063311941974933449183849550 | \n 1.715721633697740271905449550 | \n 0.857860816848870135952724775 | \n 21223 | \n
\n \n
\n
21224 rows × 25 columns
\n
"]}}],"execution_count":0},{"cell_type":"code","source":["events_bancornetwork_tokenstraded_updated_csv = spark.sql('select * from default.events_bancornetwork_tokenstraded_updated_csv')\nevents_bancornetwork_tokenstraded_updated_csv = events_bancornetwork_tokenstraded_updated_csv.toPandas()\nevents_bancornetwork_tokenstraded_updated_csv['date'] = events_bancornetwork_tokenstraded_updated_csv['time'].dt.date\n\ntrade_revenue = events_bancornetwork_tokenstraded_updated_csv.groupby(['date', 'targetSymbol'])[[\n 'sourceAmount_real', \n 'sourceAmount_real_usd', \n 'targetAmount_real', \n 'targetAmount_real_usd', \n 'targetFeeAmount_real',\n 'targetFeeAmount_real_usd']].sum()\n\ntrade_revenue = trade_revenue.reset_index()\ntrade_revenue = trade_revenue.rename({'targetFeeAmount_real':'trade_revenue_real',\n 'targetFeeAmount_real_usd':'trade_revenue_usd'}, axis=1)\ntrade_revenue"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"29788b8c-fa3f-4010-aec9-9e7a7c270702"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"/databricks/spark/python/pyspark/sql/pandas/utils.py:79: UserWarning: The conversion of DecimalType columns is inefficient and may take a long time. Column names: [sourceAmount, targetAmount, bntAmount, targetFeeAmount, bntFeeAmount] If those columns are not necessary, you may consider dropping them or converting to primitive types before the conversion.\n warnings.warn(\nOut[68]:
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n/databricks/spark/python/pyspark/sql/pandas/utils.py:79: UserWarning: The conversion of DecimalType columns is inefficient and may take a long time. Column names: [sourceAmount, targetAmount, bntAmount, targetFeeAmount, bntFeeAmount] If those columns are not necessary, you may consider dropping them or converting to primitive types before the conversion.\n warnings.warn(\nOut[68]:
"]}},{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"\n\n
\n \n \n | \n date | \n targetSymbol | \n sourceAmount_real | \n sourceAmount_real_usd | \n targetAmount_real | \n targetAmount_real_usd | \n trade_revenue_real | \n trade_revenue_usd | \n
\n \n \n \n | 0 | \n 2022-04-20 | \n dai | \n 0.003000 | \n 9.176236 | \n 9.205342 | \n 9.140794 | \n 0.018448 | \n 0.018318 | \n
\n \n | 1 | \n 2022-04-21 | \n bnt | \n 0.002225 | \n 7.005821 | \n 2.987996 | \n 6.991911 | \n 0.005988 | \n 0.014012 | \n
\n \n | 2 | \n 2022-04-22 | \n bnt | \n 0.001000 | \n 3.027553 | \n 1.342914 | \n 3.021557 | \n 0.002691 | \n 0.006055 | \n
\n \n | 3 | \n 2022-04-22 | \n dai | \n 0.202159 | \n 601.632956 | \n 618.054738 | \n 601.526021 | \n 1.238587 | \n 1.205463 | \n
\n \n | 4 | \n 2022-04-23 | \n bnt | \n 0.856470 | \n 2496.187159 | \n 1136.475338 | \n 2511.610497 | \n 2.277506 | \n 5.033288 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 1796 | \n 2022-07-31 | \n wbtc | \n 116717.873292 | \n 62546.179165 | \n 2.637393 | \n 62402.531087 | \n 0.005285 | \n 125.052651 | \n
\n \n | 1797 | \n 2022-07-31 | \n wnxm | \n 119062.457517 | \n 119188.163998 | \n 5622.047552 | \n 118663.693036 | \n 56.788359 | \n 1198.623162 | \n
\n \n | 1798 | \n 2022-07-31 | \n woo | \n 64690.343936 | \n 54149.251861 | \n 235042.606679 | \n 54043.104665 | \n 471.027268 | \n 108.302815 | \n
\n \n | 1799 | \n 2022-07-31 | \n yfi | \n 24847.736556 | \n 2877.613971 | \n 0.237586 | \n 2885.977492 | \n 0.000476 | \n 5.783522 | \n
\n \n | 1800 | \n 2022-07-31 | \n zcn | \n 1918.903651 | \n 1026.620672 | \n 5223.585262 | \n 1028.945523 | \n 26.249172 | \n 5.170581 | \n
\n \n
\n
1801 rows × 8 columns
\n
","textData":null,"removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"htmlSandbox","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n\n
\n \n \n | \n date | \n targetSymbol | \n sourceAmount_real | \n sourceAmount_real_usd | \n targetAmount_real | \n targetAmount_real_usd | \n trade_revenue_real | \n trade_revenue_usd | \n
\n \n \n \n | 0 | \n 2022-04-20 | \n dai | \n 0.003000 | \n 9.176236 | \n 9.205342 | \n 9.140794 | \n 0.018448 | \n 0.018318 | \n
\n \n | 1 | \n 2022-04-21 | \n bnt | \n 0.002225 | \n 7.005821 | \n 2.987996 | \n 6.991911 | \n 0.005988 | \n 0.014012 | \n
\n \n | 2 | \n 2022-04-22 | \n bnt | \n 0.001000 | \n 3.027553 | \n 1.342914 | \n 3.021557 | \n 0.002691 | \n 0.006055 | \n
\n \n | 3 | \n 2022-04-22 | \n dai | \n 0.202159 | \n 601.632956 | \n 618.054738 | \n 601.526021 | \n 1.238587 | \n 1.205463 | \n
\n \n | 4 | \n 2022-04-23 | \n bnt | \n 0.856470 | \n 2496.187159 | \n 1136.475338 | \n 2511.610497 | \n 2.277506 | \n 5.033288 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 1796 | \n 2022-07-31 | \n wbtc | \n 116717.873292 | \n 62546.179165 | \n 2.637393 | \n 62402.531087 | \n 0.005285 | \n 125.052651 | \n
\n \n | 1797 | \n 2022-07-31 | \n wnxm | \n 119062.457517 | \n 119188.163998 | \n 5622.047552 | \n 118663.693036 | \n 56.788359 | \n 1198.623162 | \n
\n \n | 1798 | \n 2022-07-31 | \n woo | \n 64690.343936 | \n 54149.251861 | \n 235042.606679 | \n 54043.104665 | \n 471.027268 | \n 108.302815 | \n
\n \n | 1799 | \n 2022-07-31 | \n yfi | \n 24847.736556 | \n 2877.613971 | \n 0.237586 | \n 2885.977492 | \n 0.000476 | \n 5.783522 | \n
\n \n | 1800 | \n 2022-07-31 | \n zcn | \n 1918.903651 | \n 1026.620672 | \n 5223.585262 | \n 1028.945523 | \n 26.249172 | \n 5.170581 | \n
\n \n
\n
1801 rows × 8 columns
\n
"]}}],"execution_count":0},{"cell_type":"code","source":["trades_by_tkn = trade_count.merge(trade_revenue, on=['date', 'targetSymbol'])\ntrades_by_tkn"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"ea4534d8-54ea-48a0-ab89-2d98701a0083"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"Out[69]:
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\nOut[69]:
"]}},{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"\n\n
\n \n \n | \n date | \n targetSymbol | \n trade_count | \n sourceAmount_real | \n sourceAmount_real_usd | \n targetAmount_real | \n targetAmount_real_usd | \n trade_revenue_real | \n trade_revenue_usd | \n
\n \n \n \n | 0 | \n 2022-04-20 | \n dai | \n 3 | \n 0.003000 | \n 9.176236 | \n 9.205342 | \n 9.140794 | \n 0.018448 | \n 0.018318 | \n
\n \n | 1 | \n 2022-04-21 | \n bnt | \n 3 | \n 0.002225 | \n 7.005821 | \n 2.987996 | \n 6.991911 | \n 0.005988 | \n 0.014012 | \n
\n \n | 2 | \n 2022-04-22 | \n bnt | \n 1 | \n 0.001000 | \n 3.027553 | \n 1.342914 | \n 3.021557 | \n 0.002691 | \n 0.006055 | \n
\n \n | 3 | \n 2022-04-22 | \n dai | \n 2 | \n 0.202159 | \n 601.632956 | \n 618.054738 | \n 601.526021 | \n 1.238587 | \n 1.205463 | \n
\n \n | 4 | \n 2022-04-23 | \n bnt | \n 1 | \n 0.856470 | \n 2496.187159 | \n 1136.475338 | \n 2511.610497 | \n 2.277506 | \n 5.033288 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 1796 | \n 2022-07-31 | \n wbtc | \n 22 | \n 116717.873292 | \n 62546.179165 | \n 2.637393 | \n 62402.531087 | \n 0.005285 | \n 125.052651 | \n
\n \n | 1797 | \n 2022-07-31 | \n wnxm | \n 51 | \n 119062.457517 | \n 119188.163998 | \n 5622.047552 | \n 118663.693036 | \n 56.788359 | \n 1198.623162 | \n
\n \n | 1798 | \n 2022-07-31 | \n woo | \n 29 | \n 64690.343936 | \n 54149.251861 | \n 235042.606679 | \n 54043.104665 | \n 471.027268 | \n 108.302815 | \n
\n \n | 1799 | \n 2022-07-31 | \n yfi | \n 6 | \n 24847.736556 | \n 2877.613971 | \n 0.237586 | \n 2885.977492 | \n 0.000476 | \n 5.783522 | \n
\n \n | 1800 | \n 2022-07-31 | \n zcn | \n 2 | \n 1918.903651 | \n 1026.620672 | \n 5223.585262 | \n 1028.945523 | \n 26.249172 | \n 5.170581 | \n
\n \n
\n
1801 rows × 9 columns
\n
","textData":null,"removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"htmlSandbox","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n\n
\n \n \n | \n date | \n targetSymbol | \n trade_count | \n sourceAmount_real | \n sourceAmount_real_usd | \n targetAmount_real | \n targetAmount_real_usd | \n trade_revenue_real | \n trade_revenue_usd | \n
\n \n \n \n | 0 | \n 2022-04-20 | \n dai | \n 3 | \n 0.003000 | \n 9.176236 | \n 9.205342 | \n 9.140794 | \n 0.018448 | \n 0.018318 | \n
\n \n | 1 | \n 2022-04-21 | \n bnt | \n 3 | \n 0.002225 | \n 7.005821 | \n 2.987996 | \n 6.991911 | \n 0.005988 | \n 0.014012 | \n
\n \n | 2 | \n 2022-04-22 | \n bnt | \n 1 | \n 0.001000 | \n 3.027553 | \n 1.342914 | \n 3.021557 | \n 0.002691 | \n 0.006055 | \n
\n \n | 3 | \n 2022-04-22 | \n dai | \n 2 | \n 0.202159 | \n 601.632956 | \n 618.054738 | \n 601.526021 | \n 1.238587 | \n 1.205463 | \n
\n \n | 4 | \n 2022-04-23 | \n bnt | \n 1 | \n 0.856470 | \n 2496.187159 | \n 1136.475338 | \n 2511.610497 | \n 2.277506 | \n 5.033288 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 1796 | \n 2022-07-31 | \n wbtc | \n 22 | \n 116717.873292 | \n 62546.179165 | \n 2.637393 | \n 62402.531087 | \n 0.005285 | \n 125.052651 | \n
\n \n | 1797 | \n 2022-07-31 | \n wnxm | \n 51 | \n 119062.457517 | \n 119188.163998 | \n 5622.047552 | \n 118663.693036 | \n 56.788359 | \n 1198.623162 | \n
\n \n | 1798 | \n 2022-07-31 | \n woo | \n 29 | \n 64690.343936 | \n 54149.251861 | \n 235042.606679 | \n 54043.104665 | \n 471.027268 | \n 108.302815 | \n
\n \n | 1799 | \n 2022-07-31 | \n yfi | \n 6 | \n 24847.736556 | \n 2877.613971 | \n 0.237586 | \n 2885.977492 | \n 0.000476 | \n 5.783522 | \n
\n \n | 1800 | \n 2022-07-31 | \n zcn | \n 2 | \n 1918.903651 | \n 1026.620672 | \n 5223.585262 | \n 1028.945523 | \n 26.249172 | \n 5.170581 | \n
\n \n
\n
1801 rows × 9 columns
\n
"]}}],"execution_count":0},{"cell_type":"code","source":["deficit_by_tkn = spark.sql('select * from default.events_v3_historical_deficit_by_tkn_csv')\ndeficit_by_tkn = deficit_by_tkn.toPandas()\ndeficit_by_tkn = deficit_by_tkn.rename({'time': 'date', 'poolSymbol':'targetSymbol'}, axis=1)\ndeficit_by_tkn = deficit_by_tkn.drop(['_c0', 'bntprice'], axis=1)\ndeficit_by_tkn"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":true,"inputWidgets":{},"nuid":"70d33053-89d7-44ea-9b9d-365ad3229cc8"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"Out[10]:
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\nOut[10]:
"]}},{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"\n\n
\n \n \n | \n targetSymbol | \n blocknumber | \n date | \n surplus_tkn | \n surplus_bnt | \n surplus_usd | \n surplus_perc | \n
\n \n \n \n | 0 | \n dai | \n 14625066 | \n 2022-04-20 | \n -9.221023e+00 | \n -4.026950e+00 | \n -9.248547e+00 | \n -0.000054 | \n
\n \n | 1 | \n eth | \n 14625066 | \n 2022-04-20 | \n 3.000000e-03 | \n 4.037251e+00 | \n 9.272204e+00 | \n 0.000053 | \n
\n \n | 2 | \n link | \n 14625066 | \n 2022-04-20 | \n 0.000000e+00 | \n 0.000000e+00 | \n 0.000000e+00 | \n 0.000000 | \n
\n \n | 3 | \n bnt | \n 14625066 | \n 2022-04-20 | \n -6.862458e-03 | \n -6.862458e-03 | \n -1.576075e-02 | \n -0.000000 | \n
\n \n | 4 | \n dai | \n 14631356 | \n 2022-04-21 | \n -9.221023e+00 | \n -4.026950e+00 | \n -9.200929e+00 | \n -0.000036 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 4803 | \n wsteth | \n 15246902 | \n 2022-07-30 | \n -8.002986e-01 | \n -2.578723e+03 | \n -1.455777e+03 | \n -0.044810 | \n
\n \n | 4804 | \n wxt | \n 15246902 | \n 2022-07-30 | \n -7.305932e+04 | \n -0.000000e+00 | \n -0.000000e+00 | \n -0.755542 | \n
\n \n | 4805 | \n yfi | \n 15246902 | \n 2022-07-30 | \n -1.200985e+00 | \n -2.402642e+04 | \n -1.356373e+04 | \n -0.202276 | \n
\n \n | 4806 | \n zcn | \n 15246902 | \n 2022-07-30 | \n -5.653728e+05 | \n -2.004780e+05 | \n -1.131767e+05 | \n -0.623519 | \n
\n \n | 4807 | \n bnt | \n 15246902 | \n 2022-07-30 | \n 4.081710e+07 | \n 4.081710e+07 | \n 2.304265e+07 | \n 0.934543 | \n
\n \n
\n
4808 rows × 7 columns
\n
","textData":null,"removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"htmlSandbox","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n\n
\n \n \n | \n targetSymbol | \n blocknumber | \n date | \n surplus_tkn | \n surplus_bnt | \n surplus_usd | \n surplus_perc | \n
\n \n \n \n | 0 | \n dai | \n 14625066 | \n 2022-04-20 | \n -9.221023e+00 | \n -4.026950e+00 | \n -9.248547e+00 | \n -0.000054 | \n
\n \n | 1 | \n eth | \n 14625066 | \n 2022-04-20 | \n 3.000000e-03 | \n 4.037251e+00 | \n 9.272204e+00 | \n 0.000053 | \n
\n \n | 2 | \n link | \n 14625066 | \n 2022-04-20 | \n 0.000000e+00 | \n 0.000000e+00 | \n 0.000000e+00 | \n 0.000000 | \n
\n \n | 3 | \n bnt | \n 14625066 | \n 2022-04-20 | \n -6.862458e-03 | \n -6.862458e-03 | \n -1.576075e-02 | \n -0.000000 | \n
\n \n | 4 | \n dai | \n 14631356 | \n 2022-04-21 | \n -9.221023e+00 | \n -4.026950e+00 | \n -9.200929e+00 | \n -0.000036 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 4803 | \n wsteth | \n 15246902 | \n 2022-07-30 | \n -8.002986e-01 | \n -2.578723e+03 | \n -1.455777e+03 | \n -0.044810 | \n
\n \n | 4804 | \n wxt | \n 15246902 | \n 2022-07-30 | \n -7.305932e+04 | \n -0.000000e+00 | \n -0.000000e+00 | \n -0.755542 | \n
\n \n | 4805 | \n yfi | \n 15246902 | \n 2022-07-30 | \n -1.200985e+00 | \n -2.402642e+04 | \n -1.356373e+04 | \n -0.202276 | \n
\n \n | 4806 | \n zcn | \n 15246902 | \n 2022-07-30 | \n -5.653728e+05 | \n -2.004780e+05 | \n -1.131767e+05 | \n -0.623519 | \n
\n \n | 4807 | \n bnt | \n 15246902 | \n 2022-07-30 | \n 4.081710e+07 | \n 4.081710e+07 | \n 2.304265e+07 | \n 0.934543 | \n
\n \n
\n
4808 rows × 7 columns
\n
"]}}],"execution_count":0},{"cell_type":"code","source":["spot_rates['blocknumber']=spot_rates['blocknumber'].astype(int)\ndeficit_by_tkn['blocknumber']=deficit_by_tkn['blocknumber'].astype(int)\n\ndf = spot_rates.merge(deficit_by_tkn, on=['blocknumber', 'targetSymbol'])\ndf"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"98b71b8f-38ca-4327-bf09-7ba0b9506efa"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"Out[14]:
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\nOut[14]:
"]}},{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"\n\n
\n \n \n | \n blocknumber | \n time | \n targetSymbol | \n spotRate | \n emaRate | \n bntprice | \n spotRate_usd | \n emaRate_usd | \n date | \n surplus_tkn | \n surplus_bnt | \n surplus_usd | \n surplus_perc | \n
\n \n \n \n | 0 | \n 14625066 | \n 2022-04-20 | \n dai | \n 0.4367140288643459389036819938 | \n 0.4367140288643459389036776080 | \n 2.2966630695016823 | \n 1.002984982026035027163148242 | \n 1.002984982026035027163138169 | \n 2022-04-20 | \n -9.221023e+00 | \n -4.026950e+00 | \n -9.248547e+00 | \n -0.000054 | \n
\n \n | 1 | \n 14625066 | \n 2022-04-20 | \n eth | \n 1345.750198415145197216429676 | \n 1345.750198415145197206623839 | \n 2.2966630695016823 | \n 3090.734781474625359486062034 | \n 3090.734781474625359463541331 | \n 2022-04-20 | \n 3.000000e-03 | \n 4.037251e+00 | \n 9.272204e+00 | \n 0.000053 | \n
\n \n | 2 | \n 14625066 | \n 2022-04-20 | \n link | \n 6.078602620087336244542068687 | \n 6.078602620087336244541484716 | \n 2.2966630695016823 | \n 13.96050215173075005065636302 | \n 13.96050215173075005065502183 | \n 2022-04-20 | \n 0.000000e+00 | \n 0.000000e+00 | \n 0.000000e+00 | \n 0.000000 | \n
\n \n | 3 | \n 14625066 | \n 2022-04-20 | \n bnt | \n 1 | \n 1 | \n 2.2966630695016823 | \n 2.2966630695016823 | \n 2.2966630695016823 | \n 2022-04-20 | \n -6.862458e-03 | \n -6.862458e-03 | \n -1.576075e-02 | \n -0.000000 | \n
\n \n | 4 | \n 14631356 | \n 2022-04-21 | \n dai | \n 0.4367140288643459389036796103 | \n 0.4367140288643459389036776080 | \n 2.2848382209601885 | \n 0.9978209047787685848131251028 | \n 0.9978209047787685848131205279 | \n 2022-04-21 | \n -9.221023e+00 | \n -4.026950e+00 | \n -9.200929e+00 | \n -0.000036 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 4803 | \n 15246902 | \n 2022-07-30 | \n wsteth | \n 3150.605438862183002349325071 | \n 3222.200955037924168430422691 | \n 0.5645341821237347 | \n 1778.624464622652710761560862 | \n 1819.042580790651367914229933 | \n 2022-07-30 | \n -8.002986e-01 | \n -2.578723e+03 | \n -1.455777e+03 | \n -0.044810 | \n
\n \n | 4804 | \n 15246902 | \n 2022-07-30 | \n wxt | \n 0 | \n 0E+18 | \n 0.5645341821237347 | \n 0E-16 | \n 0E+2 | \n 2022-07-30 | \n -7.305932e+04 | \n -0.000000e+00 | \n -0.000000e+00 | \n -0.755542 | \n
\n \n | 4805 | \n 15246902 | \n 2022-07-30 | \n yfi | \n 20385.06877607308056637746287 | \n 20005.58997148066921845637283 | \n 0.5645341821237347 | \n 11508.06812903649807924676751 | \n 11293.83937245262859949801690 | \n 2022-07-30 | \n -1.200985e+00 | \n -2.402642e+04 | \n -1.356373e+04 | \n -0.202276 | \n
\n \n | 4806 | \n 15246902 | \n 2022-07-30 | \n zcn | \n 0.3511248714015129636705823229 | \n 0.3545943465946885433009921828 | \n 0.5645341821237347 | \n 0.1982219920999546451335726952 | \n 0.2001806294405326074347870102 | \n 2022-07-30 | \n -5.653728e+05 | \n -2.004780e+05 | \n -1.131767e+05 | \n -0.623519 | \n
\n \n | 4807 | \n 15246902 | \n 2022-07-30 | \n bnt | \n 1 | \n 1 | \n 0.5645341821237347 | \n 0.5645341821237347 | \n 0.5645341821237347 | \n 2022-07-30 | \n 4.081710e+07 | \n 4.081710e+07 | \n 2.304265e+07 | \n 0.934543 | \n
\n \n
\n
4808 rows × 13 columns
\n
","textData":null,"removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"htmlSandbox","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n\n
\n \n \n | \n blocknumber | \n time | \n targetSymbol | \n spotRate | \n emaRate | \n bntprice | \n spotRate_usd | \n emaRate_usd | \n date | \n surplus_tkn | \n surplus_bnt | \n surplus_usd | \n surplus_perc | \n
\n \n \n \n | 0 | \n 14625066 | \n 2022-04-20 | \n dai | \n 0.4367140288643459389036819938 | \n 0.4367140288643459389036776080 | \n 2.2966630695016823 | \n 1.002984982026035027163148242 | \n 1.002984982026035027163138169 | \n 2022-04-20 | \n -9.221023e+00 | \n -4.026950e+00 | \n -9.248547e+00 | \n -0.000054 | \n
\n \n | 1 | \n 14625066 | \n 2022-04-20 | \n eth | \n 1345.750198415145197216429676 | \n 1345.750198415145197206623839 | \n 2.2966630695016823 | \n 3090.734781474625359486062034 | \n 3090.734781474625359463541331 | \n 2022-04-20 | \n 3.000000e-03 | \n 4.037251e+00 | \n 9.272204e+00 | \n 0.000053 | \n
\n \n | 2 | \n 14625066 | \n 2022-04-20 | \n link | \n 6.078602620087336244542068687 | \n 6.078602620087336244541484716 | \n 2.2966630695016823 | \n 13.96050215173075005065636302 | \n 13.96050215173075005065502183 | \n 2022-04-20 | \n 0.000000e+00 | \n 0.000000e+00 | \n 0.000000e+00 | \n 0.000000 | \n
\n \n | 3 | \n 14625066 | \n 2022-04-20 | \n bnt | \n 1 | \n 1 | \n 2.2966630695016823 | \n 2.2966630695016823 | \n 2.2966630695016823 | \n 2022-04-20 | \n -6.862458e-03 | \n -6.862458e-03 | \n -1.576075e-02 | \n -0.000000 | \n
\n \n | 4 | \n 14631356 | \n 2022-04-21 | \n dai | \n 0.4367140288643459389036796103 | \n 0.4367140288643459389036776080 | \n 2.2848382209601885 | \n 0.9978209047787685848131251028 | \n 0.9978209047787685848131205279 | \n 2022-04-21 | \n -9.221023e+00 | \n -4.026950e+00 | \n -9.200929e+00 | \n -0.000036 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 4803 | \n 15246902 | \n 2022-07-30 | \n wsteth | \n 3150.605438862183002349325071 | \n 3222.200955037924168430422691 | \n 0.5645341821237347 | \n 1778.624464622652710761560862 | \n 1819.042580790651367914229933 | \n 2022-07-30 | \n -8.002986e-01 | \n -2.578723e+03 | \n -1.455777e+03 | \n -0.044810 | \n
\n \n | 4804 | \n 15246902 | \n 2022-07-30 | \n wxt | \n 0 | \n 0E+18 | \n 0.5645341821237347 | \n 0E-16 | \n 0E+2 | \n 2022-07-30 | \n -7.305932e+04 | \n -0.000000e+00 | \n -0.000000e+00 | \n -0.755542 | \n
\n \n | 4805 | \n 15246902 | \n 2022-07-30 | \n yfi | \n 20385.06877607308056637746287 | \n 20005.58997148066921845637283 | \n 0.5645341821237347 | \n 11508.06812903649807924676751 | \n 11293.83937245262859949801690 | \n 2022-07-30 | \n -1.200985e+00 | \n -2.402642e+04 | \n -1.356373e+04 | \n -0.202276 | \n
\n \n | 4806 | \n 15246902 | \n 2022-07-30 | \n zcn | \n 0.3511248714015129636705823229 | \n 0.3545943465946885433009921828 | \n 0.5645341821237347 | \n 0.1982219920999546451335726952 | \n 0.2001806294405326074347870102 | \n 2022-07-30 | \n -5.653728e+05 | \n -2.004780e+05 | \n -1.131767e+05 | \n -0.623519 | \n
\n \n | 4807 | \n 15246902 | \n 2022-07-30 | \n bnt | \n 1 | \n 1 | \n 0.5645341821237347 | \n 0.5645341821237347 | \n 0.5645341821237347 | \n 2022-07-30 | \n 4.081710e+07 | \n 4.081710e+07 | \n 2.304265e+07 | \n 0.934543 | \n
\n \n
\n
4808 rows × 13 columns
\n
"]}}],"execution_count":0},{"cell_type":"code","source":["import pandas as pd\n\ndeficit_by_tkn['date'] = pd.to_datetime(deficit_by_tkn['date']).dt.date\ntrades_by_tkn['date'] = pd.to_datetime(trades_by_tkn['date']).dt.date\ntotal_liquidity['date'] = pd.to_datetime(total_liquidity['date']).dt.date\ntrading_liquidity['date'] = pd.to_datetime(trading_liquidity['date']).dt.date\n\ndf = trades_by_tkn.merge(deficit_by_tkn, on=['date', 'targetSymbol'])\ndf = df.merge(trading_liquidity, on=['date', 'targetSymbol'])\ndf = df.merge(total_liquidity, on=['date', 'targetSymbol'])\n\ndf"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"Primary Joins","showTitle":true,"inputWidgets":{},"nuid":"4ba2918c-a259-49aa-a384-8443740d7ac7"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"Out[71]:
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\nOut[71]:
"]}},{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"\n\n
\n \n \n | \n date | \n targetSymbol | \n trade_count | \n sourceAmount_real | \n sourceAmount_real_usd | \n targetAmount_real | \n targetAmount_real_usd | \n trade_revenue_real | \n trade_revenue_usd | \n bntprice | \n surplus_tkn | \n surplus_bnt | \n surplus_usd | \n surplus_perc | \n tknTradingLiquidity_real | \n bntTradingLiquidity_real | \n spotRate | \n price | \n liquidity_real | \n stakedBalance_real | \n poolTokenSupply_real | \n
\n \n \n \n | 0 | \n 2022-04-20 | \n dai | \n 3 | \n 0.003000 | \n 9.176236 | \n 9.205342 | \n 9.140794 | \n 0.018448 | \n 0.018318 | \n 2.296663 | \n -9.221023e+00 | \n -4.026950e+00 | \n -9.248547e+00 | \n -0.000054 | \n 9.161156e+04 | \n 4.000805e+04 | \n 0.436714 | \n 2.2900 | \n 1.718604e+05 | \n 1.718697e+05 | \n 1.718697e+05 | \n
\n \n | 1 | \n 2022-04-22 | \n dai | \n 2 | \n 0.202159 | \n 601.632956 | \n 618.054738 | \n 601.526021 | \n 1.238587 | \n 1.205463 | \n 2.231059 | \n -6.283286e+02 | \n -2.744009e+02 | \n -6.122045e+02 | \n -0.001828 | \n 3.202751e+05 | \n 1.404095e+05 | \n 0.438403 | \n 2.2200 | \n 3.437408e+05 | \n 3.437500e+05 | \n 3.437500e+05 | \n
\n \n | 2 | \n 2022-04-25 | \n eth | \n 1 | \n 1628.103621 | \n 3614.390039 | \n 1.217790 | \n 3649.399144 | \n 0.002440 | \n 7.313425 | \n 2.190786 | \n -1.550104e-01 | \n -2.076344e+02 | \n -4.548826e+02 | \n -0.001337 | \n 1.039690e+02 | \n 1.403459e+05 | \n 1349.882510 | \n 2.2200 | \n 1.169769e+02 | \n 1.159120e+02 | \n 1.159120e+02 | \n
\n \n | 3 | \n 2022-04-26 | \n dai | \n 3 | \n 7525.703648 | \n 15846.229453 | \n 16368.808603 | \n 15957.237984 | \n 32.803224 | \n 31.978433 | \n 2.214641 | \n -2.101020e+04 | \n -9.493450e+03 | \n -2.102459e+04 | \n -0.030559 | \n 6.197640e+05 | \n 2.918862e+05 | \n 0.470963 | \n 2.0700 | \n 6.828865e+05 | \n 6.875000e+05 | \n 6.874721e+05 | \n
\n \n | 4 | \n 2022-04-26 | \n eth | \n 1 | \n 2403.614895 | \n 5071.627429 | \n 1.801257 | \n 5103.502330 | \n 0.003610 | \n 10.227460 | \n 2.214641 | \n 1.366771e+00 | \n 1.827579e+03 | \n 4.047433e+03 | \n 0.005718 | \n 2.187025e+02 | \n 2.888900e+05 | \n 1320.926933 | \n 2.0700 | \n 2.388591e+02 | \n 2.390141e+02 | \n 2.390098e+02 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 572 | \n 2022-07-13 | \n ren | \n 3 | \n 1768.630143 | \n 1315.906537 | \n 11368.242105 | \n 1331.755493 | \n 22.782048 | \n 2.668849 | \n 0.439336 | \n -2.925943e+04 | \n -7.788998e+03 | \n -3.421986e+03 | \n -0.074199 | \n 3.650763e+05 | \n 9.888587e+04 | \n 0.270864 | \n 0.4518 | \n 3.654831e+05 | \n 3.943198e+05 | \n 3.938701e+05 | \n
\n \n | 573 | \n 2022-07-13 | \n usdc | \n 11 | \n 12820.582315 | \n 39171.489157 | \n 40310.194464 | \n 40287.308795 | \n 407.173676 | \n 406.942508 | \n 0.439336 | \n -1.319153e+06 | \n -2.915052e+06 | \n -1.280687e+06 | \n -0.538241 | \n 9.223219e+05 | \n 2.044195e+06 | \n 2.216357 | \n 0.4518 | \n 1.112240e+06 | \n 2.450837e+06 | \n 2.447838e+06 | \n
\n \n | 574 | \n 2022-07-13 | \n vbnt | \n 13 | \n 17417.396004 | \n 17347.157459 | \n 49549.095840 | \n 17188.881593 | \n 754.554759 | \n 261.759618 | \n 0.439336 | \n -5.969363e+04 | \n -4.785695e+04 | \n -2.102528e+04 | \n -0.015282 | \n 1.550398e+06 | \n 1.250088e+06 | \n 0.806302 | \n 0.4518 | \n 3.851069e+06 | \n 3.906057e+06 | \n 3.889583e+06 | \n
\n \n | 575 | \n 2022-07-13 | \n wbtc | \n 8 | \n 77132.736065 | \n 40043.358891 | \n 2.075963 | \n 39984.699361 | \n 0.004160 | \n 80.128950 | \n 0.439336 | \n -1.634478e+02 | \n -7.133886e+06 | \n -3.134172e+06 | \n -0.483749 | \n 1.746781e+02 | \n 7.624048e+06 | \n 43646.270867 | \n 0.4518 | \n 1.746781e+02 | \n 3.378767e+02 | \n 3.378000e+02 | \n
\n \n | 576 | \n 2022-07-13 | \n zcn | \n 3 | \n 2857.359303 | \n 1643.043365 | \n 8442.390858 | \n 1667.280439 | \n 42.424075 | \n 8.378294 | \n 0.439336 | \n -5.465076e+05 | \n -2.432456e+05 | \n -1.068665e+05 | \n -0.655215 | \n 2.875819e+05 | \n 1.280001e+05 | \n 0.445091 | \n 0.4518 | \n 2.875819e+05 | \n 8.340895e+05 | \n 8.329419e+05 | \n
\n \n
\n
577 rows × 21 columns
\n
","textData":null,"removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"htmlSandbox","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n\n
\n \n \n | \n date | \n targetSymbol | \n trade_count | \n sourceAmount_real | \n sourceAmount_real_usd | \n targetAmount_real | \n targetAmount_real_usd | \n trade_revenue_real | \n trade_revenue_usd | \n bntprice | \n surplus_tkn | \n surplus_bnt | \n surplus_usd | \n surplus_perc | \n tknTradingLiquidity_real | \n bntTradingLiquidity_real | \n spotRate | \n price | \n liquidity_real | \n stakedBalance_real | \n poolTokenSupply_real | \n
\n \n \n \n | 0 | \n 2022-04-20 | \n dai | \n 3 | \n 0.003000 | \n 9.176236 | \n 9.205342 | \n 9.140794 | \n 0.018448 | \n 0.018318 | \n 2.296663 | \n -9.221023e+00 | \n -4.026950e+00 | \n -9.248547e+00 | \n -0.000054 | \n 9.161156e+04 | \n 4.000805e+04 | \n 0.436714 | \n 2.2900 | \n 1.718604e+05 | \n 1.718697e+05 | \n 1.718697e+05 | \n
\n \n | 1 | \n 2022-04-22 | \n dai | \n 2 | \n 0.202159 | \n 601.632956 | \n 618.054738 | \n 601.526021 | \n 1.238587 | \n 1.205463 | \n 2.231059 | \n -6.283286e+02 | \n -2.744009e+02 | \n -6.122045e+02 | \n -0.001828 | \n 3.202751e+05 | \n 1.404095e+05 | \n 0.438403 | \n 2.2200 | \n 3.437408e+05 | \n 3.437500e+05 | \n 3.437500e+05 | \n
\n \n | 2 | \n 2022-04-25 | \n eth | \n 1 | \n 1628.103621 | \n 3614.390039 | \n 1.217790 | \n 3649.399144 | \n 0.002440 | \n 7.313425 | \n 2.190786 | \n -1.550104e-01 | \n -2.076344e+02 | \n -4.548826e+02 | \n -0.001337 | \n 1.039690e+02 | \n 1.403459e+05 | \n 1349.882510 | \n 2.2200 | \n 1.169769e+02 | \n 1.159120e+02 | \n 1.159120e+02 | \n
\n \n | 3 | \n 2022-04-26 | \n dai | \n 3 | \n 7525.703648 | \n 15846.229453 | \n 16368.808603 | \n 15957.237984 | \n 32.803224 | \n 31.978433 | \n 2.214641 | \n -2.101020e+04 | \n -9.493450e+03 | \n -2.102459e+04 | \n -0.030559 | \n 6.197640e+05 | \n 2.918862e+05 | \n 0.470963 | \n 2.0700 | \n 6.828865e+05 | \n 6.875000e+05 | \n 6.874721e+05 | \n
\n \n | 4 | \n 2022-04-26 | \n eth | \n 1 | \n 2403.614895 | \n 5071.627429 | \n 1.801257 | \n 5103.502330 | \n 0.003610 | \n 10.227460 | \n 2.214641 | \n 1.366771e+00 | \n 1.827579e+03 | \n 4.047433e+03 | \n 0.005718 | \n 2.187025e+02 | \n 2.888900e+05 | \n 1320.926933 | \n 2.0700 | \n 2.388591e+02 | \n 2.390141e+02 | \n 2.390098e+02 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 572 | \n 2022-07-13 | \n ren | \n 3 | \n 1768.630143 | \n 1315.906537 | \n 11368.242105 | \n 1331.755493 | \n 22.782048 | \n 2.668849 | \n 0.439336 | \n -2.925943e+04 | \n -7.788998e+03 | \n -3.421986e+03 | \n -0.074199 | \n 3.650763e+05 | \n 9.888587e+04 | \n 0.270864 | \n 0.4518 | \n 3.654831e+05 | \n 3.943198e+05 | \n 3.938701e+05 | \n
\n \n | 573 | \n 2022-07-13 | \n usdc | \n 11 | \n 12820.582315 | \n 39171.489157 | \n 40310.194464 | \n 40287.308795 | \n 407.173676 | \n 406.942508 | \n 0.439336 | \n -1.319153e+06 | \n -2.915052e+06 | \n -1.280687e+06 | \n -0.538241 | \n 9.223219e+05 | \n 2.044195e+06 | \n 2.216357 | \n 0.4518 | \n 1.112240e+06 | \n 2.450837e+06 | \n 2.447838e+06 | \n
\n \n | 574 | \n 2022-07-13 | \n vbnt | \n 13 | \n 17417.396004 | \n 17347.157459 | \n 49549.095840 | \n 17188.881593 | \n 754.554759 | \n 261.759618 | \n 0.439336 | \n -5.969363e+04 | \n -4.785695e+04 | \n -2.102528e+04 | \n -0.015282 | \n 1.550398e+06 | \n 1.250088e+06 | \n 0.806302 | \n 0.4518 | \n 3.851069e+06 | \n 3.906057e+06 | \n 3.889583e+06 | \n
\n \n | 575 | \n 2022-07-13 | \n wbtc | \n 8 | \n 77132.736065 | \n 40043.358891 | \n 2.075963 | \n 39984.699361 | \n 0.004160 | \n 80.128950 | \n 0.439336 | \n -1.634478e+02 | \n -7.133886e+06 | \n -3.134172e+06 | \n -0.483749 | \n 1.746781e+02 | \n 7.624048e+06 | \n 43646.270867 | \n 0.4518 | \n 1.746781e+02 | \n 3.378767e+02 | \n 3.378000e+02 | \n
\n \n | 576 | \n 2022-07-13 | \n zcn | \n 3 | \n 2857.359303 | \n 1643.043365 | \n 8442.390858 | \n 1667.280439 | \n 42.424075 | \n 8.378294 | \n 0.439336 | \n -5.465076e+05 | \n -2.432456e+05 | \n -1.068665e+05 | \n -0.655215 | \n 2.875819e+05 | \n 1.280001e+05 | \n 0.445091 | \n 0.4518 | \n 2.875819e+05 | \n 8.340895e+05 | \n 8.329419e+05 | \n
\n \n
\n
577 rows × 21 columns
\n
"]}}],"execution_count":0},{"cell_type":"code","source":["df = df.sort_values(['date', 'targetSymbol', 'trade_count'])\ndf\n"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"776385dc-a9c9-42ce-b5c5-6f4329dec998"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"Out[72]:
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\nOut[72]:
"]}},{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"\n\n
\n \n \n | \n date | \n targetSymbol | \n trade_count | \n sourceAmount_real | \n sourceAmount_real_usd | \n targetAmount_real | \n targetAmount_real_usd | \n trade_revenue_real | \n trade_revenue_usd | \n bntprice | \n surplus_tkn | \n surplus_bnt | \n surplus_usd | \n surplus_perc | \n tknTradingLiquidity_real | \n bntTradingLiquidity_real | \n spotRate | \n price | \n liquidity_real | \n stakedBalance_real | \n poolTokenSupply_real | \n
\n \n \n \n | 0 | \n 2022-04-20 | \n dai | \n 3 | \n 0.003000 | \n 9.176236 | \n 9.205342 | \n 9.140794 | \n 0.018448 | \n 0.018318 | \n 2.296663 | \n -9.221023e+00 | \n -4.026950e+00 | \n -9.248547e+00 | \n -0.000054 | \n 9.161156e+04 | \n 4.000805e+04 | \n 0.436714 | \n 2.2900 | \n 1.718604e+05 | \n 1.718697e+05 | \n 1.718697e+05 | \n
\n \n | 1 | \n 2022-04-22 | \n dai | \n 2 | \n 0.202159 | \n 601.632956 | \n 618.054738 | \n 601.526021 | \n 1.238587 | \n 1.205463 | \n 2.231059 | \n -6.283286e+02 | \n -2.744009e+02 | \n -6.122045e+02 | \n -0.001828 | \n 3.202751e+05 | \n 1.404095e+05 | \n 0.438403 | \n 2.2200 | \n 3.437408e+05 | \n 3.437500e+05 | \n 3.437500e+05 | \n
\n \n | 2 | \n 2022-04-25 | \n eth | \n 1 | \n 1628.103621 | \n 3614.390039 | \n 1.217790 | \n 3649.399144 | \n 0.002440 | \n 7.313425 | \n 2.190786 | \n -1.550104e-01 | \n -2.076344e+02 | \n -4.548826e+02 | \n -0.001337 | \n 1.039690e+02 | \n 1.403459e+05 | \n 1349.882510 | \n 2.2200 | \n 1.169769e+02 | \n 1.159120e+02 | \n 1.159120e+02 | \n
\n \n | 3 | \n 2022-04-26 | \n dai | \n 3 | \n 7525.703648 | \n 15846.229453 | \n 16368.808603 | \n 15957.237984 | \n 32.803224 | \n 31.978433 | \n 2.214641 | \n -2.101020e+04 | \n -9.493450e+03 | \n -2.102459e+04 | \n -0.030559 | \n 6.197640e+05 | \n 2.918862e+05 | \n 0.470963 | \n 2.0700 | \n 6.828865e+05 | \n 6.875000e+05 | \n 6.874721e+05 | \n
\n \n | 4 | \n 2022-04-26 | \n eth | \n 1 | \n 2403.614895 | \n 5071.627429 | \n 1.801257 | \n 5103.502330 | \n 0.003610 | \n 10.227460 | \n 2.214641 | \n 1.366771e+00 | \n 1.827579e+03 | \n 4.047433e+03 | \n 0.005718 | \n 2.187025e+02 | \n 2.888900e+05 | \n 1320.926933 | \n 2.0700 | \n 2.388591e+02 | \n 2.390141e+02 | \n 2.390098e+02 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 572 | \n 2022-07-13 | \n ren | \n 3 | \n 1768.630143 | \n 1315.906537 | \n 11368.242105 | \n 1331.755493 | \n 22.782048 | \n 2.668849 | \n 0.439336 | \n -2.925943e+04 | \n -7.788998e+03 | \n -3.421986e+03 | \n -0.074199 | \n 3.650763e+05 | \n 9.888587e+04 | \n 0.270864 | \n 0.4518 | \n 3.654831e+05 | \n 3.943198e+05 | \n 3.938701e+05 | \n
\n \n | 573 | \n 2022-07-13 | \n usdc | \n 11 | \n 12820.582315 | \n 39171.489157 | \n 40310.194464 | \n 40287.308795 | \n 407.173676 | \n 406.942508 | \n 0.439336 | \n -1.319153e+06 | \n -2.915052e+06 | \n -1.280687e+06 | \n -0.538241 | \n 9.223219e+05 | \n 2.044195e+06 | \n 2.216357 | \n 0.4518 | \n 1.112240e+06 | \n 2.450837e+06 | \n 2.447838e+06 | \n
\n \n | 574 | \n 2022-07-13 | \n vbnt | \n 13 | \n 17417.396004 | \n 17347.157459 | \n 49549.095840 | \n 17188.881593 | \n 754.554759 | \n 261.759618 | \n 0.439336 | \n -5.969363e+04 | \n -4.785695e+04 | \n -2.102528e+04 | \n -0.015282 | \n 1.550398e+06 | \n 1.250088e+06 | \n 0.806302 | \n 0.4518 | \n 3.851069e+06 | \n 3.906057e+06 | \n 3.889583e+06 | \n
\n \n | 575 | \n 2022-07-13 | \n wbtc | \n 8 | \n 77132.736065 | \n 40043.358891 | \n 2.075963 | \n 39984.699361 | \n 0.004160 | \n 80.128950 | \n 0.439336 | \n -1.634478e+02 | \n -7.133886e+06 | \n -3.134172e+06 | \n -0.483749 | \n 1.746781e+02 | \n 7.624048e+06 | \n 43646.270867 | \n 0.4518 | \n 1.746781e+02 | \n 3.378767e+02 | \n 3.378000e+02 | \n
\n \n | 576 | \n 2022-07-13 | \n zcn | \n 3 | \n 2857.359303 | \n 1643.043365 | \n 8442.390858 | \n 1667.280439 | \n 42.424075 | \n 8.378294 | \n 0.439336 | \n -5.465076e+05 | \n -2.432456e+05 | \n -1.068665e+05 | \n -0.655215 | \n 2.875819e+05 | \n 1.280001e+05 | \n 0.445091 | \n 0.4518 | \n 2.875819e+05 | \n 8.340895e+05 | \n 8.329419e+05 | \n
\n \n
\n
577 rows × 21 columns
\n
","textData":null,"removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"htmlSandbox","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n\n
\n \n \n | \n date | \n targetSymbol | \n trade_count | \n sourceAmount_real | \n sourceAmount_real_usd | \n targetAmount_real | \n targetAmount_real_usd | \n trade_revenue_real | \n trade_revenue_usd | \n bntprice | \n surplus_tkn | \n surplus_bnt | \n surplus_usd | \n surplus_perc | \n tknTradingLiquidity_real | \n bntTradingLiquidity_real | \n spotRate | \n price | \n liquidity_real | \n stakedBalance_real | \n poolTokenSupply_real | \n
\n \n \n \n | 0 | \n 2022-04-20 | \n dai | \n 3 | \n 0.003000 | \n 9.176236 | \n 9.205342 | \n 9.140794 | \n 0.018448 | \n 0.018318 | \n 2.296663 | \n -9.221023e+00 | \n -4.026950e+00 | \n -9.248547e+00 | \n -0.000054 | \n 9.161156e+04 | \n 4.000805e+04 | \n 0.436714 | \n 2.2900 | \n 1.718604e+05 | \n 1.718697e+05 | \n 1.718697e+05 | \n
\n \n | 1 | \n 2022-04-22 | \n dai | \n 2 | \n 0.202159 | \n 601.632956 | \n 618.054738 | \n 601.526021 | \n 1.238587 | \n 1.205463 | \n 2.231059 | \n -6.283286e+02 | \n -2.744009e+02 | \n -6.122045e+02 | \n -0.001828 | \n 3.202751e+05 | \n 1.404095e+05 | \n 0.438403 | \n 2.2200 | \n 3.437408e+05 | \n 3.437500e+05 | \n 3.437500e+05 | \n
\n \n | 2 | \n 2022-04-25 | \n eth | \n 1 | \n 1628.103621 | \n 3614.390039 | \n 1.217790 | \n 3649.399144 | \n 0.002440 | \n 7.313425 | \n 2.190786 | \n -1.550104e-01 | \n -2.076344e+02 | \n -4.548826e+02 | \n -0.001337 | \n 1.039690e+02 | \n 1.403459e+05 | \n 1349.882510 | \n 2.2200 | \n 1.169769e+02 | \n 1.159120e+02 | \n 1.159120e+02 | \n
\n \n | 3 | \n 2022-04-26 | \n dai | \n 3 | \n 7525.703648 | \n 15846.229453 | \n 16368.808603 | \n 15957.237984 | \n 32.803224 | \n 31.978433 | \n 2.214641 | \n -2.101020e+04 | \n -9.493450e+03 | \n -2.102459e+04 | \n -0.030559 | \n 6.197640e+05 | \n 2.918862e+05 | \n 0.470963 | \n 2.0700 | \n 6.828865e+05 | \n 6.875000e+05 | \n 6.874721e+05 | \n
\n \n | 4 | \n 2022-04-26 | \n eth | \n 1 | \n 2403.614895 | \n 5071.627429 | \n 1.801257 | \n 5103.502330 | \n 0.003610 | \n 10.227460 | \n 2.214641 | \n 1.366771e+00 | \n 1.827579e+03 | \n 4.047433e+03 | \n 0.005718 | \n 2.187025e+02 | \n 2.888900e+05 | \n 1320.926933 | \n 2.0700 | \n 2.388591e+02 | \n 2.390141e+02 | \n 2.390098e+02 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 572 | \n 2022-07-13 | \n ren | \n 3 | \n 1768.630143 | \n 1315.906537 | \n 11368.242105 | \n 1331.755493 | \n 22.782048 | \n 2.668849 | \n 0.439336 | \n -2.925943e+04 | \n -7.788998e+03 | \n -3.421986e+03 | \n -0.074199 | \n 3.650763e+05 | \n 9.888587e+04 | \n 0.270864 | \n 0.4518 | \n 3.654831e+05 | \n 3.943198e+05 | \n 3.938701e+05 | \n
\n \n | 573 | \n 2022-07-13 | \n usdc | \n 11 | \n 12820.582315 | \n 39171.489157 | \n 40310.194464 | \n 40287.308795 | \n 407.173676 | \n 406.942508 | \n 0.439336 | \n -1.319153e+06 | \n -2.915052e+06 | \n -1.280687e+06 | \n -0.538241 | \n 9.223219e+05 | \n 2.044195e+06 | \n 2.216357 | \n 0.4518 | \n 1.112240e+06 | \n 2.450837e+06 | \n 2.447838e+06 | \n
\n \n | 574 | \n 2022-07-13 | \n vbnt | \n 13 | \n 17417.396004 | \n 17347.157459 | \n 49549.095840 | \n 17188.881593 | \n 754.554759 | \n 261.759618 | \n 0.439336 | \n -5.969363e+04 | \n -4.785695e+04 | \n -2.102528e+04 | \n -0.015282 | \n 1.550398e+06 | \n 1.250088e+06 | \n 0.806302 | \n 0.4518 | \n 3.851069e+06 | \n 3.906057e+06 | \n 3.889583e+06 | \n
\n \n | 575 | \n 2022-07-13 | \n wbtc | \n 8 | \n 77132.736065 | \n 40043.358891 | \n 2.075963 | \n 39984.699361 | \n 0.004160 | \n 80.128950 | \n 0.439336 | \n -1.634478e+02 | \n -7.133886e+06 | \n -3.134172e+06 | \n -0.483749 | \n 1.746781e+02 | \n 7.624048e+06 | \n 43646.270867 | \n 0.4518 | \n 1.746781e+02 | \n 3.378767e+02 | \n 3.378000e+02 | \n
\n \n | 576 | \n 2022-07-13 | \n zcn | \n 3 | \n 2857.359303 | \n 1643.043365 | \n 8442.390858 | \n 1667.280439 | \n 42.424075 | \n 8.378294 | \n 0.439336 | \n -5.465076e+05 | \n -2.432456e+05 | \n -1.068665e+05 | \n -0.655215 | \n 2.875819e+05 | \n 1.280001e+05 | \n 0.445091 | \n 0.4518 | \n 2.875819e+05 | \n 8.340895e+05 | \n 8.329419e+05 | \n
\n \n
\n
577 rows × 21 columns
\n
"]}}],"execution_count":0},{"cell_type":"code","source":["df = df.drop_duplicates(subset=['date','targetSymbol'])\ndf"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"c55edb7b-4ce9-491e-a4ff-a47903fad180"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"Out[76]:
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\nOut[76]:
"]}},{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"\n\n
\n \n \n | \n date | \n targetSymbol | \n trade_count | \n sourceAmount_real | \n sourceAmount_real_usd | \n targetAmount_real | \n targetAmount_real_usd | \n trade_revenue_real | \n trade_revenue_usd | \n bntprice | \n surplus_tkn | \n surplus_bnt | \n surplus_usd | \n surplus_perc | \n tknTradingLiquidity_real | \n bntTradingLiquidity_real | \n spotRate | \n price | \n liquidity_real | \n stakedBalance_real | \n poolTokenSupply_real | \n
\n \n \n \n | 0 | \n 2022-04-20 | \n dai | \n 3 | \n 0.003000 | \n 9.176236 | \n 9.205342 | \n 9.140794 | \n 0.018448 | \n 0.018318 | \n 2.296663 | \n -9.221023e+00 | \n -4.026950e+00 | \n -9.248547e+00 | \n -0.000054 | \n 9.161156e+04 | \n 4.000805e+04 | \n 0.436714 | \n 2.2900 | \n 1.718604e+05 | \n 1.718697e+05 | \n 1.718697e+05 | \n
\n \n | 1 | \n 2022-04-22 | \n dai | \n 2 | \n 0.202159 | \n 601.632956 | \n 618.054738 | \n 601.526021 | \n 1.238587 | \n 1.205463 | \n 2.231059 | \n -6.283286e+02 | \n -2.744009e+02 | \n -6.122045e+02 | \n -0.001828 | \n 3.202751e+05 | \n 1.404095e+05 | \n 0.438403 | \n 2.2200 | \n 3.437408e+05 | \n 3.437500e+05 | \n 3.437500e+05 | \n
\n \n | 2 | \n 2022-04-25 | \n eth | \n 1 | \n 1628.103621 | \n 3614.390039 | \n 1.217790 | \n 3649.399144 | \n 0.002440 | \n 7.313425 | \n 2.190786 | \n -1.550104e-01 | \n -2.076344e+02 | \n -4.548826e+02 | \n -0.001337 | \n 1.039690e+02 | \n 1.403459e+05 | \n 1349.882510 | \n 2.2200 | \n 1.169769e+02 | \n 1.159120e+02 | \n 1.159120e+02 | \n
\n \n | 3 | \n 2022-04-26 | \n dai | \n 3 | \n 7525.703648 | \n 15846.229453 | \n 16368.808603 | \n 15957.237984 | \n 32.803224 | \n 31.978433 | \n 2.214641 | \n -2.101020e+04 | \n -9.493450e+03 | \n -2.102459e+04 | \n -0.030559 | \n 6.197640e+05 | \n 2.918862e+05 | \n 0.470963 | \n 2.0700 | \n 6.828865e+05 | \n 6.875000e+05 | \n 6.874721e+05 | \n
\n \n | 4 | \n 2022-04-26 | \n eth | \n 1 | \n 2403.614895 | \n 5071.627429 | \n 1.801257 | \n 5103.502330 | \n 0.003610 | \n 10.227460 | \n 2.214641 | \n 1.366771e+00 | \n 1.827579e+03 | \n 4.047433e+03 | \n 0.005718 | \n 2.187025e+02 | \n 2.888900e+05 | \n 1320.926933 | \n 2.0700 | \n 2.388591e+02 | \n 2.390141e+02 | \n 2.390098e+02 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 572 | \n 2022-07-13 | \n ren | \n 3 | \n 1768.630143 | \n 1315.906537 | \n 11368.242105 | \n 1331.755493 | \n 22.782048 | \n 2.668849 | \n 0.439336 | \n -2.925943e+04 | \n -7.788998e+03 | \n -3.421986e+03 | \n -0.074199 | \n 3.650763e+05 | \n 9.888587e+04 | \n 0.270864 | \n 0.4518 | \n 3.654831e+05 | \n 3.943198e+05 | \n 3.938701e+05 | \n
\n \n | 573 | \n 2022-07-13 | \n usdc | \n 11 | \n 12820.582315 | \n 39171.489157 | \n 40310.194464 | \n 40287.308795 | \n 407.173676 | \n 406.942508 | \n 0.439336 | \n -1.319153e+06 | \n -2.915052e+06 | \n -1.280687e+06 | \n -0.538241 | \n 9.223219e+05 | \n 2.044195e+06 | \n 2.216357 | \n 0.4518 | \n 1.112240e+06 | \n 2.450837e+06 | \n 2.447838e+06 | \n
\n \n | 574 | \n 2022-07-13 | \n vbnt | \n 13 | \n 17417.396004 | \n 17347.157459 | \n 49549.095840 | \n 17188.881593 | \n 754.554759 | \n 261.759618 | \n 0.439336 | \n -5.969363e+04 | \n -4.785695e+04 | \n -2.102528e+04 | \n -0.015282 | \n 1.550398e+06 | \n 1.250088e+06 | \n 0.806302 | \n 0.4518 | \n 3.851069e+06 | \n 3.906057e+06 | \n 3.889583e+06 | \n
\n \n | 575 | \n 2022-07-13 | \n wbtc | \n 8 | \n 77132.736065 | \n 40043.358891 | \n 2.075963 | \n 39984.699361 | \n 0.004160 | \n 80.128950 | \n 0.439336 | \n -1.634478e+02 | \n -7.133886e+06 | \n -3.134172e+06 | \n -0.483749 | \n 1.746781e+02 | \n 7.624048e+06 | \n 43646.270867 | \n 0.4518 | \n 1.746781e+02 | \n 3.378767e+02 | \n 3.378000e+02 | \n
\n \n | 576 | \n 2022-07-13 | \n zcn | \n 3 | \n 2857.359303 | \n 1643.043365 | \n 8442.390858 | \n 1667.280439 | \n 42.424075 | \n 8.378294 | \n 0.439336 | \n -5.465076e+05 | \n -2.432456e+05 | \n -1.068665e+05 | \n -0.655215 | \n 2.875819e+05 | \n 1.280001e+05 | \n 0.445091 | \n 0.4518 | \n 2.875819e+05 | \n 8.340895e+05 | \n 8.329419e+05 | \n
\n \n
\n
577 rows × 21 columns
\n
","textData":null,"removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"htmlSandbox","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n\n
\n \n \n | \n date | \n targetSymbol | \n trade_count | \n sourceAmount_real | \n sourceAmount_real_usd | \n targetAmount_real | \n targetAmount_real_usd | \n trade_revenue_real | \n trade_revenue_usd | \n bntprice | \n surplus_tkn | \n surplus_bnt | \n surplus_usd | \n surplus_perc | \n tknTradingLiquidity_real | \n bntTradingLiquidity_real | \n spotRate | \n price | \n liquidity_real | \n stakedBalance_real | \n poolTokenSupply_real | \n
\n \n \n \n | 0 | \n 2022-04-20 | \n dai | \n 3 | \n 0.003000 | \n 9.176236 | \n 9.205342 | \n 9.140794 | \n 0.018448 | \n 0.018318 | \n 2.296663 | \n -9.221023e+00 | \n -4.026950e+00 | \n -9.248547e+00 | \n -0.000054 | \n 9.161156e+04 | \n 4.000805e+04 | \n 0.436714 | \n 2.2900 | \n 1.718604e+05 | \n 1.718697e+05 | \n 1.718697e+05 | \n
\n \n | 1 | \n 2022-04-22 | \n dai | \n 2 | \n 0.202159 | \n 601.632956 | \n 618.054738 | \n 601.526021 | \n 1.238587 | \n 1.205463 | \n 2.231059 | \n -6.283286e+02 | \n -2.744009e+02 | \n -6.122045e+02 | \n -0.001828 | \n 3.202751e+05 | \n 1.404095e+05 | \n 0.438403 | \n 2.2200 | \n 3.437408e+05 | \n 3.437500e+05 | \n 3.437500e+05 | \n
\n \n | 2 | \n 2022-04-25 | \n eth | \n 1 | \n 1628.103621 | \n 3614.390039 | \n 1.217790 | \n 3649.399144 | \n 0.002440 | \n 7.313425 | \n 2.190786 | \n -1.550104e-01 | \n -2.076344e+02 | \n -4.548826e+02 | \n -0.001337 | \n 1.039690e+02 | \n 1.403459e+05 | \n 1349.882510 | \n 2.2200 | \n 1.169769e+02 | \n 1.159120e+02 | \n 1.159120e+02 | \n
\n \n | 3 | \n 2022-04-26 | \n dai | \n 3 | \n 7525.703648 | \n 15846.229453 | \n 16368.808603 | \n 15957.237984 | \n 32.803224 | \n 31.978433 | \n 2.214641 | \n -2.101020e+04 | \n -9.493450e+03 | \n -2.102459e+04 | \n -0.030559 | \n 6.197640e+05 | \n 2.918862e+05 | \n 0.470963 | \n 2.0700 | \n 6.828865e+05 | \n 6.875000e+05 | \n 6.874721e+05 | \n
\n \n | 4 | \n 2022-04-26 | \n eth | \n 1 | \n 2403.614895 | \n 5071.627429 | \n 1.801257 | \n 5103.502330 | \n 0.003610 | \n 10.227460 | \n 2.214641 | \n 1.366771e+00 | \n 1.827579e+03 | \n 4.047433e+03 | \n 0.005718 | \n 2.187025e+02 | \n 2.888900e+05 | \n 1320.926933 | \n 2.0700 | \n 2.388591e+02 | \n 2.390141e+02 | \n 2.390098e+02 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 572 | \n 2022-07-13 | \n ren | \n 3 | \n 1768.630143 | \n 1315.906537 | \n 11368.242105 | \n 1331.755493 | \n 22.782048 | \n 2.668849 | \n 0.439336 | \n -2.925943e+04 | \n -7.788998e+03 | \n -3.421986e+03 | \n -0.074199 | \n 3.650763e+05 | \n 9.888587e+04 | \n 0.270864 | \n 0.4518 | \n 3.654831e+05 | \n 3.943198e+05 | \n 3.938701e+05 | \n
\n \n | 573 | \n 2022-07-13 | \n usdc | \n 11 | \n 12820.582315 | \n 39171.489157 | \n 40310.194464 | \n 40287.308795 | \n 407.173676 | \n 406.942508 | \n 0.439336 | \n -1.319153e+06 | \n -2.915052e+06 | \n -1.280687e+06 | \n -0.538241 | \n 9.223219e+05 | \n 2.044195e+06 | \n 2.216357 | \n 0.4518 | \n 1.112240e+06 | \n 2.450837e+06 | \n 2.447838e+06 | \n
\n \n | 574 | \n 2022-07-13 | \n vbnt | \n 13 | \n 17417.396004 | \n 17347.157459 | \n 49549.095840 | \n 17188.881593 | \n 754.554759 | \n 261.759618 | \n 0.439336 | \n -5.969363e+04 | \n -4.785695e+04 | \n -2.102528e+04 | \n -0.015282 | \n 1.550398e+06 | \n 1.250088e+06 | \n 0.806302 | \n 0.4518 | \n 3.851069e+06 | \n 3.906057e+06 | \n 3.889583e+06 | \n
\n \n | 575 | \n 2022-07-13 | \n wbtc | \n 8 | \n 77132.736065 | \n 40043.358891 | \n 2.075963 | \n 39984.699361 | \n 0.004160 | \n 80.128950 | \n 0.439336 | \n -1.634478e+02 | \n -7.133886e+06 | \n -3.134172e+06 | \n -0.483749 | \n 1.746781e+02 | \n 7.624048e+06 | \n 43646.270867 | \n 0.4518 | \n 1.746781e+02 | \n 3.378767e+02 | \n 3.378000e+02 | \n
\n \n | 576 | \n 2022-07-13 | \n zcn | \n 3 | \n 2857.359303 | \n 1643.043365 | \n 8442.390858 | \n 1667.280439 | \n 42.424075 | \n 8.378294 | \n 0.439336 | \n -5.465076e+05 | \n -2.432456e+05 | \n -1.068665e+05 | \n -0.655215 | \n 2.875819e+05 | \n 1.280001e+05 | \n 0.445091 | \n 0.4518 | \n 2.875819e+05 | \n 8.340895e+05 | \n 8.329419e+05 | \n
\n \n
\n
577 rows × 21 columns
\n
"]}}],"execution_count":0},{"cell_type":"code","source":["df['trade_revenue_real_rolling_7day_avg'] = df[\n 'trade_revenue_real'\n].rolling(7, min_periods=1).mean()\n\ndf['trade_revenue_usd_rolling_7day_avg'] = df[\n 'trade_revenue_usd'\n].rolling(7, min_periods=1).mean()\n\ndf['trade_revenue_real_rolling_30day_avg'] = df[\n 'trade_revenue_real'\n].rolling(30, min_periods=1).mean()\n\ndf['trade_revenue_usd_rolling_30day_avg'] = df[\n 'trade_revenue_usd'\n].rolling(30, min_periods=1).mean()\n\ndf"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"c8604fe0-55a1-47e9-b78d-7de5739a9b1e"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n"]}}],"execution_count":0},{"cell_type":"code","source":["import mlflow\n\nfilepath = '/dbfs/FileStore/tables/research/preprocessed_tradingliquidity_vs_deficit.csv'\ndf.to_csv(filepath, index=False)\nmlflow.log_artifact(filepath)\n"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"d25989ae-f719-41b6-8106-5fc5f880a729"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n"]}}],"execution_count":0}],"metadata":{"application/vnd.databricks.v1+notebook":{"notebookName":"join_tables","dashboards":[],"notebookMetadata":{"pythonIndentUnit":4},"language":"python","widgets":{},"notebookOrigID":1744197420073310}},"nbformat":4,"nbformat_minor":0}
diff --git a/examples/studies/limit_max_on_curve_liquidity/proposal_with_data.ipynb b/examples/studies/limit_max_on_curve_liquidity/proposal_with_data.ipynb
new file mode 100644
index 00000000..a5cfb649
--- /dev/null
+++ b/examples/studies/limit_max_on_curve_liquidity/proposal_with_data.ipynb
@@ -0,0 +1 @@
+{"cells":[{"cell_type":"markdown","source":["Welcome to the Bancor Governance Forum. In this forum, the BancorDAO (Decentralized Autonomous Organization) proposes and discusses token Whitelistings, Trading liquidity limits, Fee changes, Bancor Improvement Proposals, and others.\n\nPlease head on to the [Information and Templates](https://gov.bancor.network/c/information-and-templates/16) category for more information on the DAO process.\n\nVoting happens on the [BancorDAO Snapshot Page](https://vote.bancor.network/)."],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"681b934a-2625-4070-9b66-ba81e5913b98"}}},{"cell_type":"markdown","source":["[Proposal: Limit on-curve liquidity to max(520 x 7 day fees, 100k BNT)](https://gov.bancor.network/t/proposal-limit-on-curve-liquidity-to-max-520-x-7-day-fees-100k-bnt/3876)\n=============================================================================================================================================================================\n\n[LEVEL 1 Under Review](https://gov.bancor.network/c/level-1-under-review/14)\n\n\n\n\n[thedavidmeister](https://gov.bancor.network/u/thedavidmeister)"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"4efeefaa-431b-4ede-b2d6-9f53729739b3"}}},{"cell_type":"markdown","source":["TLDR:\n\n- We pay IL on 100% of TKN available for trading\n- We get diminishing returns on new fees per unit of trading liquidity\n- If IL > fees then the protocol dies (and is already in crisis due to existing deficits)\n- B3 has the unique ability to set a cap on trading liquidity\n- Taking capital off-curve has a dual benefit of limiting IL exposure AND making it available to other revenue opportunities (native staking etc.)\n- Currently the protocol deficit increases when ETH price increases by ~1.5x annually relative to BNT, making some assumptions, we could lift this to the protocol being profitable up to a ~4x ETH annual moon relative to BNT by limiting the on-curve trading liquidity to 520x 7 day trading fees + implementing some modest staking model (or similar)\n- We should set a simple cap based on the data we have and commission a more sophisticated model in the near future\n\nProposal:\n\nWhen we look at the IL curve:\n\n\n\n\nWe see that the losses due to IL are a % of all the capital deployed on the trading curve.\n\nIf TKN moons 2x relative to BNT then the IL is ~10%, a 4x moon has ~20% IL, etc.\n\nMeanwhile there are only so many fees due to trade volume across all of defi and almost all trades through bancor currently are based on arbitrage and aggregators only. That is to say, there is negligible trading being done directly on bancor due to retail etc. as that market is largely monopolized by aggregators and a few platforms that take the lion's share of human traders such as uniswap.\n\nIn considering this proposal, please consider mainly how arb bots and aggregators will respond, not human traders, as the former is 10x+ the latter in terms of protocol fee generation."],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"c7149321-2b9a-4cd0-878e-58e5b2367f38"}}},{"cell_type":"markdown","source":["Import Data"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"c318fe9f-fd11-412f-a9b5-67d55e934f7d"}}},{"cell_type":"code","source":["import pandas as pd\n\nfilepath = 'https://bancorml.s3.us-east-2.amazonaws.com/preprocessed_tradingliquidity_vs_deficit-3.csv'\ndf = pd.read_csv(filepath)"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"30b026a9-3151-42ac-be60-50b5be44630f"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n"]}}],"execution_count":0},{"cell_type":"markdown","source":["Calculate Rolling Average Fee Revenue"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"8beb4fef-7b8f-4fa8-8b4c-75147450ce02"}}},{"cell_type":"code","source":["# For 7 day rolling averages\ndf['trade_revenue_real_rolling_7day_avg'] = df.groupby(['date', 'targetSymbol'])['trade_revenue_real'].rolling(7, min_periods=1).mean().reset_index(drop=True)\ndf['trade_revenue_usd_rolling_7day_avg'] = df.groupby(['date', 'targetSymbol'])['trade_revenue_usd'].rolling(7, min_periods=1).mean().reset_index(drop=True)\n\n# For 30 day rolling averages\ndf['trade_revenue_real_rolling_30day_avg'] = df.groupby(['date', 'targetSymbol'])['trade_revenue_real'].rolling(30, min_periods=1).mean().reset_index(drop=True)\ndf['trade_revenue_usd_rolling_30day_avg'] = df.groupby(['date', 'targetSymbol'])['trade_revenue_usd'].rolling(30, min_periods=1).mean().reset_index(drop=True)\ndf"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"5fb7205f-c2f8-4a49-b724-6129a472b5e4"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"Out[29]:
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\nOut[29]:
"]}},{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"\n\n
\n \n \n | \n date | \n targetSymbol | \n trade_count | \n sourceAmount_real | \n sourceAmount_real_usd | \n targetAmount_real | \n targetAmount_real_usd | \n trade_revenue_real | \n trade_revenue_usd | \n bntprice | \n surplus_tkn | \n surplus_bnt | \n surplus_usd | \n surplus_perc | \n tknTradingLiquidity_real | \n bntTradingLiquidity_real | \n spotRate | \n price | \n liquidity_real | \n stakedBalance_real | \n poolTokenSupply_real | \n trade_revenue_real_rolling_7day_avg | \n trade_revenue_usd_rolling_7day_avg | \n trade_revenue_real_rolling_30day_avg | \n trade_revenue_usd_rolling_30day_avg | \n
\n \n \n \n | 0 | \n 2022-04-20 | \n dai | \n 3 | \n 0.003000 | \n 9.176236 | \n 9.205342 | \n 9.140794 | \n 0.018448 | \n 0.018318 | \n 2.296663 | \n -9.221023e+00 | \n -4.026950e+00 | \n -9.248547e+00 | \n -0.000054 | \n 9.161156e+04 | \n 4.000805e+04 | \n 0.436714 | \n 2.2900 | \n 1.718604e+05 | \n 1.718697e+05 | \n 1.718697e+05 | \n 0.018448 | \n 0.018318 | \n 0.018448 | \n 0.018318 | \n
\n \n | 1 | \n 2022-04-22 | \n dai | \n 2 | \n 0.202159 | \n 601.632956 | \n 618.054738 | \n 601.526021 | \n 1.238587 | \n 1.205463 | \n 2.231059 | \n -6.283286e+02 | \n -2.744009e+02 | \n -6.122045e+02 | \n -0.001828 | \n 3.202751e+05 | \n 1.404095e+05 | \n 0.438403 | \n 2.2200 | \n 3.437408e+05 | \n 3.437500e+05 | \n 3.437500e+05 | \n 1.238587 | \n 1.205463 | \n 1.238587 | \n 1.205463 | \n
\n \n | 2 | \n 2022-04-25 | \n eth | \n 1 | \n 1628.103621 | \n 3614.390039 | \n 1.217790 | \n 3649.399144 | \n 0.002440 | \n 7.313425 | \n 2.190786 | \n -1.550104e-01 | \n -2.076344e+02 | \n -4.548826e+02 | \n -0.001337 | \n 1.039690e+02 | \n 1.403459e+05 | \n 1349.882510 | \n 2.2200 | \n 1.169769e+02 | \n 1.159120e+02 | \n 1.159120e+02 | \n 0.002440 | \n 7.313425 | \n 0.002440 | \n 7.313425 | \n
\n \n | 3 | \n 2022-04-26 | \n dai | \n 3 | \n 7525.703648 | \n 15846.229453 | \n 16368.808603 | \n 15957.237984 | \n 32.803224 | \n 31.978433 | \n 2.214641 | \n -2.101020e+04 | \n -9.493450e+03 | \n -2.102459e+04 | \n -0.030559 | \n 6.197640e+05 | \n 2.918862e+05 | \n 0.470963 | \n 2.0700 | \n 6.828865e+05 | \n 6.875000e+05 | \n 6.874721e+05 | \n 32.803224 | \n 31.978433 | \n 32.803224 | \n 31.978433 | \n
\n \n | 4 | \n 2022-04-26 | \n eth | \n 1 | \n 2403.614895 | \n 5071.627429 | \n 1.801257 | \n 5103.502330 | \n 0.003610 | \n 10.227460 | \n 2.214641 | \n 1.366771e+00 | \n 1.827579e+03 | \n 4.047433e+03 | \n 0.005718 | \n 2.187025e+02 | \n 2.888900e+05 | \n 1320.926933 | \n 2.0700 | \n 2.388591e+02 | \n 2.390141e+02 | \n 2.390098e+02 | \n 0.003610 | \n 10.227460 | \n 0.003610 | \n 10.227460 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 572 | \n 2022-07-13 | \n ren | \n 3 | \n 1768.630143 | \n 1315.906537 | \n 11368.242105 | \n 1331.755493 | \n 22.782048 | \n 2.668849 | \n 0.439336 | \n -2.925943e+04 | \n -7.788998e+03 | \n -3.421986e+03 | \n -0.074199 | \n 3.650763e+05 | \n 9.888587e+04 | \n 0.270864 | \n 0.4518 | \n 3.654831e+05 | \n 3.943198e+05 | \n 3.938701e+05 | \n 22.782048 | \n 2.668849 | \n 22.782048 | \n 2.668849 | \n
\n \n | 573 | \n 2022-07-13 | \n usdc | \n 11 | \n 12820.582315 | \n 39171.489157 | \n 40310.194464 | \n 40287.308795 | \n 407.173676 | \n 406.942508 | \n 0.439336 | \n -1.319153e+06 | \n -2.915052e+06 | \n -1.280687e+06 | \n -0.538241 | \n 9.223219e+05 | \n 2.044195e+06 | \n 2.216357 | \n 0.4518 | \n 1.112240e+06 | \n 2.450837e+06 | \n 2.447838e+06 | \n 407.173676 | \n 406.942508 | \n 407.173676 | \n 406.942508 | \n
\n \n | 574 | \n 2022-07-13 | \n vbnt | \n 13 | \n 17417.396004 | \n 17347.157459 | \n 49549.095840 | \n 17188.881593 | \n 754.554759 | \n 261.759618 | \n 0.439336 | \n -5.969363e+04 | \n -4.785695e+04 | \n -2.102528e+04 | \n -0.015282 | \n 1.550398e+06 | \n 1.250088e+06 | \n 0.806302 | \n 0.4518 | \n 3.851069e+06 | \n 3.906057e+06 | \n 3.889583e+06 | \n 754.554759 | \n 261.759618 | \n 754.554759 | \n 261.759618 | \n
\n \n | 575 | \n 2022-07-13 | \n wbtc | \n 8 | \n 77132.736065 | \n 40043.358891 | \n 2.075963 | \n 39984.699361 | \n 0.004160 | \n 80.128950 | \n 0.439336 | \n -1.634478e+02 | \n -7.133886e+06 | \n -3.134172e+06 | \n -0.483749 | \n 1.746781e+02 | \n 7.624048e+06 | \n 43646.270867 | \n 0.4518 | \n 1.746781e+02 | \n 3.378767e+02 | \n 3.378000e+02 | \n 0.004160 | \n 80.128950 | \n 0.004160 | \n 80.128950 | \n
\n \n | 576 | \n 2022-07-13 | \n zcn | \n 3 | \n 2857.359303 | \n 1643.043365 | \n 8442.390858 | \n 1667.280439 | \n 42.424075 | \n 8.378294 | \n 0.439336 | \n -5.465076e+05 | \n -2.432456e+05 | \n -1.068665e+05 | \n -0.655215 | \n 2.875819e+05 | \n 1.280001e+05 | \n 0.445091 | \n 0.4518 | \n 2.875819e+05 | \n 8.340895e+05 | \n 8.329419e+05 | \n 42.424075 | \n 8.378294 | \n 42.424075 | \n 8.378294 | \n
\n \n
\n
577 rows × 25 columns
\n
","textData":null,"removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"htmlSandbox","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n\n
\n \n \n | \n date | \n targetSymbol | \n trade_count | \n sourceAmount_real | \n sourceAmount_real_usd | \n targetAmount_real | \n targetAmount_real_usd | \n trade_revenue_real | \n trade_revenue_usd | \n bntprice | \n surplus_tkn | \n surplus_bnt | \n surplus_usd | \n surplus_perc | \n tknTradingLiquidity_real | \n bntTradingLiquidity_real | \n spotRate | \n price | \n liquidity_real | \n stakedBalance_real | \n poolTokenSupply_real | \n trade_revenue_real_rolling_7day_avg | \n trade_revenue_usd_rolling_7day_avg | \n trade_revenue_real_rolling_30day_avg | \n trade_revenue_usd_rolling_30day_avg | \n
\n \n \n \n | 0 | \n 2022-04-20 | \n dai | \n 3 | \n 0.003000 | \n 9.176236 | \n 9.205342 | \n 9.140794 | \n 0.018448 | \n 0.018318 | \n 2.296663 | \n -9.221023e+00 | \n -4.026950e+00 | \n -9.248547e+00 | \n -0.000054 | \n 9.161156e+04 | \n 4.000805e+04 | \n 0.436714 | \n 2.2900 | \n 1.718604e+05 | \n 1.718697e+05 | \n 1.718697e+05 | \n 0.018448 | \n 0.018318 | \n 0.018448 | \n 0.018318 | \n
\n \n | 1 | \n 2022-04-22 | \n dai | \n 2 | \n 0.202159 | \n 601.632956 | \n 618.054738 | \n 601.526021 | \n 1.238587 | \n 1.205463 | \n 2.231059 | \n -6.283286e+02 | \n -2.744009e+02 | \n -6.122045e+02 | \n -0.001828 | \n 3.202751e+05 | \n 1.404095e+05 | \n 0.438403 | \n 2.2200 | \n 3.437408e+05 | \n 3.437500e+05 | \n 3.437500e+05 | \n 1.238587 | \n 1.205463 | \n 1.238587 | \n 1.205463 | \n
\n \n | 2 | \n 2022-04-25 | \n eth | \n 1 | \n 1628.103621 | \n 3614.390039 | \n 1.217790 | \n 3649.399144 | \n 0.002440 | \n 7.313425 | \n 2.190786 | \n -1.550104e-01 | \n -2.076344e+02 | \n -4.548826e+02 | \n -0.001337 | \n 1.039690e+02 | \n 1.403459e+05 | \n 1349.882510 | \n 2.2200 | \n 1.169769e+02 | \n 1.159120e+02 | \n 1.159120e+02 | \n 0.002440 | \n 7.313425 | \n 0.002440 | \n 7.313425 | \n
\n \n | 3 | \n 2022-04-26 | \n dai | \n 3 | \n 7525.703648 | \n 15846.229453 | \n 16368.808603 | \n 15957.237984 | \n 32.803224 | \n 31.978433 | \n 2.214641 | \n -2.101020e+04 | \n -9.493450e+03 | \n -2.102459e+04 | \n -0.030559 | \n 6.197640e+05 | \n 2.918862e+05 | \n 0.470963 | \n 2.0700 | \n 6.828865e+05 | \n 6.875000e+05 | \n 6.874721e+05 | \n 32.803224 | \n 31.978433 | \n 32.803224 | \n 31.978433 | \n
\n \n | 4 | \n 2022-04-26 | \n eth | \n 1 | \n 2403.614895 | \n 5071.627429 | \n 1.801257 | \n 5103.502330 | \n 0.003610 | \n 10.227460 | \n 2.214641 | \n 1.366771e+00 | \n 1.827579e+03 | \n 4.047433e+03 | \n 0.005718 | \n 2.187025e+02 | \n 2.888900e+05 | \n 1320.926933 | \n 2.0700 | \n 2.388591e+02 | \n 2.390141e+02 | \n 2.390098e+02 | \n 0.003610 | \n 10.227460 | \n 0.003610 | \n 10.227460 | \n
\n \n | ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n | 572 | \n 2022-07-13 | \n ren | \n 3 | \n 1768.630143 | \n 1315.906537 | \n 11368.242105 | \n 1331.755493 | \n 22.782048 | \n 2.668849 | \n 0.439336 | \n -2.925943e+04 | \n -7.788998e+03 | \n -3.421986e+03 | \n -0.074199 | \n 3.650763e+05 | \n 9.888587e+04 | \n 0.270864 | \n 0.4518 | \n 3.654831e+05 | \n 3.943198e+05 | \n 3.938701e+05 | \n 22.782048 | \n 2.668849 | \n 22.782048 | \n 2.668849 | \n
\n \n | 573 | \n 2022-07-13 | \n usdc | \n 11 | \n 12820.582315 | \n 39171.489157 | \n 40310.194464 | \n 40287.308795 | \n 407.173676 | \n 406.942508 | \n 0.439336 | \n -1.319153e+06 | \n -2.915052e+06 | \n -1.280687e+06 | \n -0.538241 | \n 9.223219e+05 | \n 2.044195e+06 | \n 2.216357 | \n 0.4518 | \n 1.112240e+06 | \n 2.450837e+06 | \n 2.447838e+06 | \n 407.173676 | \n 406.942508 | \n 407.173676 | \n 406.942508 | \n
\n \n | 574 | \n 2022-07-13 | \n vbnt | \n 13 | \n 17417.396004 | \n 17347.157459 | \n 49549.095840 | \n 17188.881593 | \n 754.554759 | \n 261.759618 | \n 0.439336 | \n -5.969363e+04 | \n -4.785695e+04 | \n -2.102528e+04 | \n -0.015282 | \n 1.550398e+06 | \n 1.250088e+06 | \n 0.806302 | \n 0.4518 | \n 3.851069e+06 | \n 3.906057e+06 | \n 3.889583e+06 | \n 754.554759 | \n 261.759618 | \n 754.554759 | \n 261.759618 | \n
\n \n | 575 | \n 2022-07-13 | \n wbtc | \n 8 | \n 77132.736065 | \n 40043.358891 | \n 2.075963 | \n 39984.699361 | \n 0.004160 | \n 80.128950 | \n 0.439336 | \n -1.634478e+02 | \n -7.133886e+06 | \n -3.134172e+06 | \n -0.483749 | \n 1.746781e+02 | \n 7.624048e+06 | \n 43646.270867 | \n 0.4518 | \n 1.746781e+02 | \n 3.378767e+02 | \n 3.378000e+02 | \n 0.004160 | \n 80.128950 | \n 0.004160 | \n 80.128950 | \n
\n \n | 576 | \n 2022-07-13 | \n zcn | \n 3 | \n 2857.359303 | \n 1643.043365 | \n 8442.390858 | \n 1667.280439 | \n 42.424075 | \n 8.378294 | \n 0.439336 | \n -5.465076e+05 | \n -2.432456e+05 | \n -1.068665e+05 | \n -0.655215 | \n 2.875819e+05 | \n 1.280001e+05 | \n 0.445091 | \n 0.4518 | \n 2.875819e+05 | \n 8.340895e+05 | \n 8.329419e+05 | \n 42.424075 | \n 8.378294 | \n 42.424075 | \n 8.378294 | \n
\n \n
\n
577 rows × 25 columns
\n
"]}}],"execution_count":0},{"cell_type":"markdown","source":["[](https://gov.bancor.network/t/proposal-limit-on-curve-liquidity-to-max-520-x-7-day-fees-100k-bnt/3876/1#current-situation-1)Current situation\n-----------------------------------------------------------------------------------------------------------------------------------------------\n\nLet's look at how that translates to the current state of play for ETH.\n\nThere is 8807 ETH on the trading curve right now:\n\n"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"bebfedd4-6b11-4eef-94a1-3d6b8c65730d"}}},{"cell_type":"markdown","source":["Get the latest date in the dataset:"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"ea01a7ac-32a5-4422-afc1-93ab9c723cc1"}}},{"cell_type":"code","source":["latest_date = df.sort_values('date', ascending=False)['date'].values[0]\nlatest_date"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"e8aba016-3643-403c-a470-81b2324264e3"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"Out[30]: '2022-07-13'
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\nOut[30]: '2022-07-13'
"]}}],"execution_count":0},{"cell_type":"markdown","source":["Based on the above, set `oncurve_eth` and `token_symbol` constants:"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"468ca5b7-0e4d-4765-8839-f89d49062352"}}},{"cell_type":"code","source":["token_symbol = 'eth'"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"a14c9306-d442-44b5-8ce2-79bab7878ef5"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n"]}}],"execution_count":0},{"cell_type":"code","source":["oncurve_eth = int(round(df[(df['date']==latest_date) & (df['targetSymbol']==token_symbol)]['tknTradingLiquidity_real'].values[0]))\noncurve_eth"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"99a3c628-d264-4ea7-9e2d-617f2d4b6d68"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"Out[32]: 9724
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\nOut[32]: 9724
"]}}],"execution_count":0},{"cell_type":"markdown","source":["30 day rolling average ETH fees are:"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"aa51a4c9-ad48-49a0-aaba-2c626a33d6bf"}}},{"cell_type":"code","source":["eth_rolling_30day_real_avg = df[(df['date']==latest_date) & (df['targetSymbol']==token_symbol)]['trade_revenue_real_rolling_30day_avg'].values[0]\n\neth_rolling_30day_usd_avg = df[(df['date']==latest_date) & (df['targetSymbol']==token_symbol)]['trade_revenue_usd_rolling_30day_avg'].values[0]\n\nprint(f'\\033[1m 30 day rolling avg: {eth_rolling_30day_real_avg} (real/day) \\033[1m \\n')"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"52eb8924-e303-4cc7-a5c2-d8655b246d92"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":" 30 day rolling avg: 0.5032507641136772 (real/day) \n\n
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n 30 day rolling avg: 0.5032507641136772 (real/day) \n\n
"]}}],"execution_count":0},{"cell_type":"code","source":["print(f'\\033[1m 30 day rolling avg: {eth_rolling_30day_usd_avg} (usd/day) \\033[1m')"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"b9b9b980-07fe-4e3a-b533-26be6ea5e10d"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":" 30 day rolling avg: 532.0927496151701 (usd/day) \n
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n 30 day rolling avg: 532.0927496151701 (usd/day) \n
"]}}],"execution_count":0},{"cell_type":"markdown","source":["Estimated 7 day ETH fees are:"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"7f621e21-6cea-42b0-b991-fa8ecc906c3a"}}},{"cell_type":"code","source":["estimated_7day_eth_fees_real = eth_rolling_30day_real_avg * 7\nestimated_7day_eth_fees_usd = eth_rolling_30day_usd_avg * 7\n\nprint(f'\\033[1m Estimated 7 day ETH fees: {estimated_7day_eth_fees_real} (real) \\033[1m \\n')"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"2a835fe0-7fea-402a-b811-f55b1a87c911"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":" Estimated 7 day ETH fees: 3.5227553487957404 (real) \n\n
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n Estimated 7 day ETH fees: 3.5227553487957404 (real) \n\n
"]}}],"execution_count":0},{"cell_type":"code","source":["print(f'\\033[1m Estimated 7 day ETH fees: {estimated_7day_eth_fees_usd} (usd) \\033[1m')"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"7ca63500-0877-4fde-8055-70dbf1fb9dfb"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":" Estimated 7 day ETH fees: 3724.649247306191 (usd) \n
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n Estimated 7 day ETH fees: 3724.649247306191 (usd) \n
"]}}],"execution_count":0},{"cell_type":"markdown","source":["Comparing the above to prior naive estimate (limited data):\n\n\n\nIf we annualize the estimated fees we get:"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":true,"inputWidgets":{},"nuid":"386e63bd-882d-4834-9477-406569bf005c"}}},{"cell_type":"code","source":["eth_annualized = round(52 * estimated_7day_eth_fees_real, 2)\neth_annualized_percent_of_oncurve = round((eth_annualized / oncurve_eth) * 100, 2)\n\nprint(f'\\033[1m ETH Fees annualized: {eth_annualized} (real) \\033[1m \\n')"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"d87952a5-06e6-4320-bf8e-c32471167ee2"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":" ETH Fees annualized: 183.18 (real) \n\n
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n ETH Fees annualized: 183.18 (real) \n\n
"]}}],"execution_count":0},{"cell_type":"code","source":["print(f'\\033[1m ETH Fees annualized as a percent of ETH on curve: {eth_annualized_percent_of_oncurve} (%) \\033[1m')"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"1bdc4c18-33ef-4e3a-838c-1a9bf75fcc1d"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":" ETH Fees annualized as a percent of ETH on curve: 1.88 (%) \n
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n ETH Fees annualized as a percent of ETH on curve: 1.88 (%) \n
"]}}],"execution_count":0},{"cell_type":"markdown","source":["Setting aside mechanics like leveraged vortexing for the moment, the baseline is that the protocol will break even on ETH if IL on 8800 ETH is 1.29% or less, relative to BNT."],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"ea3f9edb-7889-4071-843e-9964859675f4"}}},{"cell_type":"markdown","source":["That means that if ETH increases by just 50% relative to BNT over a year, all else equal, the protocol loses ETH and the deficit increases."],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"468ba4f4-545d-4e15-b70d-9f2e160e4de6"}}},{"cell_type":"markdown","source":["[](https://gov.bancor.network/t/proposal-limit-on-curve-liquidity-to-max-520-x-7-day-fees-100k-bnt/3876/1#proposed-2)Proposed\n-----------------------------------------------------------------------------------------------------------------------------\n\nLet's limit the ETH pool size to 520x the 7 day fees, i.e. an APR of 10% all else equal.\n\nThis gives us a limited trading liquidity of:"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"937e79eb-d82c-4f93-b14f-ee7d3999d0c7"}}},{"cell_type":"code","source":["limited_pool_size_520 = int(round(520 * estimated_7day_eth_fees_real, 0))\nprint(f'\\033[1m {limited_pool_size_520} (ETH) \\033[1m')"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"1f206032-7c22-4575-b5a2-503774458605"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":" 1832 (ETH) \n
","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"html","arguments":{}}},"output_type":"display_data","data":{"text/html":["\n 1832 (ETH) \n
"]}}],"execution_count":0},{"cell_type":"markdown","source":["If we assume that the fees generated on the limited trading liquidity are not significantly less than the fees on the current on-curve liquidity then this gives us an APR of 10% on ETH."],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"cbc3f824-2a8e-40b6-bf78-1bf6b32ad50b"}}},{"cell_type":"markdown","source":["### TODO: Below not yet completed."],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"3cd706e1-f95a-4c54-93a6-bd930a3d61fa"}}},{"cell_type":"markdown","source":["We spent all of bancor v2.1 with caps on trading pools showing that 10% APR is sustainable for many TKN, but the reality of how many fees we would miss on a 2400 ETH pool vs. an 8800 ETH pool is something that we would have to measure and monitor.\n\nContinuing with the assumption of comparable fees with the limited pool...\n\nThis now means that a 2x in ETH vs. BNT costs the protocol 240 ETH instead of 880 ETH. That is to say, over 1 year we can expect the protocol to break even on the 10% APR even if ETH moons 2x relative to BNT.\n\nWe also have 6400 ETH freed up to generate fees. Native staking on ETH yields about 3%.\n\n6400 ETH x 0.03 = 192 ETH ~= 200 ETH\n\nAssuming we do the most conservative thing other than doing nothing at all, use the native ETH staking mechanism, we now have a budget of 200 ETH from staking 6400 ETH and 240 ETH from a 10% APR on 2400 ETH to cover the IL on 2400 ETH.\n\nWith 440 ETH we can cover up to ~18% IL on 2400 ETH which allows ETH to annually moon ~4x relative to BNT\n\nClearly a 4x annual moon is a significantly larger safety margin than a 1.5x annual moon.\n\nAll we need to do is:\n\n- Limit pool to 520x the 7 day fees to give a minimum 10% APR\n- Move the off-curve liquidity into a conservative yield generating mechanism offering 3% e.g. native staking\n\nGenerally we could and should apply this 520x cap to all TKN on the platform as a rule of thumb and then backfill more sophisticated analytics over time.\n\nFor many TKN we might run into a situation where the 7 day fees are too small to support trading of any size, so we can set a minimum, which right now can be somewhat arbitrary like 100k BNT.\n\n[](https://gov.bancor.network/t/proposal-limit-on-curve-liquidity-to-max-520-x-7-day-fees-100k-bnt/3876/1#voting-3)Voting\n-------------------------------------------------------------------------------------------------------------------------\n\nYES: Cap all on-curve TKN trading liquidity to 520x their rolling 7 day fees\n\n- Frequency and level of automation of the cap management TBD and improved over time\n- Commit to alternative revenue generation for the off-curve capital\n- Commit to monitoring and ongoing analysis that is more sophisticated than what is presented above\n\nNO: Continue to attempt to cover double digit annual % IL with single digit % annual TKN fees"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"2f9033a8-e93b-4f49-8dad-ff4e62c0e100"}}}],"metadata":{"application/vnd.databricks.v1+notebook":{"notebookName":"limit_tradingliquidity_proposal_study","dashboards":[],"notebookMetadata":{"pythonIndentUnit":4},"language":"python","widgets":{},"notebookOrigID":1744197420073319}},"nbformat":4,"nbformat_minor":0}
diff --git a/examples/studies/limit_max_on_curve_liquidity/simulation.ipynb b/examples/studies/limit_max_on_curve_liquidity/simulation.ipynb
new file mode 100644
index 00000000..28585074
--- /dev/null
+++ b/examples/studies/limit_max_on_curve_liquidity/simulation.ipynb
@@ -0,0 +1,56 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "zsh:1: permission denied: /Users/mikewcasale/Local/projects/bancor/research/bancor_research/scenario_generator/batch_run.py\r\n"
+ ]
+ }
+ ],
+ "source": [
+ "! /Users/mikewcasale/Local/projects/bancor/research/bancor_research/scenario_generator/batch_run.py"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "outputs": [],
+ "source": [],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "name": "bancor_research_env",
+ "language": "python",
+ "display_name": "bancor_research_env"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 2
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython2",
+ "version": "2.7.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
\ No newline at end of file