Profile
Back to NewsBack
GitHub Trending 4 min
Reader Mode
uniswap-python/uniswap-python: 🦄 The unofficial Python client for the Uniswap exchange.

uniswap-python/uniswap-python: 🦄 The unofficial Python client for the Uniswap exchange.

4 hours ago

uniswap-python

GitHub Actions</a> codecov</a> Downloads</a> License</a> PyPI</a> Typechecking: Mypy</a> Code style: black</a> GitPOAP Badge</a>

GitHub Repo stars</a> Twitter Follow</a>

The unofficial Python client for Uniswap.

Documentation is available at https://uniswap-python.com/

Functionality

  • 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

Supports

- Uniswap v4 (as of v0.8.0, beta) - Swaps, price quoting, liquidity management - Pool discovery via pool cache service - 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)

Getting Started

See our Getting started guide in the documentation.

Testing

Unit tests are under development using the pytest framework. Contributions are welcome!

Tests run on a fork of mainnet using Anvil (part of Foundry). Install Foundry with:

curl -L https://foundry.paradigm.xyz | bash
export PATH="$PATH:$HOME/.foundry/bin"
foundryup

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)

Funding

Development of this library has been funded by:

  • The Uniswap Grants Program, which awarded a $15k grant (2021) that funded the development of Uniswap v3 support.
  • Community donations through Gitcoin Grants, which were used to compensate contributors (see #181).
  • Superuser Labs, Erik's company, which has sponsored continued development and maintenance, including funding @liquid-8's work on Uniswap v4 support.

Authors

Contributors also earn this beautiful GitPOAP for their contributions!

Changelog

_0.9.0_

  • Added: Async versions of Uniswap V2-V4
  • Added: V2 and V3 custom routes (untested)
  • Added: Async pool cache service for Uniswap V4
  • Removed: V1 support
_0.8.0_

  • Added: Uniswap V4 support
  • Added: Pool cache service for Uniswap V4
  • Full parameters customization for V4 transactions; V4 transaction replacement and cancelling.
_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 in uniswap.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 and get_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 Anvil/Foundry (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
Chat with me