<div align="center">
<img height="100x" src="https://bluefin.io/images/bluefin-logo.svg" />
<h1 style="margin-top:20px;">Bluefin Python Client Library</h1>
</div>
Python Client for the Bluefin Exchange API and SUI Contracts.
### Install
The package can be installed from [PyPi](https://pypi.org/project/bluefin-v2-client-python/) using pip:
```
pip install bluefin_v2_client_sui
```
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](https://bluefin.io/terms-of-use) and define network object containing the following values:
```json
{
"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](https://github.com/fireflyprotocol/bluefin-v2-client-python/blob/main/src/bluefin-v2-client-python/constants.py):
```python
from bluefin_v2_client import Networks
```
For testing purposes use `Networks["SUI_STAGING"]` and for production use `Networks["SUI_PROD"]`.
## Initialization example
```python
from config import TEST_ACCT_KEY, TEST_NETWORK
from bluefin_v2_client import BluefinClient, Networks
from pprint import pprint
import asyncio
async def main():
# initialize client
client = BluefinClient(
True, # agree to terms and conditions
Networks[TEST_NETWORK], # network to connect with
TEST_ACCT_KEY, # seed phrase of the wallet
)
# on boards user on bluefin. Must be set to true for firs time use
await client.init(True)
print('Account address:', client.get_public_address())
# gets user account on-chain data
data = await client.get_user_account_data()
# close aio http connection
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:
```python
from config import TEST_ACCT_KEY, TEST_NETWORK
from bluefin_v2_client import BluefinClient, Networks
from pprint import pprint
import asyncio
async def main():
# initialize client without providing private_key
client = BluefinClient(
True, # agree to terms and conditions
Networks[TEST_NETWORK], # network to connect with
)
# Initializing client for the private key provided. The second argument api_token is optional
await client.init(True,"54b0bfafc9a48728f76e52848a716e96d490263392e3959c2d44f05dea960761")
# close aio http connection
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](https://bluefin-exchange.readme.io/v2.0/reference/read-only-token-permissions) of APIs that can be accessed in `read-only` mode.
**Placing Orders:**
```python
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():
# initialize client
client = BluefinClient(
True, # agree to terms and conditions
Networks[TEST_NETWORK], # network to connect with
TEST_ACCT_KEY, # seed phrase of the wallet
)
await client.init(True)
user_leverage = await client.get_user_leverage(MARKET_SYMBOLS.ETH)
# creates a LIMIT order to be signed
signature_request = OrderSignatureRequest(
symbol=MARKET_SYMBOLS.ETH, # market symbol
price=1900, # price at which you want to place order
quantity=0.01, # quantity
side=ORDER_SIDE.SELL,
orderType=ORDER_TYPE.LIMIT,
leverage=user_leverage
)
# create signed order
signed_order = client.create_signed_order(signature_request)
print("Placing a limit order")
# place signed order on orderbook
resp = await client.post_signed_order(signed_order)
# returned order with PENDING state
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:**
```python
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():
# initialize
client = BluefinClient(
True, # agree to terms and conditions
Networks[TEST_NETWORK], # network to connect with
TEST_ACCT_KEY, # seed phrase of the wallet
)
await client.init(True)
# make connection with bluefin exchange
await client.socket.open()
# subscribe to local user events
await client.socket.subscribe_user_update_by_token()
# listen to exchange health updates and trigger callback
await client.socket.listen(SOCKET_EVENTS.EXCHANGE_HEALTH.value, callback)
time.sleep(10)
# unsubscribe from user events
await client.socket.unsubscribe_user_update_by_token()
# close socket connection
await client.socket.close()
if __name__ == "__main__":
loop = asyncio.new_event_loop()
loop.run_until_complete(main())
loop.close()
```
Look at the [example](https://github.com/fireflyprotocol/bluefin-v2-client-python/tree/main/examples) directory to see more examples on how to use this library.
**Listening To Events Using Web Sockets:**
```python
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():
# initialize
client = BluefinClient(
True, # agree to terms and conditions
Networks[TEST_NETWORK], # network to connect with
TEST_ACCT_KEY, # seed phrase of the wallet
)
await client.init(True)
def on_open(ws):
# subscribe to global events
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")
# make connection with bluefin exchange
client.webSocketClient.initialize_socket(on_open=on_open)
# listen to user order updates and trigger callback
client.webSocketClient.listen(SOCKET_EVENTS.EXCHANGE_HEALTH.value, callback)
time.sleep(60)
# unsubscribe from global events
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()
```
Raw data
{
"_id": null,
"home_page": null,
"name": "bluefin-v2-client-sui",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "bluefin, exchange, decentralized, perpetuals, blockchain",
"author": null,
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/42/fd/d3e8a748ed6375b3cd5ac1fb805ec9162eea19453164e482086bce1cf007/bluefin_v2_client_sui-1.0.3.tar.gz",
"platform": null,
"description": "<div align=\"center\">\n <img height=\"100x\" src=\"https://bluefin.io/images/bluefin-logo.svg\" />\n\n <h1 style=\"margin-top:20px;\">Bluefin Python Client Library</h1>\n\n</div>\n\nPython Client for the Bluefin Exchange API and SUI Contracts.\n\u200b\n\n### Install\n\nThe package can be installed from [PyPi](https://pypi.org/project/bluefin-v2-client-python/) using pip:\n\n```\npip install bluefin_v2_client_sui\n```\n\nAlternatively, you could run:\n\n```\npip install .\n```\n\nThe package currently supports python `>=3.8`. Find complete documentation on the library at https://bluefin-exchange.readme.io/v2.0/reference/introduction.\n\n### Getting Started\n\nWhen initializing the client, users must accept [terms and conditions](https://bluefin.io/terms-of-use) and define network object containing the following values:\n\n```json\n{\n \"apiGateway\": \"https://dapi.api.sui-prod.bluefin.io\",\n \"socketURL\": \"wss://dapi.api.sui-prod.bluefin.io\",\n \"dmsURL\": \"https://api.sui-prod.bluefin.io/dead-man-switch\",\n \"webSocketURL\": \"wss://notifications.api.sui-prod.bluefin.io\",\n \"onboardingUrl\": \"https://trade-sui.bluefin.exchange\"\n}\n```\n\nUsers can import predefined networks from [constants](https://github.com/fireflyprotocol/bluefin-v2-client-python/blob/main/src/bluefin-v2-client-python/constants.py):\n\n```python\nfrom bluefin_v2_client import Networks\n```\n\nFor testing purposes use `Networks[\"SUI_STAGING\"]` and for production use `Networks[\"SUI_PROD\"]`.\n\n## Initialization example\u200b\n\n```python\nfrom config import TEST_ACCT_KEY, TEST_NETWORK\nfrom bluefin_v2_client import BluefinClient, Networks\nfrom pprint import pprint\nimport asyncio\n\nasync def main():\n # initialize client\n client = BluefinClient(\n True, # agree to terms and conditions\n Networks[TEST_NETWORK], # network to connect with\n TEST_ACCT_KEY, # seed phrase of the wallet\n )\n\n # on boards user on bluefin. Must be set to true for firs time use\n await client.init(True)\n\n print('Account address:', client.get_public_address())\n\n # gets user account on-chain data\n data = await client.get_user_account_data()\n\n # close aio http connection\n await client.apis.close_session()\n\n pprint(data)\n\nif __name__ == \"__main__\":\n loop = asyncio.new_event_loop()\n loop.run_until_complete(main())\n loop.close()\n```\n\n**Read-only Initialization:**\nBluefin-client can also be initialized in `read-only` mode, below is the example:\n\n```python\nfrom config import TEST_ACCT_KEY, TEST_NETWORK\nfrom bluefin_v2_client import BluefinClient, Networks\nfrom pprint import pprint\nimport asyncio\n\nasync def main():\n # initialize client without providing private_key\n client = BluefinClient(\n True, # agree to terms and conditions\n Networks[TEST_NETWORK], # network to connect with\n )\n\n # Initializing client for the private key provided. The second argument api_token is optional\n await client.init(True,\"54b0bfafc9a48728f76e52848a716e96d490263392e3959c2d44f05dea960761\")\n\n # close aio http connection\n await client.apis.close_session()\n await client.dmsApi.close_session()\n\n pprint(data)\n\nif __name__ == \"__main__\":\n loop = asyncio.new_event_loop()\n loop.run_until_complete(main())\n loop.close()\n```\n\n\u200bHere is the [list](https://bluefin-exchange.readme.io/v2.0/reference/read-only-token-permissions) of APIs that can be accessed in `read-only` mode.\n\n**Placing Orders:**\n\n```python\nfrom config import TEST_ACCT_KEY, TEST_NETWORK\nfrom bluefin_v2_client import BluefinClient, Networks, MARKET_SYMBOLS, ORDER_SIDE, ORDER_TYPE, OrderSignatureRequest\nimport asyncio\n\nasync def main():\n # initialize client\n client = BluefinClient(\n True, # agree to terms and conditions\n Networks[TEST_NETWORK], # network to connect with\n TEST_ACCT_KEY, # seed phrase of the wallet\n )\n\n await client.init(True)\n\n user_leverage = await client.get_user_leverage(MARKET_SYMBOLS.ETH)\n\n # creates a LIMIT order to be signed\n signature_request = OrderSignatureRequest(\n symbol=MARKET_SYMBOLS.ETH, # market symbol\n price=1900, # price at which you want to place order\n quantity=0.01, # quantity\n side=ORDER_SIDE.SELL,\n orderType=ORDER_TYPE.LIMIT,\n leverage=user_leverage\n )\n\n # create signed order\n signed_order = client.create_signed_order(signature_request)\n\n print(\"Placing a limit order\")\n # place signed order on orderbook\n resp = await client.post_signed_order(signed_order)\n\n # returned order with PENDING state\n print(resp)\n\n await client.apis.close_session()\n\n\nif __name__ == \"__main__\":\n loop = asyncio.new_event_loop()\n loop.run_until_complete(main())\n loop.close()\n```\n\n\u200b\n**Listening To Events Using Socket.io:**\n\n```python\nfrom config import TEST_ACCT_KEY, TEST_NETWORK\nfrom bluefin_v2_client import BluefinClient, Networks, SOCKET_EVENTS\nimport asyncio\nimport time\n\ndef callback(event):\n print(\"Event data:\", event)\n\nasync def main():\n # initialize\n client = BluefinClient(\n True, # agree to terms and conditions\n Networks[TEST_NETWORK], # network to connect with\n TEST_ACCT_KEY, # seed phrase of the wallet\n )\n await client.init(True)\n # make connection with bluefin exchange\n await client.socket.open()\n\n # subscribe to local user events\n await client.socket.subscribe_user_update_by_token()\n\n # listen to exchange health updates and trigger callback\n await client.socket.listen(SOCKET_EVENTS.EXCHANGE_HEALTH.value, callback)\n time.sleep(10)\n # unsubscribe from user events\n await client.socket.unsubscribe_user_update_by_token()\n # close socket connection\n await client.socket.close()\n\nif __name__ == \"__main__\":\n loop = asyncio.new_event_loop()\n loop.run_until_complete(main())\n loop.close()\u200b\n```\n\nLook at the [example](https://github.com/fireflyprotocol/bluefin-v2-client-python/tree/main/examples) directory to see more examples on how to use this library.\n\n**Listening To Events Using Web Sockets:**\n\n```python\nfrom config import TEST_ACCT_KEY, TEST_NETWORK\nfrom bluefin_v2_client import BluefinClient, Networks, SOCKET_EVENTS, MARKET_SYMBOLS\nimport time\nimport asyncio\n\ndef callback(event):\n print(\"Event data:\", event)\n\nasync def main():\n # initialize\n client = BluefinClient(\n True, # agree to terms and conditions\n Networks[TEST_NETWORK], # network to connect with\n TEST_ACCT_KEY, # seed phrase of the wallet\n )\n\n await client.init(True)\n\n def on_open(ws):\n # subscribe to global events\n resp = client.webSocketClient.subscribe_global_updates_by_symbol(symbol=MARKET_SYMBOLS.ETH)\n if resp:\n print(\"Subscribed to global updates\")\n resp = client.webSocketClient.subscribe_user_update_by_token()\n if resp:\n print(\"Subscribed to user updates\")\n\n # make connection with bluefin exchange\n client.webSocketClient.initialize_socket(on_open=on_open)\n # listen to user order updates and trigger callback\n client.webSocketClient.listen(SOCKET_EVENTS.EXCHANGE_HEALTH.value, callback)\n\n time.sleep(60)\n\n # unsubscribe from global events\n client.webSocketClient.unsubscribe_global_updates_by_symbol(symbol=MARKET_SYMBOLS.ETH)\n client.webSocketClient.stop()\n\n\nif __name__ == \"__main__\":\n loop = asyncio.new_event_loop()\n loop.run_until_complete(main())\n loop.close()\n```\n",
"bugtrack_url": null,
"license": null,
"summary": "Library to interact with Bluefin exchange protocol including its off-chain api-gateway and on-chain contracts",
"version": "1.0.3",
"project_urls": {
"Bug Reports": "https://github.com/fireflyprotocol/bluefin-v2-client-python/issues",
"Homepage": "https://github.com/fireflyprotocol/bluefin-v2-client-python",
"Source": "https://github.com/fireflyprotocol/bluefin-v2-client-python"
},
"split_keywords": [
"bluefin",
" exchange",
" decentralized",
" perpetuals",
" blockchain"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "4012758bb8bcdca473566266a0b376ae33839577e4e3661b40542db57087b271",
"md5": "eef16d0b55d1e9a916c4985a66927b10",
"sha256": "d4cb6524c210bc573761d78240e5089681fe77ec985913905e6da7c66f2a3eaf"
},
"downloads": -1,
"filename": "bluefin_v2_client_sui-1.0.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "eef16d0b55d1e9a916c4985a66927b10",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 33209,
"upload_time": "2024-09-06T11:53:11",
"upload_time_iso_8601": "2024-09-06T11:53:11.957571Z",
"url": "https://files.pythonhosted.org/packages/40/12/758bb8bcdca473566266a0b376ae33839577e4e3661b40542db57087b271/bluefin_v2_client_sui-1.0.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "42fdd3e8a748ed6375b3cd5ac1fb805ec9162eea19453164e482086bce1cf007",
"md5": "eb774c08445c0d4bf7568df19bdb1522",
"sha256": "ab35588cb6a4e3c7aebc0a43a115224e39fed6a712ef427e551802096cd3b76f"
},
"downloads": -1,
"filename": "bluefin_v2_client_sui-1.0.3.tar.gz",
"has_sig": false,
"md5_digest": "eb774c08445c0d4bf7568df19bdb1522",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 30105,
"upload_time": "2024-09-06T11:53:13",
"upload_time_iso_8601": "2024-09-06T11:53:13.531982Z",
"url": "https://files.pythonhosted.org/packages/42/fd/d3e8a748ed6375b3cd5ac1fb805ec9162eea19453164e482086bce1cf007/bluefin_v2_client_sui-1.0.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-09-06 11:53:13",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "fireflyprotocol",
"github_project": "bluefin-v2-client-python",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "bluefin-v2-client-sui"
}