Package: bluefin-v2-client
Bluefin Python Client LibraryPython Client for the Bluefin Exchange API and SUI Contracts.
​InstallThe package can be installed fromPyPiusing pip:pip install bluefin_v2_clientAlternatively, you could run:pip install .The package currently supports python>=3.8. Find complete documentation on the library athttps://bluefin-exchange.readme.io/v2.0/reference/introduction.Getting StartedWhen initializing the client, users must acceptterms and conditionsand 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 fromconstants:frombluefin_v2_clientimportNetworksFor testing purposes useNetworks["SUI_STAGING"]and for production useNetworks["SUI_PROD"].Initialization example​fromconfigimportTEST_ACCT_KEY,TEST_NETWORKfrombluefin_v2_clientimportBluefinClient,Networksfrompprintimportpprintimportasyncioasyncdefmain():# initialize clientclient=BluefinClient(True,# agree to terms and conditionsNetworks[TEST_NETWORK],# network to connect withTEST_ACCT_KEY,# seed phrase of the wallet)# on boards user on bluefin. Must be set to true for firs time useawaitclient.init(True)print('Account address:',client.get_public_address())# gets user account on-chain datadata=awaitclient.get_user_account_data()# close aio http connectionawaitclient.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 inread-onlymode, below is the example:fromconfigimportTEST_ACCT_KEY,TEST_NETWORKfrombluefin_v2_clientimportBluefinClient,Networksfrompprintimportpprintimportasyncioasyncdefmain():# initialize client without providing private_keyclient=BluefinClient(True,# agree to terms and conditionsNetworks[TEST_NETWORK],# network to connect with)# Initializing client for the private key provided. The second argument api_token is optionalawaitclient.init(True,"54b0bfafc9a48728f76e52848a716e96d490263392e3959c2d44f05dea960761")# close aio http connectionawaitclient.apis.close_session()awaitclient.dmsApi.close_session()pprint(data)if__name__=="__main__":loop=asyncio.new_event_loop()loop.run_until_complete(main())loop.close()​Here is thelistof APIs that can be accessed inread-onlymode.Placing Orders:fromconfigimportTEST_ACCT_KEY,TEST_NETWORKfrombluefin_v2_clientimportBluefinClient,Networks,MARKET_SYMBOLS,ORDER_SIDE,ORDER_TYPE,OrderSignatureRequestimportasyncioasyncdefmain():# initialize clientclient=BluefinClient(True,# agree to terms and conditionsNetworks[TEST_NETWORK],# network to connect withTEST_ACCT_KEY,# seed phrase of the wallet)awaitclient.init(True)user_leverage=awaitclient.get_user_leverage(MARKET_SYMBOLS.ETH)# creates a LIMIT order to be signedsignature_request=OrderSignatureRequest(symbol=MARKET_SYMBOLS.ETH,# market symbolprice=1900,# price at which you want to place orderquantity=0.01,# quantityside=ORDER_SIDE.SELL,orderType=ORDER_TYPE.LIMIT,leverage=user_leverage)# create signed ordersigned_order=client.create_signed_order(signature_request)print("Placing a limit order")# place signed order on orderbookresp=awaitclient.post_signed_order(signed_order)# returned order with PENDING stateprint(resp)awaitclient.apis.close_session()if__name__=="__main__":loop=asyncio.new_event_loop()loop.run_until_complete(main())loop.close()​Listening To Events Using Socket.io:fromconfigimportTEST_ACCT_KEY,TEST_NETWORKfrombluefin_v2_clientimportBluefinClient,Networks,SOCKET_EVENTSimportasyncioimporttimedefcallback(event):print("Event data:",event)asyncdefmain():# initializeclient=BluefinClient(True,# agree to terms and conditionsNetworks[TEST_NETWORK],# network to connect withTEST_ACCT_KEY,# seed phrase of the wallet)awaitclient.init(True)# make connection with bluefin exchangeawaitclient.socket.open()# subscribe to local user eventsawaitclient.socket.subscribe_user_update_by_token()# listen to exchange health updates and trigger callbackawaitclient.socket.listen(SOCKET_EVENTS.EXCHANGE_HEALTH.value,callback)time.sleep(10)# unsubscribe from user eventsawaitclient.socket.unsubscribe_user_update_by_token()# close socket connectionawaitclient.socket.close()if__name__=="__main__":loop=asyncio.new_event_loop()loop.run_until_complete(main())loop.close()​Look at theexampledirectory to see more examples on how to use this library.Listening To Events Using Web Sockets:fromconfigimportTEST_ACCT_KEY,TEST_NETWORKfrombluefin_v2_clientimportBluefinClient,Networks,SOCKET_EVENTS,MARKET_SYMBOLSimporttimeimportasynciodefcallback(event):print("Event data:",event)asyncdefmain():# initializeclient=BluefinClient(True,# agree to terms and conditionsNetworks[TEST_NETWORK],# network to connect withTEST_ACCT_KEY,# seed phrase of the wallet)awaitclient.init(True)defon_open(ws):# subscribe to global eventsresp=client.webSocketClient.subscribe_global_updates_by_symbol(symbol=MARKET_SYMBOLS.ETH)ifresp:print("Subscribed to global updates")resp=client.webSocketClient.subscribe_user_update_by_token()ifresp:print("Subscribed to user updates")# make connection with bluefin exchangeclient.webSocketClient.initialize_socket(on_open=on_open)# listen to user order updates and trigger callbackclient.webSocketClient.listen(SOCKET_EVENTS.EXCHANGE_HEALTH.value,callback)time.sleep(60)# unsubscribe from global eventsclient.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()