diff --git a/notebooks/tutorials/pairingcode.ipynb b/notebooks/tutorials/pairingcode.ipynb
deleted file mode 100644
index 45ec036..0000000
--- a/notebooks/tutorials/pairingcode.ipynb
+++ /dev/null
@@ -1,1124 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "id": "8ee9b46b-75c6-4f77-b113-98766534604c",
- "metadata": {},
- "source": [
- "## Pairing Code Abstractions\n",
- "\n",
- "**Swap()**: swaps X for Y (and vice verse)
\n",
- "**AddLiquidity()**: adds liquidity using only X or Y amounts
\n",
- "**RemoveLiquidity()**: removes liquidity using only X or Y amounts
\n",
- "**SwapDeposit()**: deposit desired token -> perform approx. 50% swap -> perform approx. 50/50 deposit (exact percentages are calculated)
\n",
- "**WithdrawSwap()**: perform approx. 50/50 withdraw -> swap remaining approx. 50% -> return desired token (exact percentages are calculated)
"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "id": "744eb40c-fdbb-4a30-9a4d-22b6e12f86ff",
- "metadata": {},
- "outputs": [],
- "source": [
- "import os\n",
- "import copy\n",
- "import numpy as np\n",
- "import pandas as pd\n",
- "import time\n",
- "import datetime\n",
- "import math\n",
- "import matplotlib.pyplot as plt\n",
- "cwd = os.getcwd().replace(\"notebooks/tutorials\",\"\")\n",
- "os.chdir(cwd)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "id": "440f92b5-615b-4550-83d6-a3e8c2875184",
- "metadata": {},
- "outputs": [],
- "source": [
- "from uniswappy.math.model import TokenDeltaModel\n",
- "from uniswappy.math.model import EventSelectionModel\n",
- "from uniswappy.cpt.factory import Factory\n",
- "from uniswappy.cpt.exchg import Exchange\n",
- "from uniswappy.erc import ERC20\n",
- "from uniswappy.process.deposit import SwapDeposit\n",
- "from uniswappy.process.swap import WithdrawSwap\n",
- "from uniswappy.process.liquidity import RemoveLiquidity\n",
- "from uniswappy.process.liquidity import AddLiquidity\n",
- "from uniswappy.process.swap import Swap\n",
- "from uniswappy.cpt.quote import LPQuote"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "620d431e-1409-4270-bd18-ebb2b2cc7318",
- "metadata": {},
- "source": [
- "### Setup pool"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "id": "1e68a541-b6c0-4733-949d-d6ac123f2b72",
- "metadata": {},
- "outputs": [],
- "source": [
- "user_nm = 'user0'\n",
- "eth_amount = 1000\n",
- "tkn_amount = 100000"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "id": "c1de04eb-8852-430d-9273-8c6833cddd7d",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Exchange ETH/TKN (LP)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000 | TKN = 100000\n",
- "Liquidity: 10000.0 \n",
- "\n"
- ]
- }
- ],
- "source": [
- "tkn = ERC20(\"TKN\", \"0x111\")\n",
- "eth = ERC20(\"ETH\", \"0x09\")\n",
- "factory = Factory(\"ETH pool factory\", \"0x2\")\n",
- "lp = factory.create_exchange(eth, tkn, symbol=\"LP\", address=\"0x011\")\n",
- "lp.add_liquidity(\"user0\", eth_amount, tkn_amount, eth_amount, tkn_amount)\n",
- "lp.info()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "id": "e6b8acd3-31ad-4926-aea3-98752f139dcd",
- "metadata": {},
- "outputs": [],
- "source": [
- "tDel = TokenDeltaModel(50)\n",
- "ev = EventSelectionModel()"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "4d1a3d37-a5b7-42c9-84f6-35a049bf4826",
- "metadata": {},
- "source": [
- "**Swap():** swap tkn for eth"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "id": "b1d1f2c2-a3c5-40dc-956b-bc6390fd7789",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Exchange ETH/TKN (LP)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000 | TKN = 100000\n",
- "Liquidity: 10000.0 \n",
- "\n",
- "Exchange ETH/TKN (LP)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 990.1284196560293 | TKN = 101000\n",
- "Liquidity: 10000.0 \n",
- "\n"
- ]
- }
- ],
- "source": [
- "tkn = ERC20(\"TKN\", \"0x111\")\n",
- "eth = ERC20(\"ETH\", \"0x09\")\n",
- "factory = Factory(\"ETH pool factory\", \"0x2\")\n",
- "lp = factory.create_exchange(eth, tkn, symbol=\"LP\", address=\"0x011\")\n",
- "lp.add_liquidity(user_nm, eth_amount, tkn_amount, eth_amount, tkn_amount)\n",
- "lp.info()\n",
- "\n",
- "out = Swap().apply(lp, tkn, user_nm, 1000)\n",
- "lp.info()"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "865bc323-fd14-42b5-9cfd-26d923a39f23",
- "metadata": {},
- "source": [
- "**Swap():** swap eth for tkn"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "id": "901298ea-eb06-479d-b05f-711da5d80331",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Exchange ETH/TKN (LP)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000 | TKN = 100000\n",
- "Liquidity: 10000.0 \n",
- "\n",
- "Exchange ETH/TKN (LP)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1010 | TKN = 99012.84196560294\n",
- "Liquidity: 10000.0 \n",
- "\n"
- ]
- }
- ],
- "source": [
- "tkn = ERC20(\"TKN\", \"0x111\")\n",
- "eth = ERC20(\"ETH\", \"0x09\")\n",
- "factory = Factory(\"ETH pool factory\", \"0x2\")\n",
- "lp = factory.create_exchange(eth, tkn, symbol=\"LP\", address=\"0x011\")\n",
- "lp.add_liquidity(user_nm, eth_amount, tkn_amount, eth_amount, tkn_amount)\n",
- "lp.info()\n",
- "\n",
- "out = Swap().apply(lp, eth, user_nm, 10)\n",
- "lp.info()"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "1f6e9045-2637-4a29-8577-95d07ba9343e",
- "metadata": {},
- "source": [
- "**AddLiquidity()**: add LP based on eth "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "id": "1fd83152-c93e-491d-89bf-e780ba079dd5",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Exchange ETH/TKN (LP)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000 | TKN = 100000\n",
- "Liquidity: 10000.0 \n",
- "\n",
- "Exchange ETH/TKN (LP)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1010 | TKN = 101000.0\n",
- "Liquidity: 10100.0 \n",
- "\n"
- ]
- }
- ],
- "source": [
- "tkn = ERC20(\"TKN\", \"0x111\")\n",
- "eth = ERC20(\"ETH\", \"0x09\")\n",
- "factory = Factory(\"ETH pool factory\", \"0x2\")\n",
- "lp = factory.create_exchange(eth, tkn, symbol=\"LP\", address=\"0x011\")\n",
- "lp.add_liquidity(user_nm, eth_amount, tkn_amount, eth_amount, tkn_amount)\n",
- "lp.info()\n",
- "\n",
- "AddLiquidity().apply(lp, eth, user_nm, 10)\n",
- "lp.info()"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "7667ae3b-93a9-4253-948e-27653c7852bf",
- "metadata": {},
- "source": [
- "**AddLiquidity()**: add LP based on tkn "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "id": "f65c0db1-f95f-4274-930f-e2633066605c",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Exchange ETH/TKN (LP)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000 | TKN = 100000\n",
- "Liquidity: 10000.0 \n",
- "\n",
- "Exchange ETH/TKN (LP)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1010.0 | TKN = 101000.0\n",
- "Liquidity: 10100.0 \n",
- "\n"
- ]
- },
- {
- "data": {
- "text/plain": [
- "{'0': 1e-15, 'user0': 10100.0}"
- ]
- },
- "execution_count": 9,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "tkn = ERC20(\"TKN\", \"0x111\")\n",
- "eth = ERC20(\"ETH\", \"0x09\")\n",
- "factory = Factory(\"ETH pool factory\", \"0x2\")\n",
- "lp = factory.create_exchange(eth, tkn, symbol=\"LP\", address=\"0x011\")\n",
- "lp.add_liquidity(user_nm, eth_amount, tkn_amount, eth_amount, tkn_amount)\n",
- "lp.info()\n",
- "\n",
- "AddLiquidity().apply(lp, tkn, user_nm, 1000)\n",
- "lp.info()\n",
- "lp.liquidity_providers"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "a05d867f-0e2b-43dc-9a22-23b650290c74",
- "metadata": {},
- "source": [
- "**RemoveLiquidity()**: remove LP based on eth "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "id": "2300eb80-153d-4538-a6f8-dd34839f42c2",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Exchange ETH/TKN (LP)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000 | TKN = 100000\n",
- "Liquidity: 10000.0 \n",
- "\n",
- "Exchange ETH/TKN (LP)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1.0 | TKN = 100.0\n",
- "Liquidity: 10.0 \n",
- "\n"
- ]
- }
- ],
- "source": [
- "tkn = ERC20(\"TKN\", \"0x111\")\n",
- "eth = ERC20(\"ETH\", \"0x09\")\n",
- "factory = Factory(\"ETH pool factory\", \"0x2\")\n",
- "lp = factory.create_exchange(eth, tkn, symbol=\"LP\", address=\"0x011\")\n",
- "lp.add_liquidity(user_nm, eth_amount, tkn_amount, eth_amount, tkn_amount)\n",
- "lp.info()\n",
- "\n",
- "RemoveLiquidity().apply(lp, eth, user_nm, 999)\n",
- "lp.info()"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "33e01ddc-4751-4db3-95c3-0f4b76286cdf",
- "metadata": {},
- "source": [
- "**RemoveLiquidity()**: remove LP based on tkn "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "id": "5cdf6d7b-049d-42cc-b815-ba5978112c83",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Exchange ETH/TKN (LP)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000 | TKN = 100000\n",
- "Liquidity: 10000.0 \n",
- "\n",
- "Exchange ETH/TKN (LP)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 999.0 | TKN = 99900.0\n",
- "Liquidity: 9990.0 \n",
- "\n"
- ]
- }
- ],
- "source": [
- "tkn = ERC20(\"TKN\", \"0x111\")\n",
- "eth = ERC20(\"ETH\", \"0x09\")\n",
- "factory = Factory(\"ETH pool factory\", \"0x2\")\n",
- "lp = factory.create_exchange(eth, tkn, symbol=\"LP\", address=\"0x011\")\n",
- "lp.add_liquidity(user_nm, eth_amount, tkn_amount, eth_amount, tkn_amount)\n",
- "lp.info()\n",
- "\n",
- "RemoveLiquidity().apply(lp, tkn, user_nm, 100)\n",
- "lp.info()"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "a244262b-a3d9-4096-9fdc-73d964c59c4d",
- "metadata": {},
- "source": [
- "**SwapDeposit()**: deposit LP with only tkn\n",
- "* deposit desired token -> perform 50% swap -> perform 50/50 deposit"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "id": "dd65eee3-b8d0-4b83-8c04-cf99ea55fcc4",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Exchange ETH/TKN (LP)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000 | TKN = 100000\n",
- "Liquidity: 10000.0 \n",
- "\n",
- "Exchange ETH/TKN (LP)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000.0 | TKN = 100100.0\n",
- "Liquidity: 10004.991241237401 \n",
- "\n"
- ]
- }
- ],
- "source": [
- "tkn = ERC20(\"TKN\", \"0x111\")\n",
- "eth = ERC20(\"ETH\", \"0x09\")\n",
- "factory = Factory(\"ETH pool factory\", \"0x2\")\n",
- "lp = factory.create_exchange(eth, tkn, symbol=\"LP\", address=\"0x011\")\n",
- "lp.add_liquidity(user_nm, eth_amount, tkn_amount, eth_amount, tkn_amount)\n",
- "lp.info()\n",
- "\n",
- "SwapDeposit().apply(lp, tkn, user_nm, 100)\n",
- "lp.info() "
- ]
- },
- {
- "cell_type": "markdown",
- "id": "ab3beefc-0392-4ea4-a6f2-6151eda3ea5e",
- "metadata": {},
- "source": [
- "**SwapDeposit()**: deposit LP with only eth\n",
- "* deposit desired token -> perform 50% swap -> perform 50/50 deposit"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "id": "e411ba09-3688-4998-94b4-c0453f4700d9",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Exchange ETH/TKN (LP)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000 | TKN = 100000\n",
- "Liquidity: 10000.0 \n",
- "\n",
- "Exchange ETH/TKN (LP)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1001.0000000000001 | TKN = 100000.0\n",
- "Liquidity: 10004.991241237401 \n",
- "\n"
- ]
- }
- ],
- "source": [
- "tkn = ERC20(\"TKN\", \"0x111\")\n",
- "eth = ERC20(\"ETH\", \"0x09\")\n",
- "factory = Factory(\"ETH pool factory\", \"0x2\")\n",
- "lp = factory.create_exchange(eth, tkn, symbol=\"LP\", address=\"0x011\")\n",
- "lp.add_liquidity(user_nm, eth_amount, tkn_amount, eth_amount, tkn_amount)\n",
- "lp.info()\n",
- "\n",
- "amount_out = SwapDeposit().apply(lp, eth, user_nm, 1)\n",
- "lp.info()"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "b28f8cfb-5073-4314-9341-17b30bde3886",
- "metadata": {},
- "source": [
- "**WithdrawSwap()**: withdraw LP based upon expected amount of eth\n",
- "* perform 50/50 withdraw -> swap remaining 50% -> return desired token"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "id": "90fa05cd-f102-4ccc-bf7f-38cfb6d90fe6",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Exchange ETH/TKN (LP)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000 | TKN = 100000\n",
- "Liquidity: 10000.0 \n",
- "\n",
- "Exchange ETH/TKN (LP)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 998.9999999999999 | TKN = 100000.0\n",
- "Liquidity: 9994.99123998928 \n",
- "\n"
- ]
- }
- ],
- "source": [
- "tkn = ERC20(\"TKN\", \"0x111\")\n",
- "eth = ERC20(\"ETH\", \"0x09\")\n",
- "factory = Factory(\"ETH pool factory\", \"0x2\")\n",
- "lp = factory.create_exchange(eth, tkn, symbol=\"LP\", address=\"0x011\")\n",
- "lp.add_liquidity(user_nm, eth_amount, tkn_amount, eth_amount, tkn_amount)\n",
- "lp.info()\n",
- "\n",
- "expected_amount_out = WithdrawSwap().apply(lp, eth, user_nm, 1)\n",
- "lp.info()"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "2a60bf10-f474-4224-b02b-127dcd77b1d6",
- "metadata": {},
- "source": [
- "**WithdrawSwap()**: withdraw LP based upon expected amount of tkn"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "id": "e6f8a1eb-d1ea-45bd-a6fa-30f206f5c48b",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Exchange ETH/TKN (LP)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000 | TKN = 100000\n",
- "Liquidity: 10000.0 \n",
- "\n",
- "Exchange ETH/TKN (LP)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000.0 | TKN = 99899.99999999999\n",
- "Liquidity: 9994.99123998928 \n",
- "\n"
- ]
- }
- ],
- "source": [
- "tkn = ERC20(\"TKN\", \"0x111\")\n",
- "eth = ERC20(\"ETH\", \"0x09\")\n",
- "factory = Factory(\"ETH pool factory\", \"0x2\")\n",
- "lp = factory.create_exchange(eth, tkn, symbol=\"LP\", address=\"0x011\")\n",
- "lp.add_liquidity(user_nm, eth_amount, tkn_amount, eth_amount, tkn_amount)\n",
- "lp.info()\n",
- "\n",
- "expected_amount_out = WithdrawSwap().apply(lp, tkn, user_nm, 100)\n",
- "lp.info()"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "1763fba6-925b-4ee9-8588-ab62b39450eb",
- "metadata": {},
- "source": [
- "**Swap():** swap lp_tkn for eth"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "id": "66550ca8-0edf-4569-b95b-1e33e833c0f6",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Exchange ETH/TKN (LP1)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000 | TKN = 100000\n",
- "Liquidity: 10000.0 \n",
- "\n",
- "Exchange ETHTKN-LP/TKN (LP2)\n",
- "Coins: ETHTKN-LP/TKN\n",
- "Reserves: ETHTKN-LP = 10000.0 | TKN = 100000\n",
- "Liquidity: 31622.776601683792 \n",
- "\n",
- "Exchange ETHTKN-LP/TKN (LP2)\n",
- "Coins: ETHTKN-LP/TKN\n",
- "Reserves: ETHTKN-LP = 10100.0 | TKN = 99012.84196560294\n",
- "Liquidity: 31622.776601683792 \n",
- "\n"
- ]
- }
- ],
- "source": [
- "tkn = ERC20(\"TKN\", \"0x111\")\n",
- "eth = ERC20(\"ETH\", \"0x09\")\n",
- "factory = Factory(\"ETH pool factory\", \"0x2\")\n",
- "lp_tkn = factory.create_exchange(eth, tkn, symbol=\"LP1\", address=\"0x011\")\n",
- "lp_tkn.add_liquidity(user_nm, eth_amount, tkn_amount, eth_amount, tkn_amount)\n",
- "lp_tkn.info()\n",
- "\n",
- "tkn2 = ERC20(\"TKN\", \"0x112\")\n",
- "lp_tkn_amount = lp_tkn.total_supply\n",
- "lp2 = factory.create_exchange(lp_tkn, tkn2, symbol=\"LP2\", address=\"0x012\")\n",
- "lp2.add_liquidity(user_nm, lp_tkn_amount, tkn_amount, lp_tkn_amount, tkn_amount)\n",
- "lp2.info()\n",
- "\n",
- "out = Swap().apply(lp2, lp_tkn, user_nm, 100)\n",
- "lp2.info()"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "cdb1eb2c-0c6d-4589-ac53-59c5bf5734ab",
- "metadata": {},
- "source": [
- "**Swap():** swap eth for lp_tkn"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "id": "d695eca9-bf36-4de7-86ce-1a928acfce54",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Exchange ETH/TKN (LP1)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000 | TKN = 100000\n",
- "Liquidity: 10000.0 \n",
- "\n",
- "Exchange ETHTKN-LP/TKN (LP2)\n",
- "Coins: ETHTKN-LP/TKN\n",
- "Reserves: ETHTKN-LP = 10000.0 | TKN = 100000\n",
- "Liquidity: 31622.776601683792 \n",
- "\n",
- "Exchange ETHTKN-LP/TKN (LP2)\n",
- "Coins: ETHTKN-LP/TKN\n",
- "Reserves: ETHTKN-LP = 9990.039930189601 | TKN = 100100\n",
- "Liquidity: 31622.776601683792 \n",
- "\n"
- ]
- }
- ],
- "source": [
- "tkn = ERC20(\"TKN\", \"0x111\")\n",
- "eth = ERC20(\"ETH\", \"0x09\")\n",
- "factory = Factory(\"ETH pool factory\", \"0x2\")\n",
- "lp_tkn = factory.create_exchange(eth, tkn, symbol=\"LP1\", address=\"0x011\")\n",
- "lp_tkn.add_liquidity(user_nm, eth_amount, tkn_amount, eth_amount, tkn_amount)\n",
- "lp_tkn.info()\n",
- "\n",
- "tkn2 = ERC20(\"TKN\", \"0x112\")\n",
- "lp_tkn_amount = lp_tkn.total_supply\n",
- "lp2 = factory.create_exchange(lp_tkn, tkn2, symbol=\"LP2\", address=\"0x012\")\n",
- "lp2.add_liquidity(user_nm, lp_tkn_amount, tkn_amount, lp_tkn_amount, tkn_amount)\n",
- "lp2.info()\n",
- "\n",
- "out = Swap().apply(lp2, tkn2, user_nm, 100)\n",
- "lp2.info()"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "66039ec9-86e7-49ec-9e0a-519e395d6418",
- "metadata": {},
- "source": [
- "**AddLiquidity()**: add LP based on tkn2 "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 18,
- "id": "b06a9541-c36a-4d94-b401-8a075bf601e7",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Exchange ETH/TKN (LP1)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000 | TKN = 100000\n",
- "Liquidity: 10000.0 \n",
- "\n",
- "Exchange ETHTKN-LP/TKN (LP2)\n",
- "Coins: ETHTKN-LP/TKN\n",
- "Reserves: ETHTKN-LP = 10000.0 | TKN = 100000\n",
- "Liquidity: 31622.776601683792 \n",
- "\n",
- "Exchange ETHTKN-LP/TKN (LP2)\n",
- "Coins: ETHTKN-LP/TKN\n",
- "Reserves: ETHTKN-LP = 10001.0 | TKN = 100010.0\n",
- "Liquidity: 31625.93887934396 \n",
- "\n"
- ]
- }
- ],
- "source": [
- "tkn = ERC20(\"TKN\", \"0x111\")\n",
- "eth = ERC20(\"ETH\", \"0x09\")\n",
- "factory = Factory(\"ETH pool factory\", \"0x2\")\n",
- "lp_tkn = factory.create_exchange(eth, tkn, symbol=\"LP1\", address=\"0x011\")\n",
- "lp_tkn.add_liquidity(user_nm, eth_amount, tkn_amount, eth_amount, tkn_amount)\n",
- "lp_tkn.info()\n",
- "\n",
- "tkn2 = ERC20(\"TKN\", \"0x112\")\n",
- "lp_tkn_amount = lp_tkn.total_supply\n",
- "lp2 = factory.create_exchange(lp_tkn, tkn2, symbol=\"LP2\", address=\"0x012\")\n",
- "lp2.add_liquidity(user_nm, lp_tkn_amount, tkn_amount, lp_tkn_amount, tkn_amount)\n",
- "lp2.info()\n",
- "\n",
- "AddLiquidity().apply(lp2, tkn2, user_nm, 10)\n",
- "lp2.info()"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "ac2b121d-71df-478f-86c3-72d24764a182",
- "metadata": {},
- "source": [
- "**AddLiquidity()**: add LP based on lp_tkn "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 19,
- "id": "abf5c45d-5691-40cf-a7ac-bbb202c4f871",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Exchange ETH/TKN (LP1)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000 | TKN = 100000\n",
- "Liquidity: 10000.0 \n",
- "\n",
- "Exchange ETHTKN-LP/TKN (LP2)\n",
- "Coins: ETHTKN-LP/TKN\n",
- "Reserves: ETHTKN-LP = 10000.0 | TKN = 100000\n",
- "Liquidity: 31622.776601683792 \n",
- "\n",
- "Exchange ETHTKN-LP/TKN (LP2)\n",
- "Coins: ETHTKN-LP/TKN\n",
- "Reserves: ETHTKN-LP = 10010.0 | TKN = 100100.0\n",
- "Liquidity: 31654.399378285478 \n",
- "\n"
- ]
- }
- ],
- "source": [
- "tkn = ERC20(\"TKN\", \"0x111\")\n",
- "eth = ERC20(\"ETH\", \"0x09\")\n",
- "factory = Factory(\"ETH pool factory\", \"0x2\")\n",
- "lp_tkn = factory.create_exchange(eth, tkn, symbol=\"LP1\", address=\"0x011\")\n",
- "lp_tkn.add_liquidity(user_nm, eth_amount, tkn_amount, eth_amount, tkn_amount)\n",
- "lp_tkn.info()\n",
- "\n",
- "tkn2 = ERC20(\"TKN\", \"0x112\")\n",
- "lp_tkn_amount = lp_tkn.total_supply\n",
- "lp2 = factory.create_exchange(lp_tkn, tkn2, symbol=\"LP2\", address=\"0x012\")\n",
- "lp2.add_liquidity(user_nm, lp_tkn_amount, tkn_amount, lp_tkn_amount, tkn_amount)\n",
- "lp2.info()\n",
- "\n",
- "AddLiquidity().apply(lp2, lp_tkn, user_nm, 10)\n",
- "lp2.info()"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "6b934c73-9ed2-4d6b-9cff-66704cbb89d7",
- "metadata": {},
- "source": [
- "**RemoveLiquidity()**: remove LP based on tkn2 "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 20,
- "id": "0f626ff4-5432-4e50-8728-f41cc3d7d45a",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Exchange ETH/TKN (LP1)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000 | TKN = 100000\n",
- "Liquidity: 10000.0 \n",
- "\n",
- "Exchange ETHTKN-LP/TKN (LP2)\n",
- "Coins: ETHTKN-LP/TKN\n",
- "Reserves: ETHTKN-LP = 1000 | TKN = 1000\n",
- "Liquidity: 1000.0 \n",
- "\n",
- "Exchange ETHTKN-LP/TKN (LP2)\n",
- "Coins: ETHTKN-LP/TKN\n",
- "Reserves: ETHTKN-LP = 990.0 | TKN = 990.0\n",
- "Liquidity: 990.0 \n",
- "\n"
- ]
- }
- ],
- "source": [
- "tkn = ERC20(\"TKN\", \"0x111\")\n",
- "eth = ERC20(\"ETH\", \"0x09\")\n",
- "factory = Factory(\"ETH pool factory\", \"0x2\")\n",
- "lp_tkn = factory.create_exchange(eth, tkn, symbol=\"LP1\", address=\"0x011\")\n",
- "lp_tkn.add_liquidity(user_nm, eth_amount, tkn_amount, eth_amount, tkn_amount)\n",
- "lp_tkn.info()\n",
- "\n",
- "tkn2 = ERC20(\"TKN\", \"0x112\")\n",
- "lp_tkn_amount = 1000\n",
- "lp2 = factory.create_exchange(lp_tkn, tkn2, symbol=\"LP2\", address=\"0x012\")\n",
- "lp2.add_liquidity(user_nm, eth_amount, lp_tkn_amount, eth_amount, lp_tkn_amount)\n",
- "lp2.info()\n",
- "\n",
- "RemoveLiquidity().apply(lp2, tkn2, user_nm, 10)\n",
- "lp2.info()"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "4fe1350d-2795-4bb3-98a6-fb819d2bef0e",
- "metadata": {},
- "source": [
- "**RemoveLiquidity(lp_tkn)**: remove LP based on lp_tkn "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 21,
- "id": "7999b861-8ee1-474f-a201-ffa3565191ca",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Exchange ETH/TKN (LP1)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000 | TKN = 100000\n",
- "Liquidity: 10000.0 \n",
- "\n",
- "Exchange ETHTKN-LP/TKN (LP2)\n",
- "Coins: ETHTKN-LP/TKN\n",
- "Reserves: ETHTKN-LP = 1000 | TKN = 1000\n",
- "Liquidity: 1000.0 \n",
- "\n",
- "Exchange ETHTKN-LP/TKN (LP2)\n",
- "Coins: ETHTKN-LP/TKN\n",
- "Reserves: ETHTKN-LP = 990.0 | TKN = 990.0\n",
- "Liquidity: 990.0 \n",
- "\n"
- ]
- }
- ],
- "source": [
- "tkn = ERC20(\"TKN\", \"0x111\")\n",
- "eth = ERC20(\"ETH\", \"0x09\")\n",
- "factory = Factory(\"ETH pool factory\", \"0x2\")\n",
- "lp_tkn = factory.create_exchange(eth, tkn, symbol=\"LP1\", address=\"0x011\")\n",
- "lp_tkn.add_liquidity(user_nm, eth_amount, tkn_amount, eth_amount, tkn_amount)\n",
- "lp_tkn.info()\n",
- "\n",
- "tkn2 = ERC20(\"TKN\", \"0x112\")\n",
- "lp_tkn_amount = 1000\n",
- "lp2 = factory.create_exchange(lp_tkn, tkn2, symbol=\"LP2\", address=\"0x012\")\n",
- "lp2.add_liquidity(user_nm, eth_amount, lp_tkn_amount, eth_amount, lp_tkn_amount)\n",
- "lp2.info()\n",
- "\n",
- "RemoveLiquidity().apply(lp2, lp_tkn, user_nm, 10)\n",
- "lp2.info()"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "fa24c849-7137-49cf-96ac-c50859bcf4dc",
- "metadata": {},
- "source": [
- "**SwapDeposit()**: deposit LP with only tkn2\n",
- "* deposit desired token -> perform 50% swap -> perform 50/50 deposit"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 22,
- "id": "652ef16a-50d3-400e-9f15-acca965f94e0",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Exchange ETH/TKN (LP1)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000 | TKN = 100000\n",
- "Liquidity: 10000.0 \n",
- "\n",
- "Exchange ETHTKN-LP/TKN (LP2)\n",
- "Coins: ETHTKN-LP/TKN\n",
- "Reserves: ETHTKN-LP = 1000 | TKN = 1000\n",
- "Liquidity: 1000.0 \n",
- "\n",
- "Exchange ETHTKN-LP/TKN (LP2)\n",
- "Coins: ETHTKN-LP/TKN\n",
- "Reserves: ETHTKN-LP = 1000.0 | TKN = 1009.9999999999998\n",
- "Liquidity: 1004.9800695579358 \n",
- "\n"
- ]
- }
- ],
- "source": [
- "tkn = ERC20(\"TKN\", \"0x111\")\n",
- "eth = ERC20(\"ETH\", \"0x09\")\n",
- "factory = Factory(\"ETH pool factory\", \"0x2\")\n",
- "lp_tkn = factory.create_exchange(eth, tkn, symbol=\"LP1\", address=\"0x011\")\n",
- "lp_tkn.add_liquidity(user_nm, eth_amount, tkn_amount, eth_amount, tkn_amount)\n",
- "lp_tkn.info()\n",
- "\n",
- "tkn2 = ERC20(\"TKN\", \"0x112\")\n",
- "lp_tkn_amount = 1000\n",
- "lp2 = factory.create_exchange(lp_tkn, tkn2, symbol=\"LP2\", address=\"0x012\")\n",
- "lp2.add_liquidity(user_nm, eth_amount, lp_tkn_amount, eth_amount, lp_tkn_amount)\n",
- "lp2.info()\n",
- "\n",
- "SwapDeposit().apply(lp2, tkn2, user_nm, 10)\n",
- "lp2.info() "
- ]
- },
- {
- "cell_type": "markdown",
- "id": "33201379-82f8-49fb-ad60-42f1d4977cf1",
- "metadata": {},
- "source": [
- "**SwapDeposit()**: deposit LP with only lp_tkn\n",
- "* deposit desired token -> perform 50% swap -> perform 50/50 deposit"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 23,
- "id": "f27e9a94-1d19-4d6a-82f4-dbf1caa30fcc",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Exchange ETH/TKN (LP1)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000 | TKN = 100000\n",
- "Liquidity: 10000.0 \n",
- "\n",
- "Exchange ETHTKN-LP/TKN (LP2)\n",
- "Coins: ETHTKN-LP/TKN\n",
- "Reserves: ETHTKN-LP = 1000 | TKN = 1000\n",
- "Liquidity: 1000.0 \n",
- "\n",
- "Exchange ETHTKN-LP/TKN (LP2)\n",
- "Coins: ETHTKN-LP/TKN\n",
- "Reserves: ETHTKN-LP = 1009.9999999999998 | TKN = 1000.0\n",
- "Liquidity: 1004.9800695579358 \n",
- "\n"
- ]
- }
- ],
- "source": [
- "tkn = ERC20(\"TKN\", \"0x111\")\n",
- "eth = ERC20(\"ETH\", \"0x09\")\n",
- "factory = Factory(\"ETH pool factory\", \"0x2\")\n",
- "lp_tkn = factory.create_exchange(eth, tkn, symbol=\"LP1\", address=\"0x011\")\n",
- "lp_tkn.add_liquidity(user_nm, eth_amount, tkn_amount, eth_amount, tkn_amount)\n",
- "lp_tkn.info()\n",
- "\n",
- "tkn2 = ERC20(\"TKN\", \"0x112\")\n",
- "lp_tkn_amount = 1000\n",
- "lp2 = factory.create_exchange(lp_tkn, tkn2, symbol=\"LP2\", address=\"0x012\")\n",
- "lp2.add_liquidity(user_nm, eth_amount, lp_tkn_amount, eth_amount, lp_tkn_amount)\n",
- "lp2.info()\n",
- "\n",
- "SwapDeposit().apply(lp2, lp_tkn, user_nm, 10)\n",
- "lp2.info() "
- ]
- },
- {
- "cell_type": "markdown",
- "id": "f0f7c60d-b4ea-4568-aafd-ad232bf6edbb",
- "metadata": {},
- "source": [
- "**WithdrawSwap()**: withdraw LP based upon expected amount of tkn2\n",
- "* perform 50/50 withdraw -> swap remaining 50% -> return desired token"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 24,
- "id": "8fc42ffe-053b-4394-8cc4-e5f2a420549c",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Exchange ETH/TKN (LP1)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000 | TKN = 100000\n",
- "Liquidity: 10000.0 \n",
- "\n",
- "Exchange ETHTKN-LP/TKN (LP2)\n",
- "Coins: ETHTKN-LP/TKN\n",
- "Reserves: ETHTKN-LP = 1000 | TKN = 1000\n",
- "Liquidity: 1000.0 \n",
- "\n",
- "Exchange ETHTKN-LP/TKN (LP2)\n",
- "Coins: ETHTKN-LP/TKN\n",
- "Reserves: ETHTKN-LP = 1000.0 | TKN = 989.9999999999998\n",
- "Liquidity: 994.9799447405355 \n",
- "\n"
- ]
- }
- ],
- "source": [
- "tkn = ERC20(\"TKN\", \"0x111\")\n",
- "eth = ERC20(\"ETH\", \"0x09\")\n",
- "factory = Factory(\"ETH pool factory\", \"0x2\")\n",
- "lp_tkn = factory.create_exchange(eth, tkn, symbol=\"LP1\", address=\"0x011\")\n",
- "lp_tkn.add_liquidity(user_nm, eth_amount, tkn_amount, eth_amount, tkn_amount)\n",
- "lp_tkn.info()\n",
- "\n",
- "tkn2 = ERC20(\"TKN\", \"0x112\")\n",
- "lp_tkn_amount = 1000\n",
- "lp2 = factory.create_exchange(lp_tkn, tkn2, symbol=\"LP2\", address=\"0x012\")\n",
- "lp2.add_liquidity(user_nm, eth_amount, lp_tkn_amount, eth_amount, lp_tkn_amount)\n",
- "lp2.info()\n",
- "\n",
- "WithdrawSwap().apply(lp2, tkn2, user_nm, 10)\n",
- "lp2.info() "
- ]
- },
- {
- "cell_type": "markdown",
- "id": "715e626c-33c2-4f4d-8533-b114b960b30b",
- "metadata": {},
- "source": [
- "**WithdrawSwap()**: withdraw LP based upon expected amount of tkn2\n",
- "* perform 50/50 withdraw -> swap remaining 50% -> return desired token"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 25,
- "id": "20f30955-2980-4dd4-bedf-efaa1611b87f",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Exchange ETH/TKN (LP1)\n",
- "Coins: ETH/TKN\n",
- "Reserves: ETH = 1000 | TKN = 100000\n",
- "Liquidity: 10000.0 \n",
- "\n",
- "Exchange ETHTKN-LP/TKN (LP2)\n",
- "Coins: ETHTKN-LP/TKN\n",
- "Reserves: ETHTKN-LP = 1000 | TKN = 1000\n",
- "Liquidity: 1000.0 \n",
- "\n",
- "Exchange ETHTKN-LP/TKN (LP2)\n",
- "Coins: ETHTKN-LP/TKN\n",
- "Reserves: ETHTKN-LP = 989.9999999999998 | TKN = 1000.0\n",
- "Liquidity: 994.9799447405355 \n",
- "\n"
- ]
- }
- ],
- "source": [
- "tkn = ERC20(\"TKN\", \"0x111\")\n",
- "eth = ERC20(\"ETH\", \"0x09\")\n",
- "factory = Factory(\"ETH pool factory\", \"0x2\")\n",
- "lp_tkn = factory.create_exchange(eth, tkn, symbol=\"LP1\", address=\"0x011\")\n",
- "lp_tkn.add_liquidity(user_nm, eth_amount, tkn_amount, eth_amount, tkn_amount)\n",
- "lp_tkn.info()\n",
- "\n",
- "tkn2 = ERC20(\"TKN\", \"0x112\")\n",
- "lp_tkn_amount = 1000\n",
- "lp2 = factory.create_exchange(lp_tkn, tkn2, symbol=\"LP2\", address=\"0x012\")\n",
- "lp2.add_liquidity(user_nm, eth_amount, lp_tkn_amount, eth_amount, lp_tkn_amount)\n",
- "lp2.info()\n",
- "\n",
- "WithdrawSwap().apply(lp2, lp_tkn, user_nm, 10)\n",
- "lp2.info() "
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.9.7"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}