Skip to content

drift-labs/driftpy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ae0fce9 · Nov 14, 2024
Sep 29, 2024
Dec 21, 2023
Feb 29, 2024
Jul 22, 2024
Oct 18, 2024
Jul 16, 2024
Nov 14, 2024
Oct 28, 2024
Oct 28, 2024
Jan 29, 2022
Nov 15, 2023
Jul 24, 2022
Jul 16, 2024
May 15, 2024
Sep 26, 2024
Nov 23, 2022
Jul 24, 2024
Jan 22, 2022
Oct 28, 2024
May 15, 2024
Sep 24, 2024
Sep 24, 2024

Repository files navigation

DriftPy

DriftPy is the Python client for the Drift protocol. It allows you to trade and fetch data from Drift using Python.

Read the full SDK documentation here!

Installation

pip install driftpy

Note: requires Python >= 3.10.

SDK Examples

  • examples/ folder includes more examples of how to use the SDK including how to provide liquidity/become an lp, stake in the insurance fund, etc.

Note on using QuickNode

If you are using QuickNode free plan, you must use AccountSubscriptionConfig("demo"), and you can only subscribe to 1 perp market and 1 spot market at a time.

Non-QuickNode free RPCs (including the public mainnet-beta url) can use cached as well.

Example setup for AccountSubscriptionConfig("demo"):

    # This example will listen to perp markets 0 & 1 and spot market 0
    # If you are listening to any perp markets, you must listen to spot market 0 or the SDK will break

    perp_markets = [0, 1]
    spot_market_oracle_infos, perp_market_oracle_infos, spot_market_indexes = get_markets_and_oracles(perp_markets = perp_markets)

    oracle_infos = spot_market_oracle_infos + perp_market_oracle_infos

    drift_client = DriftClient(
        connection,
        wallet, 
        "mainnet",             
        perp_market_indexes = perp_markets,
        spot_market_indexes = spot_market_indexes,
        oracle_infos = oracle_infos,
        account_subscription = AccountSubscriptionConfig("demo"),
    )
    await drift_client.subscribe()

If you intend to use AccountSubscriptionConfig("demo), you must call get_markets_and_oracles to get the information you need.

get_markets_and_oracles will return all the necessary OracleInfos and market_indexes in order to use the SDK.

Development

Setting Up Dev Env

bash setup.sh

Ensure correct python version (using pyenv is recommended):

pyenv install 3.10.11
pyenv global 3.10.11
poetry env use $(pyenv which python)

Install dependencies:

poetry install

To run tests, first ensure you have set up the RPC url, then run pytest:

export MAINNET_RPC_ENDPOINT="<YOUR_RPC_URL>"
export DEVNET_RPC_ENDPOINT="https://api.devnet.solana.com" # or your own RPC

poetry run pytest -v -s -x tests/ci/*.py
poetry run pytest -v -s tests/math/*.py