Skip to main content

WEB3Dex python lib

A flexible python library to interact with evm-like DEX. WEB3Dex library provide a unified interface for SC based on uniswap-fork. Based on web3.

Supported Dex in chains

  • Avalance
  • Bsc
  • Cronos
  • Ethereum
  • Fantom
  • Moonbeam
  • Moonriver
  • Polygon

Get it ready

pip install git+https://github.com/0xfffangel/web3dex-python.git

How to start

Python script:

from web3dex.ethereum import Uniswap

uniswap = Uniswap()
USDC = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"

print("reserves: ", uniswap.reserves(USDC))
print("liquidity_in: ", uniswap.liquidity_in(USDC))
print("liquidity_out: ", uniswap.liquidity_out(USDC))
print("reserve_ratio: {:.18f}".format(uniswap.reserve_ratio(USDC)))
print("price: {:.18f}".format(uniswap.price(USDC)))

Result:

reserves:  [64985095.457761, 32622.06165275629, 1660409488]
liquidity_in:  64985095.457761
liquidity_out:  32622.565503187332
reserve_ratio:  0.0005019929788971377
price:  0.000500486992281985

How to swap them

import web3dex

# setup env
uniswap = web3dex.ethereum.Uniswap()
USDC = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
wallet_address = ""
private_key = ""
amount = 0.001

# approve token for wallet_address if now allowance
if not uniswap.check_approval(wallet_address, USDC):
    tx = uniswap.approve(token=USDC, wallet_address=wallet_address)
    signed_tx = uniswap.signTransaction(transaction = tx, private_key = private_key)
    tx_hash = uniswap.sendTransaction(signed_transaction = signed_tx)
    if not uniswap.waitTransaction(tx_hash):
        raise Exception("TransactionExpection: " + tx_hash.hex())

# swap from base to token
tx = uniswap.swapFromBaseToTokens(amount, USDC, wallet_address)
signed_tx = uniswap.signTransaction(transaction = tx, private_key = private_key)
tx_hash = uniswap.sendTransaction(signed_transaction = signed_tx)
if not uniswap.waitTransaction(tx_hash):
    raise Exception("TransactionExpection: " + tx_hash.hex())
print(tx_hash)

# get updated balances
print("base balance {:.18f}".format(uniswap.balance(wallet_address)))
print("USDC balance {:.18f}".format(uniswap.balance(wallet_address, USDC)))

# swap from token to base
tx = uniswap.swapFromTokensToBase(amount, USDC, wallet_address)
signed_tx = uniswap.signTransaction(transaction = tx, private_key = private_key)
tx_hash = uniswap.sendTransaction(signed_transaction = signed_tx)
if not uniswap.waitTransaction(tx_hash):
    raise Exception("TransactionExpection: " + tx_hash.hex())
print(tx_hash)

Open PR for new Dex

  1. Define a new Dex config json in the chain folder (ex for uniswap: web3dex/configs/ethereum/uniswap.json):
{
    "PROVIDER": "https://mainnet.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161",
    "FACTORY_ADDR": "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f",
    "ROUTER_ADDR": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D",
    "FACTORY_ABI_FILE": "./abi/uniswapv2_factory_abi.json",
    "ROUTER_ABI_FILE": "./abi/uniswapv2_router_abi.json",
    "LIQUIDITY_ABI_FILE": "./abi/uniswapv2_liquidity_abi.json",
    "BASE_SYMBOL": "ETH",
    "BASE_CONTRACT": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
}
  1. Add new Dex object in the chain script (ex: web3dex/configs/ethereum.py):
class Uniswap(Dex):
    def __init__(self):
        super().__init__(configs + "/uniswap.json"))
  1. Add the class name into the all groups to be listed:
all = [
    ...,
    Uniswap()
]

Release files for web3dex 0.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for web3dex 0.0.1
File Size Uploaded
web3dex-0.0.1.tar.gz 20.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for web3dex 0.0.1
File Interpreter ABI Platform
web3dex-0.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 61.7 kB

Release files / web3dex-0.0.1.tar.gz

Download URL web3dex-0.0.1.tar.gz
Size 20.8 kB
Tags Source
SHA-256 checksum
How to use checksums
2f634c215eb561eccc021f9cb30bc6e48089b489f08efbe9d801bdc85db0d98b
BLAKE2b-256 checksum
How to use checksums
eaf3df611d9457823e34f86f3cff3031d2f54a38a28cef4ab6b9dfbc19460ac4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.10.5

Release files / web3dex-0.0.1-py3-none-any.whl

Download URL web3dex-0.0.1-py3-none-any.whl
Size 40.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0c58b504dc9a7f72a9334d51ccb2b176c011b9ffff67be9222acc47ad81c45a6
BLAKE2b-256 checksum
How to use checksums
c4355631f515293e0c8f0de988cdec8851aec3fb3826e0b48810f7c80a639ba3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.10.5

Release history Release notifications | RSS feed

This release

0.0.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page