This package contains python re-factors of both original Uniswap V2 and V3 pairing codes, and can be utilized for the purpose of analysing and modelling its behavior for DeFi.
Looking for a structured, graduate-level walkthrough of DeFiPy and DeFi analytics?
DeFiPy: Python SDK for On-Chain Analytics is the official companion textbook for this project.
It covers:
- AMM math and invariants (Uniswap V2 & V3, Balancer, Stableswap)
- On-chain analytics and pool/event decoding
- Python workflows for DeFi modeling and simulation
- Agent-based architectures and risk pipelines built on DeFiPy
👉 Buy on Amazon: https://www.amazon.com/dp/B0G3RV5QRB
Visit DeFiPy docs for full documentation
> git clone https://github.com/defipy-devs/uniswappy
> pip install .
or
> pip install UniswapPy
- See test notebook for basic usage and tutorial on Uniswap V2 math
from uniswappy import *
user_nm = 'user'
eth_amount = 1000
tkn_amount = 100000
tkn = ERC20("TKN", "0x111")
eth = ERC20("ETH", "0x09")
exchg_data = UniswapExchangeData(tkn0 = eth, tkn1 = tkn, symbol="LP", address="0x011")
factory = UniswapFactory("ETH pool factory", "0x2")
lp = factory.deploy(exchg_data)
Join().apply(lp, user_nm, eth_amount, tkn_amount)
lp.summary()
Exchange ETH-TKN (LP)
Reserves: ETH = 1000, TKN = 100000
Liquidity: 10000.0
out = Swap().apply(lp, tkn, user_nm, 1000)
lp.summary()
Exchange ETH-TKN (LP)
Reserves: 990.1284196560293, TKN = 101000
Liquidity: 10000.0
- See test notebook for basic usage and tutorial on Uniswap V3 math
from uniswappy import *
user_nm = 'user'
eth_amount = 1000
tkn_amount = 100000
eth = ERC20("ETH", "0x09")
tkn = ERC20("TKN", "0x111")
exchg_data = UniswapExchangeData(tkn0 = eth, tkn1 = tkn, symbol="LP",
address="0x011", version = 'V3',
tick_spacing = tick_spacing,
fee = fee)
factory = UniswapFactory("ETH pool factory", "0x2")
lp = factory.deploy(exchg_data)
out_v3 = Join().apply(lp, user_nm, eth_amount, tkn_amount, lwr_tick, upr_tick)
lp.summary()
Exchange ETH-TKN (LP)
Reserves: ETH = 1000, TKN = 100000
Liquidity: 10000.0
out = Swap().apply(lp, tkn, user_nm, 1000)
lp.summary()
Exchange ETH-TKN (LP)
Real Reserves: ETH = 990.1284196560293, TKN = 101000
Liquidity: 10000.0
This application utilizes the 0x API to produce a mock Uniswap pool which allows end-users to stress test the limitations of a Uniswap pool setup using live price feeds from 0x API; for backend setup, see notebook
Click dashboard.defipy.org for live link; for more detail see README
> bokeh serve --show python/application/quant_terminal/bokeh_server.py
- Abstracted Actions: Obfuscation is removed from standard Uniswap action events to help streamline analysis and lower line count; see article How to Handle Uniswap Withdrawals like an OG, and Setup your Uniswap Deposits like a Baller
- Indexing: Can calculate settlment LP token amounts given token amounts and vice versa; see article The Uniswap Indexing Problem
- Simulation: Can simulate trading using Geometric Brownian Motion (GBM) process, or feed in actual raw price data to analyze behavior; see article How to Simulate a Liquidity Pool for Decentralized Finance
- Randomized Events: Token amount and time delta models to simulate possible trading behavior
- Analytical Tools: Basic yeild calculators and risk tools to assist in analyzing outcomes; see article How to Simulate a Uniswap V3 Order Book in Python
If you find this package helpful, please leave a ⭐!
Licensed under the Apache License, Version 2.0.
See LICENSE and NOTICE for details.
Portions of this project may include code from third-party projects under compatible open-source licenses.
