Skip to content

Repository files navigation

Welcome to python-idex v3.0.0

This is an unofficial Python wrapper for the IDEX exchanges REST API v3. I am in no way affiliated with IDEX, use at your own risk.

PyPi
https://pypi.python.org/pypi/python-idex
Source code
https://github.com/sammchardy/python-idex
Documentation
https://python-idex.readthedocs.io/en/latest/

Features

  • Implementation of all REST endpoints
  • Liquidity endpoints
  • Deposit from main wallet to exchange wallet
  • Sandbox and faucet support
  • Async client support
  • Response exception handling

Notes

Using an API key increases rate limits.

Quick Start

Register an account with IDEX v3.

pip install python-idex

Synchronous Examples

# UnauthenticatedfromideximportClientclient=Client()
# server timetime=client.get_server_time()
# get exchange_infoexchange_info=client.get_exchange()
# get assetsassets=client.get_assets()
# get marketsmarkets=client.get_markets()
# get market depthdepth=client.get_order_book(market='ETH-USDC')
# get liquidity poolspools=client.get_liquidity_pools()
# Authenticatedapi_key='<api_key>'address='<address_string>'private_key='<wallet_private_key_string>'wallet_address='0x<wallet_address>'client=Client(api_key, address, private_key)
# associate wallet to accountclient.associate_wallet(wallet_address=wallet_address)
# deposit fundsclient.deposit_funds(asset='MATIC', quantity=1.234)
# get your balancesbalances=client.get_balances()
# get your open ordersorders=client.get_open_orders()
# create a market orderorder=client.create_market_order(
market='ETH-USDC',
order_side=OrderSide.BUY,
quantity=1000
)
# create a limit orderorder=client.create_limit_order(
market='ETH-USDC',
order_side=OrderSide.BUY,
quantity=1000,
price=2100,
)

Async Example

fromideximportAsyncClientasyncdefmain():
# Initialise the clientclient=awaitAsyncClient.create()
# get currenciescurrencies=awaitclient.get_currencies()
# get market depthdepth=awaitclient.get_order_book('ETH_SENT')
# get your balancesbalances=awaitclient.get_my_balances()
# get your open ordersorders=awaitclient.get_my_open_orders('ETH_SENT')
# create a limit orderorder=awaitclient.create_order('SENT', 'ETH', '0.001', '10000')
# Authenticatedapi_key='<api_key>'address='<address_string>'private_key='<wallet_private_key_string>'wallet_address='0x<wallet_address>'client=awaitAsyncClient.create(api_key, address, private_key)
# associate wallet to accountawaitclient.associate_wallet(wallet_address=wallet_address)
# deposit fundsawaitclient.deposit_funds(asset='MATIC', quantity=1.234)
# get your balancesbalances=awaitclient.get_balances()
# get your open ordersorders=awaitclient.get_open_orders()
# create a market orderorder=awaitclient.create_market_order(
market='ETH-USDC',
order_side=OrderSide.BUY,
quantity=1000
)
# create a limit orderorder=awaitclient.create_limit_order(
market='ETH-USDC',
order_side=OrderSide.BUY,
quantity=1000,
price=2100,
)
if__name__=="__main__":
loop=asyncio.get_event_loop()
loop.run_until_complete(main())

Wallet

The examples above use the wallet private key when creating the Client to specify which wallet to interact with.

Most functions will have a wallet_address parameter to target a different wallet.

If a new wallet is needed for subsequent calls init_wallet can be used to change the internal wallet

private_key='<old_private_key>'client=Client(api_key, address, private_key)
client.init_wallet(private_key='<new_wallet_private_key>')
# this will fetch balance of the new walletclient.get_balance()

Contract function

Functions such as deposit_funds, contract_exit_wallet and contract_withdraw_exit interact with the Polygon blockchain.

Gas fee and price are attempted to be generated, but may fail. These values can be overridden by passing a TransactionOptions object to the calls.

client=Client(api_key, address, private_key)
tx_options=TransactionOptions(gas=150000, gas_price=20000000000)
client.deposit_funds(
asset="USD",
quantity=1123,
tx_options=tx_options,
)

Sandbox/Testnet

IDEX v3 supports the Mumbai testnet as a sandbox to test functionality.

Enable it by passing sandbox=True when creating the client

client=Client(sandbox=True)
# or asyncclient=awaitAsyncClient.create(sandbox=True)

Read more about the Sandbox mode in the IDEX Sandbox docs.

Search reddit for a functioning faucet to receive MATIC.

For other tokens on the sandbox DIL, PIP, IDEX, USD they can be added using a contract function

client=Client(sandbox=True)
tx_id=client.contract_testnet_faucet(asset='DIL')
client.wait_for_transaction_receipt(tx_id)
tx_id=client.contract_testnet_faucet(asset='PIP')
client.wait_for_transaction_receipt(tx_id)
tx_id=client.contract_testnet_faucet(asset='IDEX')
client.wait_for_transaction_receipt(tx_id)
tx_id=client.contract_testnet_faucet(asset='USD')
client.wait_for_transaction_receipt(tx_id)

Test Orders

All order functions allow for test orders to be sent, just set test=True when calling a test function

Stake your IDEX

Earn staking rewards on your idle IDEX tokens from IDEX trade fees while also contributing to the decentralization of IDEX and robustness of the platform.

Delegate them to everyday-chicken node in the IDEX v3 delegate portal with one click.

Donate

If this library helped you out feel free to donate.

  • ETH: 0xD7a7fDdCfA687073d7cC93E9E51829a727f9fE70
  • IDEX: 0xD7a7fDdCfA687073d7cC93E9E51829a727f9fE70 (Polygon)
  • NEO: AVJB4ZgN7VgSUtArCt94y7ZYT6d5NDfpBo
  • LTC: LPC5vw9ajR1YndE1hYVeo3kJ9LdHjcRCUZ
  • BTC: 1Dknp6L6oRZrHDECRedihPzx2sSfmvEBys

Other Exchanges

If you use Binance check out my python-binance library.

If you use Binance Chain check out my python-binance-chain library.

If you use Kucoin check out my python-kucoin library.

https://analytics-pixel.appspot.com/UA-111417213-1/github/python-idex?pixel

About

IDEX v3 Exchange REST API python implementation

Resources

Stars

92 stars

Watchers

10 watching

Forks

Releases

Packages

Used by

Contributors

Languages