Package: dexpresso
Dexpresso Python SDKA python SDK for better interactions with Dexpresso decentralized exchange (DEX).QuickstartInstallationDexpresso-SDK can be installed (preferably in a virtualenv) usingpipas follows:$ pip install dexpressoNoteIf you run into problems during installation, you might have a broken environment. See the troubleshooting guide to setting up a clean environment.Example UsageFollowing examples submit a limit order on ZkSyncV1 testnet (on Goerli) and Fantom Mainnet networks.
For the start, let's importget_easy_clientmethod fromdexpresso, which provides easy interactions with Dexpresso without getting involved into details. TheConfigsis required to pass network configurations to the client in a safer manner (the provider URL and chainId are hardcoded to prevent mistakes):import os
from decimal import Decimal

from dexpresso.EasyClient import get_easy_client
from dexpresso import ConfigsThe following line is only required if you are about to use zkSyncV1 network. TheZK_SYNC_LIBRARY_PATHis required by thezkSync's python libraryitself and can be downloaded fromhere:os.environ['ZK_SYNC_LIBRARY_PATH'] = os.path.join(os.path.dirname(__file__),
                                                  'zksync_lib/zks-crypto-x86_64-unknown-linux-gnu.so')Now the easy client object can be instantiated by specifying the chosen network and the private key:wallet_privkey = 'RAW_PRIVKEY_HEX'

#### Get network object for zksync_v1
net_obj = Configs.ZkSyncOneTestnet()
#### or get network object for Fantom
net_obj = Configs.FantomMainnet()

print("creating client . . .")
ezcl = get_easy_client(net_obj, wallet_privkey)The rest of the code are independent of what network you use. In the followings, we get markets info and stats, respectively.print("getting markets info . . . ")
res = ezcl.get_markets_info()
print("markets info:\n", res)

print("getting markets stats . . . ")
res = ezcl.get_markets_stats()
print("markets stats:\n", res)Before submitting orders or being able to get account's order lists and history, you are required to prove to the Dexpresso that you own the private key of the address. Therefore, you need to sign a custom message and send it to Dexpresso. Theauthenticatefunction does all that for simplicity:print("Logging into Dexpresso . . . ")
res = ezcl.authenticate()
access_token = res["access_token"]
print("auth. result:\n", res)For submitting an order, theeasy_clienttakes care of all required signatures and securely submits it via Dexpresso's API interface:print("Submitting order using the JWT token from login . . .")
res = ezcl.create_and_submit_order(
    'ETH-USDC',
    'buy',
    Decimal(1025.56),
    Decimal(0.01),
    3600,
    Decimal(0.01)
)

print("Order submission result:\n", res)Dexpresso Python SDK StructureSince Dexpresso is a decentralized exchange (DEX) working on multiple blockchains, this library/SDK depends on a connection to the blockchain fullnode that user wishes to place orders on. To eliminate any complexity while using this python SDK, we provide multiple"pre-configured"providers on main supported networks. Therefore, you do not need to build and set up a working environment with the underlying blockchain (i.e. Web3.py for ETH-like networks or Tronpy for Tron blockchain).The following diagram shows two ways of usingDexpresso.py: 1)Normalflow, and 2)Easyflow.┌─────                                     ┌──────
                  │                                          │
                  │ ┌────────────┐                           │ ┌───────────┐
                  │ │ Configs.py │                           │ │ Client.py │
                  │ └────────────┘                           │ └───────────┘
      Offline  ───┤                              Online   ───┤
   (No Internet)  │ ┌──────────────────┐    (Internet Conn.) │ ┌───────────────┐
                  │ │ OfflineSigner.py │                     │ │ EasyClient.py │
                  │ └──────────────────┘                     │ └───────────────┘
                  │                                          │
                  └──────                                    └──────


                              Normal Flow:                    Easy Flow:
                ┌─────────────────────────────────────┐  ┌───────────────────┐
                │                                     │  │                   │
                │  ┌───────────┐ ┌──────────────────┐ │  │ ┌───────────────┐ │
                │  │ Client.py │ │ OfflineSigner.py │ │  │ │ EasyClient.py │ │
                │  └─────┬─────┘ └─────────┬────────┘ │  │ └───────┬───────┘ │
                │        │                 │          │  │         │         │
                │        │                 │          │  │         │         │
                │  create order            │          │  │   create order    │
                │        │  ────────────►  │          │  │         │         │
                │        │                 │          │  │         │         │
                │        │             Sign Order     │  │     sign order    │
                │        │                 │          │  │         │         │
                │        │  ◄────────────  │          │  │         │         │
                │        │                 │          │  │   submit order    │
                │  submit order            │          │  │         │         │
                │        │                 │          │  │         │         │
                │        │                 │          │  │         │         │
                │                                     │  │                   │
                └─────────────────────────────────────┘  └───────────────────┘Normal Flow:This is the standard flow where many SDK users prefer to ensure their private assets (private keys) are always accessed"Offline". To this end, we distinguished order creation process from signing the order. TheClientclass is responsible forcreating orderandsubmittinga signed order to the Dexpresso exchange. On the other hand, theOfflineSignerclass takes user's private key to be able to sign created orders byClient, while being completely offline.Easy Flow:In some cases, users may not be needing to completely separate and isolate creation and signature generation processes in their already developed projects. Therefore, we also provide an all-in-one classEasyClientthat can handle entire process within one line of code. We note that the underlying functions and objects used to implement theEasyClientare the exact classes and methods from theNormal Flow, which ensure that not private asset of the user is in danger of being exposed outside of user's local device.NoteSome networks, such as"zkSync V1"are only implemented asEasyClient.