Hướng dẫn sử dụng API Python của Backpack Exchange

Lấy API key nếu bạn muốn sử dụng các endpoint liên quan đến tài khoản: https://backpack.exchange/portfolio/settings/api-keys

Cài đặt các thư viện Python cần thiết:

  • cryptography – dùng để tạo X-Signature (chỉ áp dụng cho các endpoint tài khoản)

  • requests – để thực hiện các yêu cầu HTTP (hoặc aiohttp nếu bạn thích làm việc bất đồng bộ)

pip3 install cryptography requests 

Nếu bạn dự định sử dụng các endpoint tài khoản, nên cài thêm thư viện dotenv-python để quản lý khóa API an toàn bằng biến môi trường

pip3 install python-dotenv

Tạo file .env và lưu trữ các khóa API như sau

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

Tạo file .gitignore và thêm .env vào để loại trừ file này khỏi hệ thống quản lý phiên bản.

.env

Trong tất cả ví dụ, chúng ta sẽ sử dụng thư viện requests (đồng bộ). Hãy import nó trước:

import requests

Public endpoints

Đối với các endpoint công khai, bạn chỉ cần gửi một yêu cầu GET.

Không cần API key.

Ví dụ

# https://docs.backpack.exchange/#tag/Markets/operation/get_open_interest
BASE_URL: str = "https://api.backpack.exchange/"  # base api url for all endpoints
symbol: str = "SOL_USDC_PERP" # let's specify the symbol
result_url: str = f"{BASE_URL}api/v1/openInterest?symbol={symbol}"  # add your argument as a query string. For GET requests you need only query string
from json import JSONDecodeError

response = requests.get(url=result_url) # make a get request
print(f"response status code: {response}")
if response.status_code == 200:
    # make your code safe in case you receive unexpected data
    try:
        print(f"response json: {response.json()}") 
        
        open_interest: str = response.json()[0]["openInterest"]
        print(f"open interest: {open_interest}")
    except JSONDecodeError:
        print(f"response text if response isn't json: {response.text}")
else:
    ...
response status code: <Response [200]>
response json: [{'openInterest': '81420.17', 'symbol': 'SOL_USDC_PERP', 'timestamp': 1743731167028}]
open interest: 81420.17

Nếu bạn có nhiều hơn một tham số (argument), hãy nối chúng bằng ký hiệu &.

Các endpoint riêng tư

Đối với các endpoint riêng tư, chúng ta cần tạo các header đặc biệt và body yêu cầu (đối với các yêu cầu POST).

import base64 # import base64 as "The signature should then be base64 encoded"
from time import time # import time for timestamp 
import os  # import os – to access environment variables

from cryptography.hazmat.primitives.asymmetric import ed25519 # import ed25519 to create a private key that will sign the message
# from dotenv import load_dotenv, find_dotenv # to create env variables from your .env file
# use this in your code
# load_dotenv(find_dotenv())
# public_key: str = os.getenv("PUBLIC_KEY")
# secret_key: str = os.getenv("SECRET_KEY")

public_key: str = "zDIJj9qneWIY0IYZ5aXoHcNMCm+XDhVcTssiT0HyY0A="  # unsafe!
secret_key: str = "4odxgSUxFrC/zsKWZF4OQwYAgnNu9hnWH3NxWfLAPz4="  # unsafe!

private_key = ed25519.Ed25519PrivateKey.from_private_bytes(
            base64.b64decode(secret_key)
        )

Hãy lấy địa chỉ nạp tiền.

https://docs.backpack.exchange/#tag/Capital/operation/get_deposit_address

timestamp = int(time() * 1e3)  # Unix time in milliseconds
window: str = "5000" # Time window in milliseconds that the request is valid for. Increase if you have bad connection.

Bây giờ khi đã có X-Timestamp (dấu thời gian), X-Window (khoảng thời gian hợp lệ) và X-API-Key (khóa công khai). hãy tạo X-Signature.

instruction: str = "depositAddressQuery"
sign_str = f"instruction={instruction}"

# This endpoint requires the "blockchain" parameter
params: dict = {
    "blockchain": "Solana",
}
# Generic code to generate a valid query string from any parameters
sorted_params_list = []
for key, value in sorted(params.items()):
    if isinstance(value, bool):  # boolean variables should be lowercase in query strings
        value = str(value).lower()
    sorted_params_list.append(f"{key}={value}")
sorted_params = "&".join(sorted_params_list)


if sorted_params:
    sign_str += "&" + sorted_params
sign_str += f"&timestamp={timestamp}&window={window}" 

print(sign_str)
instruction=depositAddressQuery&blockchain=Solana&timestamp=1743731167786&window=5000

Bây giờ hãy tiến hành ký (sign) nó!

signature_bytes = private_key.sign(sign_str.encode())
encoded_signature = base64.b64encode(signature_bytes).decode()
print(f"signed query string: {encoded_signature}")
signed query string: lLc/zjqju853/hmCdb9dXtMhUijoetARooBn56hqbxPNXZTV9Gy18YcBjZ8+HuPDJHz6LmeB/366bJ5uTCZSAA==

Tạo các header:

headers = {
            "X-API-Key": public_key,
            "X-Signature": encoded_signature,
            "X-Timestamp": str(timestamp),
            "X-Window": window,
            "Content-Type": "application/json; charset=utf-8",
        }

Gửi yêu cầu

url = "https://api.backpack.exchange/wapi/v1/capital/deposit/address"
response = requests.get(url=url, headers=headers, params=params)
print(response.json())
{'address': '8PzpK8s8ezuSnXPjdPxR2FdZfzm5urkcUePrDL419PRC'}

Lưu ý:

Đối với các yêu cầu POST , hãy đính kèm nội dung JSON và sử dụng phương thức post() .

url_example = "https://api.backpack.exchange/wapi/v1/example"
response = requests.post(url=url, headers=headers, json=params)

SDK

SDK giúp quá trình phát triển trở nên dễ dàng hơn rất nhiều!

Ví dụ:

https://github.com/sndmndss/bpx-py

Last updated