Skip to main content

A flexible python library to interact with evm DEX.

Project description

WEB3Dex

A 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

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

Get it ready

pip install web3tooldex

How to start

Python script:

from web3tooldex.ethereum import Uniswap

uniswap = Uniswap()
USDC = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"

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

Result:

reserves:  [6492345095.457761, 63422.06165275629, 1660409488]
liquidity_in:  64985095.456767
liquidity_out:  32622.56550318234
reserve_ratio:  0.000501956723423
price:  0.00050048699228345345

How to swap them

import web3tooldex

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

# 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()
]

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

web3tooldex-0.0.1.tar.gz (9.5 kB view details)

Uploaded Source

File details

Details for the file web3tooldex-0.0.1.tar.gz.

File metadata

  • Download URL: web3tooldex-0.0.1.tar.gz
  • Upload date:
  • Size: 9.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.10.11

File hashes

Hashes for web3tooldex-0.0.1.tar.gz
Algorithm Hash digest
SHA256 89ae21d9026584aa9c1298950dd1520be2cc52ed850bed43d59c99e9246c7a40
MD5 7fe8850ff25b64ac348cd33176e93ad2
BLAKE2b-256 5938d5dab9d7e597c8e12b310c32ed449217f0109eda9872ab1a5242934e9938

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page