# Python UniswapX SDK
---
#### Project Information
[![Tests & Lint](https://github.com/Elnaril/python-uniswapx-sdk/actions/workflows/ci.yml/badge.svg)](https://github.com/Elnaril/python-uniswapx-sdk/actions/workflows/ci.yml)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/uniswapx-sdk)](https://pypi.org/project/python-uniswapx-sdk/)
[![GitHub release (latest by date)](https://img.shields.io/github/v/release/Elnaril/python-uniswapx-sdk)](https://github.com/Elnaril/python-uniswapx-sdk/releases)
[![PyPi Repository](https://img.shields.io/badge/repository-pipy.org-blue)](https://pypi.org/project/python-uniswapx-sdk/)
[![GitHub](https://img.shields.io/github/license/Elnaril/python-uniswapx-sdk)](https://github.com/Elnaril/python-uniswapx-sdk/blob/master/LICENSE)
#### Code Quality
[![CodeQL](https://github.com/elnaril/python-uniswapx-sdk/workflows/CodeQL/badge.svg)](https://github.com/Elnaril/python-uniswapx-sdk/actions/workflows/codeql.yml)
[![Test Coverage](https://img.shields.io/badge/dynamic/json?color=blueviolet&label=coverage&query=%24.totals.percent_covered_display&suffix=%25&url=https%3A%2F%2Fraw.githubusercontent.com%2FElnaril%2Fpython-uniswapx-sdk%2Fmaster%2Fcoverage.json)](https://github.com/Elnaril/python-uniswapx-sdk/blob/master/coverage.json)
[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/)
[![Type Checker: mypy](https://img.shields.io/badge/%20type%20checker-mypy-%231674b1?style=flat&labelColor=ef8336)](https://mypy-lang.org/)
[![Linter: flake8](https://img.shields.io/badge/%20linter-flake8-%231674b1?style=flat&labelColor=ef8336)](https://flake8.pycqa.org/en/latest/)
---
## Release Notes
### V0.2.0
- Exclusive Dutch Order Encoder
- Reactor Execute Encoder
- Get Orders from UniswapX API
- Integration Tests
- Documentation
### V0.1.0
- Exclusive Dutch Order Decoder
- Order Resolver
---
## Overview and Points of Attention
This library is a Python SDK that can be used to easily interact with UniswapX ecosystem: Reactors, Quoter, API.
It's partially inspired by https://github.com/Uniswap/uniswapx-sdk
⚠ This library has not been audited, so use at your own risk !
⚠ The API currently exposed is very likely to change with the following versions: consider forcing the version.
⚠ This project is a work in progress so not all features have already been implemented.
---
## Installation
A good practice is to use [Python virtual environments](https://python.readthedocs.io/en/latest/library/venv.html), here is a [tutorial](https://www.freecodecamp.org/news/how-to-setup-virtual-environments-in-python/).
The library can be pip installed from [pypi.org](https://pypi.org/project/uniswapx-sdk/) as usual:
```bash
# update pip to latest version if needed
pip install -U pip
# install the decoder from pypi.org
pip install uniswapx-sdk
```
---
## Usage
### How to encode an Exclusive Ducth Order
First, you need to import the classes that will help you to structure the encoding, along with a function that will compute the order nonce:
```python
from uniswapx_sdk.encoder import (
DecayTime,
ExclusiveDutchOrderInfo,
ExclusiveDutchOrderInput,
ExclusiveDutchOrderOutput,
ExclusiveFiller,
get_nonce,
)
```
Then you instantiate them:
```python
order_info = ExclusiveDutchOrderInfo(
reactor="0x6000da47483062a0d734ba3dc7576ce6a0b645c4",
swapper="0x...", # your account address
nonce=get_nonce(),
deadline=deadline, # Unix timestamp after which the order won't be valid any more.
)
decay_time = DecayTime(start_timestamp, end_timestamp)
dutch_input = ExclusiveDutchOrderInput(in_token_address, start_amount_in_wei, end_amount_in_wei)
dutch_outputs = (
ExclusiveDutchOrderOutput(
token=out_token_address, # or '0x0000000000000000000000000000000000000000' for native coin
start_amount=start_amount_in_wei,
end_amount=end_amount_in_wei,
recipient=recipient_address, # who is going to receive the output
),
)
exclusive_filler = ExclusiveFiller(filler_address, bps) # the exclusive filler if any with the override bps
# or exclusive_filler = ExclusiveFiller() if no exclusive filler
```
And now you're ready to encode the order and sign it:
```python
import ExclusiveDutchOrderEncoder
encoder = ExclusiveDutchOrderEncoder(chain_id)
encoded_order, signable_message = encoder.encode_order(
order_info,
decay_time,
dutch_input,
dutch_outputs,
exclusive_filler
)
signed_message = your_account.sign_message(signable_message)
```
### How to resolve/validate/quote an order
Let's say you have en encoded `order` along with its signature `sig`. Resolving it is as simple as:
```python
from uniswapx_sdk.resolver import OrderResolver
resolver = await OrderResolver.create(rpc_endpoint="https://...")
resolved_order = asyncio.run(resolver.resolve(order, sig))
```
### How to decode an order
Let's say you have en encoded order. Decoding it is as simple as:
```python
from uniswapx_sdk.decoder import ExclusiveDutchOrderDecoder
decoder = ExclusiveDutchOrderDecoder()
decoded_order = decoder.decode(encoded_order)
```
### How to get orders from UniswapX API
```python
from uniswapx_sdk.api import UniswapXAPI
api = UniswapXAPI(chain_id)
orders = await api.get_orders(order_status) # with order_status in open, expired, error, cancelled, filled, insufficient-funds
```
### How to fill an order
Let's say you want to fill (execute) a dutch order. First you encode it as follows:
```python
from uniswapx_sdk.encoder import ExclusiveDutchOrderEncoder
encoded_input = ExclusiveDutchOrderEncoder.encode_execute(order, sig) # where sig is the signature corresponding to the order
```
Then you include the `encoded_input` in the transaction you sign and send to the Exclusive Dutch Order Reactor.
Raw data
{
"_id": null,
"home_page": "",
"name": "uniswapx-sdk",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "",
"keywords": "blockchain,ethereum,uniswap,uniswapx,decoder,encoder,codec,wrapper,sdk",
"author": "",
"author_email": "Elnaril <elnaril_dev@caramail.com>",
"download_url": "https://files.pythonhosted.org/packages/a3/c2/b1226a3ffe8e7b4cfcae408a3c225ff4ed0cf3f034c6c5df20821bbaa1e1/uniswapx-sdk-0.0.2.tar.gz",
"platform": null,
"description": "# Python UniswapX SDK\n\n---\n\n#### Project Information\n[![Tests & Lint](https://github.com/Elnaril/python-uniswapx-sdk/actions/workflows/ci.yml/badge.svg)](https://github.com/Elnaril/python-uniswapx-sdk/actions/workflows/ci.yml)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/uniswapx-sdk)](https://pypi.org/project/python-uniswapx-sdk/)\n[![GitHub release (latest by date)](https://img.shields.io/github/v/release/Elnaril/python-uniswapx-sdk)](https://github.com/Elnaril/python-uniswapx-sdk/releases)\n[![PyPi Repository](https://img.shields.io/badge/repository-pipy.org-blue)](https://pypi.org/project/python-uniswapx-sdk/)\n[![GitHub](https://img.shields.io/github/license/Elnaril/python-uniswapx-sdk)](https://github.com/Elnaril/python-uniswapx-sdk/blob/master/LICENSE)\n\n#### Code Quality\n[![CodeQL](https://github.com/elnaril/python-uniswapx-sdk/workflows/CodeQL/badge.svg)](https://github.com/Elnaril/python-uniswapx-sdk/actions/workflows/codeql.yml)\n[![Test Coverage](https://img.shields.io/badge/dynamic/json?color=blueviolet&label=coverage&query=%24.totals.percent_covered_display&suffix=%25&url=https%3A%2F%2Fraw.githubusercontent.com%2FElnaril%2Fpython-uniswapx-sdk%2Fmaster%2Fcoverage.json)](https://github.com/Elnaril/python-uniswapx-sdk/blob/master/coverage.json)\n[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/)\n[![Type Checker: mypy](https://img.shields.io/badge/%20type%20checker-mypy-%231674b1?style=flat&labelColor=ef8336)](https://mypy-lang.org/)\n[![Linter: flake8](https://img.shields.io/badge/%20linter-flake8-%231674b1?style=flat&labelColor=ef8336)](https://flake8.pycqa.org/en/latest/)\n\n---\n\n## Release Notes\n### V0.2.0\n - Exclusive Dutch Order Encoder\n - Reactor Execute Encoder\n - Get Orders from UniswapX API\n - Integration Tests\n - Documentation\n### V0.1.0\n - Exclusive Dutch Order Decoder\n - Order Resolver\n\n---\n\n## Overview and Points of Attention\nThis library is a Python SDK that can be used to easily interact with UniswapX ecosystem: Reactors, Quoter, API.\nIt's partially inspired by https://github.com/Uniswap/uniswapx-sdk\n\n\u26a0 This library has not been audited, so use at your own risk !\n\n\u26a0 The API currently exposed is very likely to change with the following versions: consider forcing the version.\n\n\u26a0 This project is a work in progress so not all features have already been implemented.\n\n---\n\n## Installation\nA good practice is to use [Python virtual environments](https://python.readthedocs.io/en/latest/library/venv.html), here is a [tutorial](https://www.freecodecamp.org/news/how-to-setup-virtual-environments-in-python/).\n\nThe library can be pip installed from [pypi.org](https://pypi.org/project/uniswapx-sdk/) as usual:\n\n```bash\n# update pip to latest version if needed\npip install -U pip\n\n# install the decoder from pypi.org\npip install uniswapx-sdk\n```\n\n---\n\n## Usage\n\n### How to encode an Exclusive Ducth Order\nFirst, you need to import the classes that will help you to structure the encoding, along with a function that will compute the order nonce: \n```python\nfrom uniswapx_sdk.encoder import (\n DecayTime, \n ExclusiveDutchOrderInfo,\n ExclusiveDutchOrderInput,\n ExclusiveDutchOrderOutput,\n ExclusiveFiller,\n get_nonce,\n)\n```\n\nThen you instantiate them:\n```python\norder_info = ExclusiveDutchOrderInfo(\n reactor=\"0x6000da47483062a0d734ba3dc7576ce6a0b645c4\",\n swapper=\"0x...\", # your account address\n nonce=get_nonce(),\n deadline=deadline, # Unix timestamp after which the order won't be valid any more.\n)\n\ndecay_time = DecayTime(start_timestamp, end_timestamp)\n\ndutch_input = ExclusiveDutchOrderInput(in_token_address, start_amount_in_wei, end_amount_in_wei)\n\ndutch_outputs = (\n ExclusiveDutchOrderOutput(\n token=out_token_address, # or '0x0000000000000000000000000000000000000000' for native coin\n start_amount=start_amount_in_wei,\n end_amount=end_amount_in_wei,\n recipient=recipient_address, # who is going to receive the output\n ),\n)\n\nexclusive_filler = ExclusiveFiller(filler_address, bps) # the exclusive filler if any with the override bps\n# or exclusive_filler = ExclusiveFiller() if no exclusive filler\n```\n\nAnd now you're ready to encode the order and sign it:\n```python\nimport ExclusiveDutchOrderEncoder\n\nencoder = ExclusiveDutchOrderEncoder(chain_id)\nencoded_order, signable_message = encoder.encode_order(\n order_info,\n decay_time,\n dutch_input,\n dutch_outputs,\n exclusive_filler\n)\nsigned_message = your_account.sign_message(signable_message)\n```\n\n### How to resolve/validate/quote an order\nLet's say you have en encoded `order` along with its signature `sig`. Resolving it is as simple as:\n\n```python\nfrom uniswapx_sdk.resolver import OrderResolver\n\nresolver = await OrderResolver.create(rpc_endpoint=\"https://...\")\nresolved_order = asyncio.run(resolver.resolve(order, sig))\n```\n\n### How to decode an order\nLet's say you have en encoded order. Decoding it is as simple as:\n```python\nfrom uniswapx_sdk.decoder import ExclusiveDutchOrderDecoder\n\ndecoder = ExclusiveDutchOrderDecoder()\ndecoded_order = decoder.decode(encoded_order)\n```\n\n### How to get orders from UniswapX API\n```python\nfrom uniswapx_sdk.api import UniswapXAPI\n\napi = UniswapXAPI(chain_id)\norders = await api.get_orders(order_status) # with order_status in open, expired, error, cancelled, filled, insufficient-funds\n```\n\n### How to fill an order\nLet's say you want to fill (execute) a dutch order. First you encode it as follows:\n```python\nfrom uniswapx_sdk.encoder import ExclusiveDutchOrderEncoder\n\nencoded_input = ExclusiveDutchOrderEncoder.encode_execute(order, sig) # where sig is the signature corresponding to the order\n```\nThen you include the `encoded_input` in the transaction you sign and send to the Exclusive Dutch Order Reactor.\n",
"bugtrack_url": null,
"license": "MIT License",
"summary": "Python SDK for the UniswapX protocol",
"version": "0.0.2",
"project_urls": {
"Bug Tracker": "https://github.com/Elnaril/python-uniswapx-sdk/issues",
"Buy Me A Coffee": "https://www.buymeacoffee.com/elnaril",
"Fiverr": "https://www.fiverr.com/freelancers/elnaril",
"Homepage": "https://github.com/Elnaril/python-uniswapx-sdk"
},
"split_keywords": [
"blockchain",
"ethereum",
"uniswap",
"uniswapx",
"decoder",
"encoder",
"codec",
"wrapper",
"sdk"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "0583abe851dd8db0e7a08c2b01276f031131b803b361d8d1b28382c73d9728ad",
"md5": "cbba3ad5050aea950e2a114c5f315875",
"sha256": "58139a67b0eacef56c98c39f0681df4408c3b888b09405da69d4769758897cc6"
},
"downloads": -1,
"filename": "uniswapx_sdk-0.0.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "cbba3ad5050aea950e2a114c5f315875",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 11190,
"upload_time": "2024-01-08T14:21:26",
"upload_time_iso_8601": "2024-01-08T14:21:26.963657Z",
"url": "https://files.pythonhosted.org/packages/05/83/abe851dd8db0e7a08c2b01276f031131b803b361d8d1b28382c73d9728ad/uniswapx_sdk-0.0.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a3c2b1226a3ffe8e7b4cfcae408a3c225ff4ed0cf3f034c6c5df20821bbaa1e1",
"md5": "1ceda54d278adba290c2d84977a1093d",
"sha256": "775ba7fe0f65928f8989b5af857aa10163dc6f9a5cc8894b4aca138db3246733"
},
"downloads": -1,
"filename": "uniswapx-sdk-0.0.2.tar.gz",
"has_sig": false,
"md5_digest": "1ceda54d278adba290c2d84977a1093d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 18389,
"upload_time": "2024-01-08T14:21:28",
"upload_time_iso_8601": "2024-01-08T14:21:28.767699Z",
"url": "https://files.pythonhosted.org/packages/a3/c2/b1226a3ffe8e7b4cfcae408a3c225ff4ed0cf3f034c6c5df20821bbaa1e1/uniswapx-sdk-0.0.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-01-08 14:21:28",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Elnaril",
"github_project": "python-uniswapx-sdk",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [],
"tox": true,
"lcname": "uniswapx-sdk"
}