Руководство по Python WebSocket для API Backpack Exchange

Это руководство демонстрирует, как использовать Backpack Exchange WebSocket API с Python. WebSockets обеспечивают потоки данных в реальном времени для рыночных данных и обновлений аккаунта.

Предварительные требования

Получите ваши API ключи, если вы собираетесь использовать приватные потоки: https://backpack.exchange/portfolio/settings/api-keysarrow-up-right

Установите необходимые библиотеки Python:

  • websockets - для WebSocket соединений

  • cryptography - для X-Signature (только приватные потоки)

pip install websockets cryptography

Установите dotenv-python для безопасного управления вашими ключами с помощью переменных окружения, если вы собираетесь использовать приватные потоки

pip install python-dotenv

Создайте файл .env и храните ваши ключи так:

PUBLIC_KEY=zDIJj9qneWIY0IYZ5aXoHcNMCm+XDhVcTssiT0HyY0A=
SECRET_KEY=4odxgSUxFrC/zsKWZF4OQwYAgnNu9hnWH3NxWfLAPz4=

Создайте файл .gitignore и добавьте .env, чтобы исключить его из контроля версий.

.env

Импортируйте необходимые библиотеки:

import json
import asyncio
import websockets
import base64
from time import time
import os
from cryptography.hazmat.primitives.asymmetric import ed25519
from dotenv import load_dotenv, find_dotenv

Основы WebSocket API

Backpack Exchange WebSocket API доступен по адресу wss://ws.backpack.exchange.

Потоки WebSocket именуются в формате: <type>.<symbol>

Например:

  • depth.SOL_USDC - Книга ордеров для SOL/USDC

  • trade.SOL_USDC - Сделки для SOL/USDC

Почему использовать Async с WebSockets

WebSockets предназначены для долгоживущих соединений, которые получают данные в реальном времени. Использование асинхронного программирования с WebSockets предлагает несколько преимуществ:

  1. Неблокирующий I/O: Async позволяет вашему приложению обрабатывать множество соединений без блокировки основного потока.

  2. Эффективность ресурсов: Async использует меньше ресурсов, чем создание множества потоков для параллельных соединений.

  3. Лучшая производительность: Async может обрабатывать много соединений с меньшими накладными расходами, чем синхронные подходы.

  4. Обработка в реальном времени: Async идеален для потоков данных в реальном времени, где вам нужно непрерывно получать и обрабатывать данные.

Синхронные подходы имеют несколько недостатков:

  1. Сложное управление потоками: Требует ручного управления потоками

  2. Ресурсоемкость: Каждое соединение нуждается в своем собственном потоке

  3. Сложная обработка ошибок: Распространение ошибок через потоки является сложным

  4. Проблемы масштабирования: Плохо масштабируется при многих соединениях

Асинхронный подход (как показано в наших примерах) намного чище, эффективнее и проще в обслуживании.

Публичные потоки

Публичные потоки не требуют аутентификации. Вы можете подписаться на них напрямую.

Пример: Подписка на публичный поток

Пример: Подписка на несколько публичных потоков

Приватные потоки

Приватные потоки требуют аутентификации с вашими API ключами. Эти потоки имеют префикс account. и предоставляют обновления о вашем аккаунте.

Аутентификация для приватных потоков

Для аутентификации приватных потоков вам нужно:

  1. Создать строку подписи в форме: instruction=subscribe&timestamp=1614550000000&window=5000

  2. Подписать её вашим приватным ключом

  3. Включить данные подписи в ваше сообщение подписки как массив: "signature": ["<verifying key>", "<signature>", "<timestamp>", "<window>"]

Приватные потоки имеют префикс account. и требуют отправки данных подписи в параметрах подписки. Ключ проверки и подпись должны быть закодированы в base64.

Пример: Подписка на приватный поток

WebSocket Ping/Pong

Соединения WebSocket требуют механизма ping-pong для поддержания соединения в активном состоянии. Хорошая новость в том, что библиотека Python websockets обрабатывает это автоматически

Источники

Для получения дополнительной информации посетите официальную документацию: https://docs.backpack.exchange/#tag/Streamsarrow-up-right