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 | Provenance | Actions |
|---|---|---|---|---|
| uniswappy-1.7.9.tar.gz | 75.4 kB | Without provenance | Details for uniswappy-1.7.9.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| uniswappy-1.7.9-py3-none-any.whl | Python 3 | none | any | Details for uniswappy-1.7.9-py3-none-any.whl |
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
|
Security for UniswapPy 1.7.9
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.