The unofficial Python client for Uniswap.
Documentation is available at https://uniswap-python.com/
Want to help implement support for Uniswap v4? See issue #337
- A simple to use Python wrapper for all available contract functions and variables
- A basic CLI to get prices and token metadata
- Simple parsing of data returned from the Uniswap contract
- Uniswap v3 (as of v0.5.0)
- Including beta support for Arbitrum & Optimism deployments (as of v0.5.4)
- Uniswap v2 (as of v0.4.0)
- Uniswap v1 (deprecated)
- Various forks (untested, but should work)
- Honeyswap (xDai)
- Pancakeswap (BSC)
- Sushiswap (mainnet)
See our Getting started guide in the documentation.
Unit tests are under development using the pytest framework. Contributions are welcome!
Test are run on a fork of the main net using ganache-cli. You need to install it with npm install -g ganache-cli
before running tests.
To run the full test suite, in the project directory set the PROVIDER
env variable to a mainnet provider, and run:
poetry install
export PROVIDER= # URL of provider, e.g. https://mainnet.infura.io/v3/...
make test
# or...
poetry run pytest --capture=no # doesn't capture output (verbose)
You can support us on Gitcoin Grants.
Want to help out with development? We have funding to those that do! See #181
Contributors also earn this beautiful GitPOAP for their contributions!
0.7.2
- Updated: Default fee is not applied when using Uniswap V3. Default fee for Uniswap V1 and V2 is still 0.3%.
- Updated:
InvalidFeeTier
exception is raised when a tier is not supported by the protocol version. See all supported tiers inuniswap.fee.FeeTier
0.7.1
- incomplete changelog
0.7.0
- incomplete changelog
0.5.4
- added use of gas estimation instead of a fixed gas limit (to support Arbitrum)
- added
use_estimate_gas
constructor argument (used in testing) - added constants/basic support for Arbitrum, Optimism, Polygon, and Fantom. (untested)
- incomplete changelog
0.5.3
- incomplete changelog
0.5.2
- incomplete changelog
0.5.1
- Updated dependencies
- Fixed minor typing issues
0.5.0
- Basic support for Uniswap V3
- Added new methods
get_price_input
andget_price_output
- Made a lot of previously public methods private
- Added documentation site
- Removed ENS support (which was probably broken to begin with)
0.4.6
- Bug fix: Update bleach package from 3.1.4 to 3.3.0
0.4.5
- Bug fix: Use .eth instead of .ens
0.4.4
- General: Add new logo for Uniswap V2
- Bug fix: Invalid balance check (#25)
- Bug fix: Fixed error when passing WETH as token
0.4.3
- Allow kwargs in
approved
decorator.
0.4.2
- Add note about Uniswap V2 support
0.4.1
- Update changelog for PyPi and clean up
0.4.0
A huge thank you Erik Bjäreholt for adding Uniswap V2 support, as well as all changes in this version!
- Added support for Uniswap v2
- Handle arbitrary tokens (by address) using the factory contract
- Switched from setup.py to pyproject.toml/poetry
- Switched from Travis to GitHub Actions
- For CI to work in your repo, you need to set the secret MAINNET_PROVIDER. I use Infura.
- Running tests on a local fork of mainnet using ganache-cli (started as a fixture)
- Fixed tests for make_trade and make_trade_output
- Added type annotations to the entire codebase and check them with mypy in CI
- Formatted entire codebase with black
- Moved stuff around such that the basic import becomes from uniswap import Uniswap (instead of from uniswap.uniswap import UniswapWrapper)
- Fixed misc bugs
0.3.3
- Provide token inputs as addresses instead of names
0.3.2
- Add ability to transfer tokens after a trade
- Add tests for this new functionality
0.3.1
- Add tests for all types of trades
0.3.0
- Add ability to make all types of trades
- Add example to README
0.2.1
- Add liquidity tests
0.2.0
- Add liquidity and ERC20 pool methods
0.1.1
- Major README update
0.1.0
- Add market endpoints
- Add tests for market endpoints