Skip to main content

Library to interact with firefly exchange protocol including its off-chain api-gateway and on-chain contracts

Project description

Firefly Client Library

Firefly logo

GitHub Workflow Status (with branch) pypi version License

Python Client for the Firefly Exchange API and Smart Contracts. ​

Install

The package can be installed from PyPi using pip:

pip install firefly-exchange-client

The package currently supports python >=3.8. Find complete documentation on the library at https://docs.firefly.exchange/.

Getting Started

When initializing the client, users must accept terms and conditions and define network object containing the following values:

{
    "url": "https://goerli-rollup.arbitrum.io/rpc",
    "chainId": 421613,
    "apiGateway": "https://dapi-testnet.firefly.exchange",
    "socketURL": "wss://dapi-testnet.firefly.exchange",
    "webSocketURL": "",
    "onboardingUrl": "https://testnet.firefly.exchange",
},

Users can import predefined networks from constants:

from firefly_exchange_client import Networks

For testing purposes use Networks[TESTNET_ARBITRUM] and for production please use Networks[MAINNET_ARBITRUM] ​ ​

from config import TEST_ACCT_KEY, TEST_NETWORK
from firefly_exchange_client import FireflyClient, Networks
from pprint import pprint
import asyncio

async def main():
  # initialize client
  client = FireflyClient(
      True, # agree to terms and conditions
      Networks[TEST_NETWORK], # network to connect with
      TEST_ACCT_KEY, # private key of wallet
      )

  # initialize the client
  # on boards user on firefly. Must be set to true for first time use
  await client.init(True) 
  
  print('Account Address:', client.get_public_address());

  # # gets user account data on-chain
  data = await client.get_user_account_data()

  # close aio http connection
  await client.apis.close_session()

  pprint(data)

if __name__ == "__main__":
    event_loop = asyncio.get_event_loop()
    event_loop.run_until_complete(main())

Placing Orders:

from firefly_exchange_client import FireflyClient, Networks, MARKET_SYMBOLS, ORDER_SIDE, ORDER_TYPE, OrderSignatureRequest
import asyncio

# initialize
client = FireflyClient(....) 
client.init(True)

# creates a LIMIT order to be signed
signature_request = OrderSignatureRequest(
    symbol=MARKET_SYMBOLS.ETH,  # market symbol
    price=0,  # price at which you want to place order
    quantity=0.01, # quantity
    side=ORDER_SIDE.BUY, 
    orderType=ORDER_TYPE.MARKET,
    leverage=user_leverage
)  

# create signed order
signed_order = client.create_signed_order(signature_request);

print("Placing a market order")
# place signed order on orderbook
resp = await client.post_signed_order(signed_order)

# returned order with PENDING state
print(resp)

Listening To Events Using Socket.io:

from firefly_exchange_client import FireflyClient, Networks, MARKET_SYMBOLS, ORDER_SIDE, ORDER_TYPE, OrderSignatureRequest

def callback(event):
    print("Event data:", event)

# initialize
client = FireflyClient(....) 
client.init(True)

# make connection with firefly exchange
await client.socket.open()

# subscribe to local user events
await client.socket.subscribe_user_update_by_token()

# listen to user order updates and trigger callback
await client.socket.listen(SOCKET_EVENTS.ORDER_UPDATE.value, callback)

#
# place some orders to exchange, that will trigger callback
# resp = client.post_signed_order(signed_order)
#

time.sleep(10)

# unsubscribe from user events
await client.socket.unsubscribe_user_update_by_token()

# close socket connection
await client.socket.close()

Look at the example directory to see more examples on how to use this library.

Listening To Events Using Web Sockets:

from firefly_exchange_client import FireflyClient, Networks, MARKET_SYMBOLS, ORDER_SIDE, ORDER_TYPE, SOCKET_EVENTS, OrderSignatureRequest
import time
def callback(event):
    print("Event data:", event)

# initialize
client = FireflyClient(....) 
client.init()

# make connection with firefly exchange
client.webSocketClient.initialize_socket(on_open=on_open)


def on_open(ws):
  # subscribe to local user events
  client.webSocketClient.subscribe_user_update_by_token()
  
  # listen to user order updates and trigger callback
  client.webSocketClient.listen(SOCKET_EVENTS.ORDER_UPDATE.value, callback)
  #
  # place some orders to exchange, that will trigger callback
  # resp = client.post_signed_order(signed_order)
  #
  time.sleep(10)

  # unsubscribe from user events
  client.webSocketClient.unsubscribe_user_update_by_token()

  # close socket connection
  client.webSocketClient.stop()

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

firefly_exchange_client-0.1.1.tar.gz (30.5 kB view details)

Uploaded Source

Built Distribution

firefly_exchange_client-0.1.1-py3-none-any.whl (33.4 kB view details)

Uploaded Python 3

File details

Details for the file firefly_exchange_client-0.1.1.tar.gz.

File metadata

File hashes

Hashes for firefly_exchange_client-0.1.1.tar.gz
Algorithm Hash digest
SHA256 8b7c0bf1ef41b2acf7ee5ce96ce8daca37b1cb21b83c17dc00cb647c3d085909
MD5 bb005a2ae301f4891524dc9756b4618a
BLAKE2b-256 4b81441179c2d5042414f088495d98f89d97b9635d3f87a4113937fd32eed06b

See more details on using hashes here.

File details

Details for the file firefly_exchange_client-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for firefly_exchange_client-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 99b80e8ddcdc87c7127622e919bc17ef89b3bd5ac95519fffd508aa41829c199
MD5 e8ded07754c415a4f60c5452fba49467
BLAKE2b-256 b60f31e3421b0cc7916d982d1e00279eb4ed56306a0f0480921a4394d032278a

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