Bluefin Python Client Library
Python Client for the Bluefin Exchange API and SUI Contracts.
Install
The package can be installed from PyPi using pip:
pip install bluefin_v2_client
Alternatively, you could run:
pip install .
The package currently supports python >=3.8
. Find complete documentation on the library at https://bluefin-exchange.readme.io/v2.0/reference/introduction.
Getting Started
When initializing the client, users must accept terms and conditions and define network object containing the following values:
{
"apiGateway": "https://dapi.api.sui-prod.bluefin.io",
"socketURL": "wss://dapi.api.sui-prod.bluefin.io",
"dmsURL": "https://api.sui-prod.bluefin.io/dead-man-switch",
"webSocketURL": "wss://notifications.api.sui-prod.bluefin.io",
"onboardingUrl": "https://trade-sui.bluefin.exchange"
}
Users can import predefined networks from constants:
from bluefin_v2_client import Networks
For testing purposes use Networks["SUI_STAGING"]
and for production use Networks["SUI_PROD"]
.
Initialization example
from config import TEST_ACCT_KEY, TEST_NETWORK
from bluefin_v2_client import BluefinClient, Networks
from pprint import pprint
import asyncio
async def main():
client = BluefinClient(
True,
Networks[TEST_NETWORK],
TEST_ACCT_KEY,
)
await client.init(True)
print('Account address:', client.get_public_address())
data = await client.get_user_account_data()
await client.apis.close_session()
pprint(data)
if __name__ == "__main__":
loop = asyncio.new_event_loop()
loop.run_until_complete(main())
loop.close()
Read-only Initialization:
Bluefin-client can also be initialized in read-only
mode, below is the example:
from config import TEST_ACCT_KEY, TEST_NETWORK
from bluefin_v2_client import BluefinClient, Networks
from pprint import pprint
import asyncio
async def main():
client = BluefinClient(
True,
Networks[TEST_NETWORK],
)
await client.init(True,"54b0bfafc9a48728f76e52848a716e96d490263392e3959c2d44f05dea960761")
await client.apis.close_session()
await client.dmsApi.close_session()
pprint(data)
if __name__ == "__main__":
loop = asyncio.new_event_loop()
loop.run_until_complete(main())
loop.close()
Here is the list of APIs that can be accessed in read-only
mode.
Placing Orders:
from config import TEST_ACCT_KEY, TEST_NETWORK
from bluefin_v2_client import BluefinClient, Networks, MARKET_SYMBOLS, ORDER_SIDE, ORDER_TYPE, OrderSignatureRequest
import asyncio
async def main():
client = BluefinClient(
True,
Networks[TEST_NETWORK],
TEST_ACCT_KEY,
)
await client.init(True)
user_leverage = await client.get_user_leverage(MARKET_SYMBOLS.ETH)
signature_request = OrderSignatureRequest(
symbol=MARKET_SYMBOLS.ETH,
price=1900,
quantity=0.01,
side=ORDER_SIDE.SELL,
orderType=ORDER_TYPE.LIMIT,
leverage=user_leverage
)
signed_order = client.create_signed_order(signature_request)
print("Placing a limit order")
resp = await client.post_signed_order(signed_order)
print(resp)
await client.apis.close_session()
if __name__ == "__main__":
loop = asyncio.new_event_loop()
loop.run_until_complete(main())
loop.close()
Listening To Events Using Socket.io:
from config import TEST_ACCT_KEY, TEST_NETWORK
from bluefin_v2_client import BluefinClient, Networks, SOCKET_EVENTS
import asyncio
import time
def callback(event):
print("Event data:", event)
async def main():
client = BluefinClient(
True,
Networks[TEST_NETWORK],
TEST_ACCT_KEY,
)
await client.init(True)
await client.socket.open()
await client.socket.subscribe_user_update_by_token()
await client.socket.listen(SOCKET_EVENTS.EXCHANGE_HEALTH.value, callback)
time.sleep(10)
await client.socket.unsubscribe_user_update_by_token()
await client.socket.close()
if __name__ == "__main__":
loop = asyncio.new_event_loop()
loop.run_until_complete(main())
loop.close()
Look at the example directory to see more examples on how to use this library.
Listening To Events Using Web Sockets:
from config import TEST_ACCT_KEY, TEST_NETWORK
from bluefin_v2_client import BluefinClient, Networks, SOCKET_EVENTS, MARKET_SYMBOLS
import time
import asyncio
def callback(event):
print("Event data:", event)
async def main():
client = BluefinClient(
True,
Networks[TEST_NETWORK],
TEST_ACCT_KEY,
)
await client.init(True)
def on_open(ws):
resp = client.webSocketClient.subscribe_global_updates_by_symbol(symbol=MARKET_SYMBOLS.ETH)
if resp:
print("Subscribed to global updates")
resp = client.webSocketClient.subscribe_user_update_by_token()
if resp:
print("Subscribed to user updates")
client.webSocketClient.initialize_socket(on_open=on_open)
client.webSocketClient.listen(SOCKET_EVENTS.EXCHANGE_HEALTH.value, callback)
time.sleep(60)
client.webSocketClient.unsubscribe_global_updates_by_symbol(symbol=MARKET_SYMBOLS.ETH)
client.webSocketClient.stop()
if __name__ == "__main__":
loop = asyncio.new_event_loop()
loop.run_until_complete(main())
loop.close()