Skip to main content

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 constants import Networks

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

from firefly_exchange_client import FireflyClient
from constants import Networks
from pprint import pprint
​import asyncio

# initialize client
client = FireflyClient(
      True, # agree to terms and conditions
      Networks["TESTNET_ARBITRUM"], # network to connect with e.g. TESTNET_ARBITRUM | MAINNET_ARBITRUM
      "0x.....", # PK for the account
      True, # on boards user on firefly. Must be set to true for first time use
      )
​
print('Account Address:', client.get_public_address());
​
# # gets user account data on-chain
# if running in async method
data = await client.get_user_account_data() 
# if running in a sync method
# data = asyncio.run(client.get_user_account_data())
​
pprint(data)

​ Placing Orders:

from firefly_exchange_client import FireflyClient
from constants import Networks
from enumerations import MARKET_SYMBOLS, ORDER_SIDE, ORDER_TYPE
from interfaces import OrderSignatureRequest
​import asyncio

# initialize
client = FireflyClient(....) 
​
# 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
from constants import Networks
from enumerations import MARKET_SYMBOLS, ORDER_SIDE, ORDER_TYPE
from interfaces import OrderSignatureRequest
​
def callback(event):
    print("Event data:", event)
​
# initialize
client = FireflyClient(....) 
​
# 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
from constants import Networks
from enumerations import MARKET_SYMBOLS, ORDER_SIDE, ORDER_TYPE, SOCKET_EVENTS
from interfaces import OrderSignatureRequest
import time
def callback(event):
    print("Event data:", event)

# initialize
client = FireflyClient(....) 

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

Metadata

Release files for firefly-exchange-client 0.0.20

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for firefly-exchange-client 0.0.20
File Size Uploaded
firefly_exchange_client-0.0.20.tar.gz 30.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for firefly-exchange-client 0.0.20
File Interpreter ABI Platform
firefly_exchange_client-0.0.20-py3-none-any.whl Python 3 none any Details

Total release size: 62.8 kB

Release files / firefly_exchange_client-0.0.20.tar.gz

Download URL firefly_exchange_client-0.0.20.tar.gz
Size 30.3 kB
Tags Source
SHA-256 checksum
How to use checksums
d1679ff16794a79ce8057c134a46f14cbc2086c7e60d36b1c356913be97aba8e
BLAKE2b-256 checksum
How to use checksums
e551dc9fba13cabd9a2b9ae17533b80143fae8529af31a52fd46c12fcc18966a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.11.2

Release files / firefly_exchange_client-0.0.20-py3-none-any.whl

Download URL firefly_exchange_client-0.0.20-py3-none-any.whl
Size 32.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
adfe83b5526d45a8553fb9e77fb0b060c4b1c4a8b1920644c8390c89b79376a3
BLAKE2b-256 checksum
How to use checksums
b542811fcffa24b32899d80224d0ca58973b7c97d33571e09a3e6e3d8aba8150
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.11.2

Release history Release notifications | RSS feed

0.10.9

2 release files

0.10.8

2 release files

0.10.6

2 release files

0.10.5

2 release files

0.10.4

2 release files

0.10.3

2 release files

0.10.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

This release

0.0.20 This release

2 release files

0.0.19

2 release files

0.0.16

2 release files

0.0.15

2 release files

0.0.14

2 release files

0.0.13

2 release files

0.0.11

2 release files

0.0.10

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page