bluefin-v2-client


Namebluefin-v2-client JSON
Version 4.2.12 PyPI version JSON
download
home_page
SummaryLibrary to interact with Bluefin exchange protocol including its off-chain api-gateway and on-chain contracts
upload_time2024-02-22 20:08:41
maintainer
docs_urlNone
author
requires_python>=3.8
license
keywords bluefin exchange decentralized perpetuals blockchain
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <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
```

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": "",
    "name": "bluefin-v2-client",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "",
    "keywords": "bluefin,exchange,decentralized,perpetuals,blockchain",
    "author": "",
    "author_email": "",
    "download_url": "https://files.pythonhosted.org/packages/04/54/237765a5a71325ee972dfad6a4a87858500ae9c5a5ea5d5c7b43cfc98947/bluefin_v2_client-4.2.12.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\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": "",
    "summary": "Library to interact with Bluefin exchange protocol including its off-chain api-gateway and on-chain contracts",
    "version": "4.2.12",
    "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": "12932bb0cc902b8a20e8841eaf31e432eb80d2f7807bca0cd27f26df929a628f",
                "md5": "48442773f189a5fb9890c1cab594bd19",
                "sha256": "35457ba8e36a65865062d89ce7a56506ea09f4631c96217a76ede341c284553b"
            },
            "downloads": -1,
            "filename": "bluefin_v2_client-4.2.12-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "48442773f189a5fb9890c1cab594bd19",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 33044,
            "upload_time": "2024-02-22T20:08:34",
            "upload_time_iso_8601": "2024-02-22T20:08:34.951891Z",
            "url": "https://files.pythonhosted.org/packages/12/93/2bb0cc902b8a20e8841eaf31e432eb80d2f7807bca0cd27f26df929a628f/bluefin_v2_client-4.2.12-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0454237765a5a71325ee972dfad6a4a87858500ae9c5a5ea5d5c7b43cfc98947",
                "md5": "bbe7b443509965570068f6dd7822e80c",
                "sha256": "1fb19aab05fdc889eea9101cb40c66322bfc912d762941cc729be2193b55165b"
            },
            "downloads": -1,
            "filename": "bluefin_v2_client-4.2.12.tar.gz",
            "has_sig": false,
            "md5_digest": "bbe7b443509965570068f6dd7822e80c",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 29965,
            "upload_time": "2024-02-22T20:08:41",
            "upload_time_iso_8601": "2024-02-22T20:08:41.835253Z",
            "url": "https://files.pythonhosted.org/packages/04/54/237765a5a71325ee972dfad6a4a87858500ae9c5a5ea5d5c7b43cfc98947/bluefin_v2_client-4.2.12.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-02-22 20:08:41",
    "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"
}
        
Elapsed time: 0.23204s