{ "cells": [ { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "remove-input" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Bootstrap requirements met for eth\n", "Bootstrap requirements met for wbtc\n", "Bootstrap requirements met for link\n" ] } ], "source": [ "from datascience import *\n", "from datascience.predicates import are\n", "path_data = '../../../../data/'\n", "import numpy as np\n", "import matplotlib\n", "matplotlib.use('Agg')\n", "%matplotlib inline\n", "import matplotlib.pyplot as plots\n", "plots.style.use('fivethirtyeight')\n", "import warnings\n", "warnings.simplefilter(action=\"ignore\", category=FutureWarning)\n", "from bancor_research import Decimal\n", "import pandas as pd\n", "from urllib.request import urlopen \n", "import re\n", "\n", "from bancor_research.bancor_simulator.v3.spec.network import *\n", "\n", "# Recall from an earlier chapter that we already defined the whitelisted_tokens as follows.\n", "cooldown_time: int = 7\n", "iter_limit = 10000\n", "bnt_min_liquidity: Decimal = Decimal('10000')\n", "bnt_funding_limit: Decimal = Decimal('40000')\n", "whitelisted_tokens: list = ['bnt', 'eth', 'wbtc', 'link']\n", "\n", "withdrawal_fee: Decimal = Decimal('0.0025')\n", "price_feeds = pd.DataFrame({'INDX':[0 for i in range(iter_limit + 1)],\n", " 'bnt':[2.5 for i in range(iter_limit + 1)],\n", " 'link':[15.00 for i in range(iter_limit + 1)],\n", " 'eth':[2500.00 for i in range(iter_limit + 1)],\n", " 'wbtc':[40000.00 for i in range(iter_limit + 1)]})\n", "\n", "network_fee: Decimal = Decimal('0.2')\n", "trading_fee: Decimal = Decimal('0.01')\n", "\n", "# There are other possible configuration settings available, however for the present purpose we will use the defaults.\n", "v3 = BancorDapp(whitelisted_tokens=whitelisted_tokens,\n", " network_fee=network_fee,\n", " trading_fee=trading_fee,\n", " cooldown_time=cooldown_time,\n", " withdrawal_fee=withdrawal_fee,\n", " bnt_min_liquidity=bnt_min_liquidity,\n", " bnt_funding_limit=bnt_funding_limit,\n", " price_feeds=price_feeds)\n", "\n", "v3.create_user('Alice')\n", "v3.create_user('Bob')\n", "v3.create_user('Charlie')\n", "\n", "v3.set_user_balance(user_name='Alice', tkn_name='eth', tkn_amt=101)\n", "v3.set_user_balance(user_name='Charlie', tkn_name='link', tkn_amt=10001)\n", "v3.set_user_balance(user_name='Bob', tkn_name='wbtc', tkn_amt=101)\n", "\n", "v3.deposit(tkn_amt=100, tkn_name='eth', user_name='Alice')\n", "\n", "v3.deposit(tkn_amt=10000, tkn_name='link', user_name='Charlie')\n", "\n", "v3.deposit(tkn_amt=100, tkn_name='wbtc', user_name='Bob')\n", "\n", "v3.deposit(tkn_amt=1, tkn_name='eth', user_name='Alice')\n", "\n", "v3.deposit(tkn_amt=1, tkn_name='link', user_name='Charlie')\n", "\n", "v3.deposit(tkn_amt=1, tkn_name='wbtc', user_name='Bob')\n", "\n", "v3.dao_msig_init_pools(whitelisted_tokens, 'bnt')\n", "\n", "\n", "def read_url(url): \n", " return re.sub('\\\\s+', ' ', urlopen(url).read().decode())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Trading and Fees - BNT to TKN\n", "\n", "Continuing from the system state described above, the details of how the trading pools are used as a price oracle, the\n", "behavior and purpose of the price EMA, and the response of the staking ledger to the accumulation of swap revenue will\n", "now be discussed in detail. For the purpose of demonstration, let each of these pools have a 1% swap fee, and a Vortex\n", "rate of 20%." ] }, { "cell_type": "code", "execution_count": 3, "outputs": [ { "data": { "text/plain": " bnt \\\nAccount Alice NaN \n Bob NaN \n Charlie NaN \n Trader NaN \nContract EP Vault 0 \n ER Vault 0 \n Master Vault 60000.000000000000000000 \n Protocol NaN \nPool a: TKN Staked Balance NaN \n b: TKN Trading Liquidity NaN \n c: BNT Trading Liquidity NaN \n d: BNT Current Funding NaN \n e: Spot Rate NaN \n f: Average Rate NaN \n g: Average Inverse Rate NaN \n\n eth \\\nAccount Alice 0E-18 \n Bob NaN \n Charlie NaN \n Trader NaN \nContract EP Vault 0 \n ER Vault 0 \n Master Vault 101.000000000000000000 \n Protocol NaN \nPool a: TKN Staked Balance 101.000000000000000000 \n b: TKN Trading Liquidity 20.000000000000000000 \n c: BNT Trading Liquidity 20000.000000000000000000 \n d: BNT Current Funding 20000.000000000000000000 \n e: Spot Rate 1E+3 \n f: Average Rate 1E+3 \n g: Average Inverse Rate 0 \n\n wbtc \\\nAccount Alice NaN \n Bob 0E-18 \n Charlie NaN \n Trader NaN \nContract EP Vault 0 \n ER Vault 0 \n Master Vault 101.000000000000000000 \n Protocol NaN \nPool a: TKN Staked Balance 101.000000000000000000 \n b: TKN Trading Liquidity 1.250000000000000000 \n c: BNT Trading Liquidity 20000.000000000000000000 \n d: BNT Current Funding 20000.000000000000000000 \n e: Spot Rate 1.6E+4 \n f: Average Rate 1.6E+4 \n g: Average Inverse Rate 0 \n\n link \\\nAccount Alice NaN \n Bob NaN \n Charlie 0E-18 \n Trader NaN \nContract EP Vault 0 \n ER Vault 0 \n Master Vault 10001.000000000000000000 \n Protocol NaN \nPool a: TKN Staked Balance 10001.000000000000000000 \n b: TKN Trading Liquidity 3333.333333333333333333 \n c: BNT Trading Liquidity 20000.000000000000000000 \n d: BNT Current Funding 20000.000000000000000000 \n e: Spot Rate 6.000000000000000000000000000 \n f: Average Rate 6.000000000000000000000000000 \n g: Average Inverse Rate 0 \n\n bnbnt \\\nAccount Alice NaN \n Bob NaN \n Charlie NaN \n Trader NaN \nContract EP Vault NaN \n ER Vault NaN \n Master Vault NaN \n Protocol 60000.000000000000000000 \nPool a: TKN Staked Balance NaN \n b: TKN Trading Liquidity NaN \n c: BNT Trading Liquidity NaN \n d: BNT Current Funding NaN \n e: Spot Rate NaN \n f: Average Rate NaN \n g: Average Inverse Rate NaN \n\n bneth \\\nAccount Alice 101.000000000000000000 \n Bob NaN \n Charlie NaN \n Trader NaN \nContract EP Vault NaN \n ER Vault NaN \n Master Vault NaN \n Protocol 0 \nPool a: TKN Staked Balance NaN \n b: TKN Trading Liquidity NaN \n c: BNT Trading Liquidity NaN \n d: BNT Current Funding NaN \n e: Spot Rate NaN \n f: Average Rate NaN \n g: Average Inverse Rate NaN \n\n bnwbtc \\\nAccount Alice NaN \n Bob 101.000000000000000000 \n Charlie NaN \n Trader NaN \nContract EP Vault NaN \n ER Vault NaN \n Master Vault NaN \n Protocol 0 \nPool a: TKN Staked Balance NaN \n b: TKN Trading Liquidity NaN \n c: BNT Trading Liquidity NaN \n d: BNT Current Funding NaN \n e: Spot Rate NaN \n f: Average Rate NaN \n g: Average Inverse Rate NaN \n\n bnlink \nAccount Alice NaN \n Bob NaN \n Charlie 10001.000000000000000000 \n Trader NaN \nContract EP Vault NaN \n ER Vault NaN \n Master Vault NaN \n Protocol 0 \nPool a: TKN Staked Balance NaN \n b: TKN Trading Liquidity NaN \n c: BNT Trading Liquidity NaN \n d: BNT Current Funding NaN \n e: Spot Rate NaN \n f: Average Rate NaN \n g: Average Inverse Rate NaN ", "text/html": "
\n | \n | bnt | \neth | \nwbtc | \nlink | \nbnbnt | \nbneth | \nbnwbtc | \nbnlink | \n
---|---|---|---|---|---|---|---|---|---|
Account | \nAlice | \nNaN | \n0E-18 | \nNaN | \nNaN | \nNaN | \n101.000000000000000000 | \nNaN | \nNaN | \n
Bob | \nNaN | \nNaN | \n0E-18 | \nNaN | \nNaN | \nNaN | \n101.000000000000000000 | \nNaN | \n|
Charlie | \nNaN | \nNaN | \nNaN | \n0E-18 | \nNaN | \nNaN | \nNaN | \n10001.000000000000000000 | \n|
Trader | \nNaN | \nNaN | \nNaN | \nNaN | \nNaN | \nNaN | \nNaN | \nNaN | \n|
Contract | \nEP Vault | \n0 | \n0 | \n0 | \n0 | \nNaN | \nNaN | \nNaN | \nNaN | \n
ER Vault | \n0 | \n0 | \n0 | \n0 | \nNaN | \nNaN | \nNaN | \nNaN | \n|
Master Vault | \n60000.000000000000000000 | \n101.000000000000000000 | \n101.000000000000000000 | \n10001.000000000000000000 | \nNaN | \nNaN | \nNaN | \nNaN | \n|
Protocol | \nNaN | \nNaN | \nNaN | \nNaN | \n60000.000000000000000000 | \n0 | \n0 | \n0 | \n|
Pool | \na: TKN Staked Balance | \nNaN | \n101.000000000000000000 | \n101.000000000000000000 | \n10001.000000000000000000 | \nNaN | \nNaN | \nNaN | \nNaN | \n
b: TKN Trading Liquidity | \nNaN | \n20.000000000000000000 | \n1.250000000000000000 | \n3333.333333333333333333 | \nNaN | \nNaN | \nNaN | \nNaN | \n|
c: BNT Trading Liquidity | \nNaN | \n20000.000000000000000000 | \n20000.000000000000000000 | \n20000.000000000000000000 | \nNaN | \nNaN | \nNaN | \nNaN | \n|
d: BNT Current Funding | \nNaN | \n20000.000000000000000000 | \n20000.000000000000000000 | \n20000.000000000000000000 | \nNaN | \nNaN | \nNaN | \nNaN | \n|
e: Spot Rate | \nNaN | \n1E+3 | \n1.6E+4 | \n6.000000000000000000000000000 | \nNaN | \nNaN | \nNaN | \nNaN | \n|
f: Average Rate | \nNaN | \n1E+3 | \n1.6E+4 | \n6.000000000000000000000000000 | \nNaN | \nNaN | \nNaN | \nNaN | \n|
g: Average Inverse Rate | \nNaN | \n0 | \n0 | \n0 | \nNaN | \nNaN | \nNaN | \nNaN | \n
\n | \n | bnt | \neth | \nwbtc | \nlink | \nbnbnt | \nbneth | \nbnwbtc | \nbnlink | \n
---|---|---|---|---|---|---|---|---|---|
Account | \nAlice | \nNaN | \n0.0000 | \nNaN | \nNaN | \nNaN | \n101.0000 | \nNaN | \nNaN | \n
Bob | \nNaN | \nNaN | \n0.0000 | \nNaN | \nNaN | \nNaN | \n101.0000 | \nNaN | \n|
Charlie | \nNaN | \nNaN | \nNaN | \n0.0000 | \nNaN | \nNaN | \nNaN | \n10001.0000 | \n|
Trader | \n2000.0000 | \nNaN | \nNaN | \nNaN | \nNaN | \nNaN | \nNaN | \nNaN | \n|
Contract | \nEP Vault | \n0.0000 | \n0.0000 | \n0.0000 | \n0.0000 | \nNaN | \nNaN | \nNaN | \nNaN | \n
ER Vault | \n0.0000 | \n0.0000 | \n0.0000 | \n0.0000 | \nNaN | \nNaN | \nNaN | \nNaN | \n|
Master Vault | \n60000.0000 | \n101.0000 | \n101.0000 | \n10001.0000 | \nNaN | \nNaN | \nNaN | \nNaN | \n|
Protocol | \nNaN | \nNaN | \nNaN | \nNaN | \n60000.0000 | \n0.0000 | \n0.0000 | \n0.0000 | \n|
Pool | \na: TKN Staked Balance | \nNaN | \n101.0000 | \n101.0000 | \n10001.0000 | \nNaN | \nNaN | \nNaN | \nNaN | \n
b: TKN Trading Liquidity | \nNaN | \n20.0000 | \n1.2500 | \n3333.3333 | \nNaN | \nNaN | \nNaN | \nNaN | \n|
c: BNT Trading Liquidity | \nNaN | \n20000.0000 | \n20000.0000 | \n20000.0000 | \nNaN | \nNaN | \nNaN | \nNaN | \n|
d: BNT Current Funding | \nNaN | \n20000.0000 | \n20000.0000 | \n20000.0000 | \nNaN | \nNaN | \nNaN | \nNaN | \n|
e: Spot Rate | \nNaN | \n1000.0000 | \n16000.0000 | \n6.0000 | \nNaN | \nNaN | \nNaN | \nNaN | \n|
f: Average Rate | \nNaN | \n1000.0000 | \n16000.0000 | \n6.0000 | \nNaN | \nNaN | \nNaN | \nNaN | \n|
g: Average Inverse Rate | \nNaN | \n0.0000 | \n0.0000 | \n0.0000 | \nNaN | \nNaN | \nNaN | \nNaN | \n
\n | \n | bnt | \neth | \nwbtc | \nlink | \nbnbnt | \nbneth | \nbnwbtc | \nbnlink | \n
---|---|---|---|---|---|---|---|---|---|
Account | \nAlice | \nNaN | \n0.0000 | \nNaN | \nNaN | \nNaN | \n101.0000 | \nNaN | \nNaN | \n
Bob | \nNaN | \nNaN | \n0.0000 | \nNaN | \nNaN | \nNaN | \n101.0000 | \nNaN | \n|
Charlie | \nNaN | \nNaN | \nNaN | \n0.0000 | \nNaN | \nNaN | \nNaN | \n10001.0000 | \n|
Trader | \n0.0000 | \nNaN | \nNaN | \n300.0000 | \nNaN | \nNaN | \nNaN | \nNaN | \n|
Contract | \nEP Vault | \n0.0000 | \n0.0000 | \n0.0000 | \n0.0000 | \nNaN | \nNaN | \nNaN | \nNaN | \n
ER Vault | \n0.0000 | \n0.0000 | \n0.0000 | \n0.0000 | \nNaN | \nNaN | \nNaN | \nNaN | \n|
Master Vault | \n62000.0000 | \n101.0000 | \n101.0000 | \n9701.0000 | \nNaN | \nNaN | \nNaN | \nNaN | \n|
Protocol | \nNaN | \nNaN | \nNaN | \nNaN | \n60000.0000 | \n0.0000 | \n0.0000 | \n0.0000 | \n|
Pool | \na: TKN Staked Balance | \nNaN | \n101.0000 | \n101.0000 | \n10003.4242 | \nNaN | \nNaN | \nNaN | \nNaN | \n
b: TKN Trading Liquidity | \nNaN | \n20.0000 | \n1.2500 | \n3033.3333 | \nNaN | \nNaN | \nNaN | \nNaN | \n|
c: BNT Trading Liquidity | \nNaN | \n20000.0000 | \n20000.0000 | \n21995.6044 | \nNaN | \nNaN | \nNaN | \nNaN | \n|
d: BNT Current Funding | \nNaN | \n20000.0000 | \n20000.0000 | \n20000.0000 | \nNaN | \nNaN | \nNaN | \nNaN | \n|
e: Spot Rate | \nNaN | \n1000.0000 | \n16000.0000 | \n7.2513 | \nNaN | \nNaN | \nNaN | \nNaN | \n|
f: Average Rate | \nNaN | \n1000.0000 | \n16000.0000 | \n6.0000 | \nNaN | \nNaN | \nNaN | \nNaN | \n|
g: Average Inverse Rate | \nNaN | \n0.0000 | \n0.0000 | \n0.0000 | \nNaN | \nNaN | \nNaN | \nNaN | \n
\n", " \n", "
\n", "\n", "\n", " \n", "
\n", "\n", "\n", " \n", "
\n", "\n", "where a1† and a1 are the BNT trading liquidity balances of the pool after and before the trade, respectively, b1† and b1 are the LINK trading liquidity balances of the pool after and before the trade, respectively, d1 is the pool fee (e.g. 0.01, or 1%) and e is the Vortex rate (e.g. 0.2, or 20%). The number of BNT tokens being sent into the vault is x, and the number of LINK tokens sent back to the trader is tknOut. The change in the TKN trading liquidity (and therefore the amount of TKN received by the trader) is unchanged from the standard case. The calculation of the fee awarded to liquidity providers, denominated in its own TKN and added to the staking ledger is:\n", "\n", "\n", " \n", "
\n", "\n", "And the calculation for the fee given to the Bancor Vortex, denominated exclusively in BNT and added to the vortex ledger is:\n", "\n", "\n", " \n", "
" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } } } ], "metadata": { "kernelspec": { "name": "python3", "language": "python", "display_name": "Python 3 (ipykernel)" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" } }, "nbformat": 4, "nbformat_minor": 2 }