logo

uniswap-python

🦄 The unofficial Python client for the Uniswap exchange.

StarsStars501
ForksForks220
WatchersWatchers501
Open issuesOpen issues18
Last updateLast update2022-01-05

uniswap-python

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 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!

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)

Support our continued work!

You can support us on Gitcoin Grants.

Authors

Want to help out with development? We have funding to those that do! See #181

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 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