UniswapPy: Uniswap V2 / V3 Analytics with Python
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.
🔗 SPDX-Anchor: anchorregistry.ai/AR-2026-M86pm5A
📘 Official Textbook
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
📝 Docs
Visit DeFiPy docs for full documentation
🔍 Install
> git clone https://github.com/defipy-devs/uniswappy
> pip install .
or
> pip install UniswapPy
Uniswap V2
- 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()
OUTPUT:
Exchange ETH-TKN (LP)
Reserves: ETH = 1000, TKN = 100000
Liquidity: 10000.0
out = Swap().apply(lp, tkn, user_nm, 1000)
lp.summary()
OUTPUT:
Exchange ETH-TKN (LP)
Reserves: 990.1284196560293, TKN = 101000
Liquidity: 10000.0
Uniswap V3
- 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()
OUTPUT:
Exchange ETH-TKN (LP)
Reserves: ETH = 1000, TKN = 100000
Liquidity: 10000.0
out = Swap().apply(lp, tkn, user_nm, 1000)
lp.summary()
OUTPUT:
Exchange ETH-TKN (LP)
Real Reserves: ETH = 990.1284196560293, TKN = 101000
Liquidity: 10000.0
0x Quant Terminal
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
Run application locally
> bokeh serve --show python/application/quant_terminal/bokeh_server.py
Special Features
- 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 ⭐!
Testing
Run the full test suite from the repo root:
> python -m pytest python/test/ -v
Tests cover V2 and V3 functionality including:
- Process: join, swap, deposit, withdraw, add/remove liquidity
- CPT index: rebase index token, settlement LP token, round-trip identity
- Quotes: LP token pricing and reserve queries
- Analytics: impermanent loss calculations
- V3: mint, swap, LP quote, settlement, and rebase with tick ranges
Requirements
> pip install pytest
License
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.
Metadata
Release files for UniswapPy 1.7.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| uniswappy-1.7.9.tar.gz | 75.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| uniswappy-1.7.9-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 209.1 kB
Release files / uniswappy-1.7.9.tar.gz
| Download URL | uniswappy-1.7.9.tar.gz |
|---|---|
| Size | 75.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fc2e01f491036c64e3944fa076e4dfa166b39934b46f1d4547915b2af63b1222
|
|
BLAKE2b-256 checksum How to use checksums |
61fa0b9bd0247b448ec81ec5d54f2c0bf3fd0d000920a36024c295a3d7c5144c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.15
|
Release files / uniswappy-1.7.9-py3-none-any.whl
| Download URL | uniswappy-1.7.9-py3-none-any.whl |
|---|---|
| Size | 133.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4f3ae5e1ad3f4bf10231ace2a852e34d6b64f4f51628b79d7a05da2e29fafbde
|
|
BLAKE2b-256 checksum How to use checksums |
4438a207d27f7d32d592a3648908e6d61f1938999669e750b430fe8ce4e3d78e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.15
|