Python SDK for interacting with Decibel, a fully on-chain trading engine built on Aptos.
Project description
decibel-python-sdk
Installation
pip install decibel-python-sdk
Or with uv:
uv add decibel-python-sdk
Configuration
Set the following environment variables:
# Required for write operations
export PRIVATE_KEY="your_private_key_hex"
# Optional: for better rate limits
export APTOS_NODE_API_KEY="your_aptos_node_api_key"
New to Decibel? Follow the Getting Started Guide to create your API Wallet and get your API key from Geomi.
Quick Start
Reading Market Data
import asyncio
from decibel import NETNA_CONFIG
from decibel.read import DecibelReadDex
async def main():
read = DecibelReadDex(NETNA_CONFIG)
# Get all markets
markets = await read.markets.get_all()
for market in markets:
print(f"{market.market_name}: {market.max_leverage}x leverage")
# Get market prices
prices = await read.market_prices.get_all()
for price in prices:
print(f"{price.market}: ${price.mark_px}")
asyncio.run(main())
Placing Orders
import asyncio
import os
from aptos_sdk.account import Account
from aptos_sdk.ed25519 import PrivateKey
from decibel import (
NETNA_CONFIG,
BaseSDKOptions,
DecibelWriteDex,
GasPriceManager,
PlaceOrderSuccess,
TimeInForce,
amount_to_chain_units,
)
from decibel.read import DecibelReadDex
async def main():
private_key = PrivateKey.from_hex(os.environ["PRIVATE_KEY"])
account = Account.load_key(private_key.hex())
gas = GasPriceManager(NETNA_CONFIG)
await gas.initialize()
read = DecibelReadDex(NETNA_CONFIG)
markets = await read.markets.get_all()
btc = next(m for m in markets if m.market_name == "BTC/USD")
write = DecibelWriteDex(
NETNA_CONFIG,
account,
opts=BaseSDKOptions(gas_price_manager=gas),
)
result = await write.place_order(
market_name="BTC/USD",
price=amount_to_chain_units(100000.0, btc.px_decimals),
size=amount_to_chain_units(0.001, btc.sz_decimals),
is_buy=True,
time_in_force=TimeInForce.GoodTilCancelled,
is_reduce_only=False,
)
if isinstance(result, PlaceOrderSuccess):
print(f"Order placed! ID: {result.order_id}")
else:
print(f"Order failed: {result.error}")
await gas.destroy()
asyncio.run(main())
WebSocket Streaming
import asyncio
from decibel import NETNA_CONFIG
from decibel.read import DecibelReadDex
async def main():
read = DecibelReadDex(NETNA_CONFIG)
def on_price(msg):
price = msg.price
print(f"BTC/USD: ${price.mark_px}")
unsubscribe = read.market_prices.subscribe_by_name("BTC/USD", on_price)
await asyncio.sleep(30)
unsubscribe()
await read.ws.close()
asyncio.run(main())
Examples
See the examples directory for complete working examples:
- examples/read - REST API queries (markets, prices, positions, orders)
- examples/read/ws - WebSocket subscriptions (real-time streaming)
- examples/write - Trading operations (orders, deposits, withdrawals)
API Reference
Network Configs
from decibel import NETNA_CONFIG, TESTNET_CONFIG
# NETNA_CONFIG - Dev Network
# TESTNET_CONFIG - Test network
Read Client
from decibel.read import DecibelReadDex
read = DecibelReadDex(config, api_key=None)
# Market data
read.markets.get_all()
read.market_prices.get_all()
read.market_prices.get_by_name(market_name)
read.market_depth.get_by_name(market_name, limit=50)
read.market_trades.get_by_name(market_name)
read.candlesticks.get_by_name(market_name, interval, start_time, end_time)
# User data
read.user_positions.get_by_addr(sub_addr)
read.user_open_orders.get_by_addr(sub_addr)
read.user_order_history.get_by_addr(sub_addr)
read.user_trade_history.get_by_addr(sub_addr)
read.account_overview.get_by_addr(sub_addr)
# WebSocket subscriptions
read.market_prices.subscribe_by_name(market_name, callback)
read.market_depth.subscribe_by_name(market_name, aggregation_size, callback)
read.user_positions.subscribe_by_addr(sub_addr, callback)
Write Client
from decibel import DecibelWriteDex, TimeInForce
write = DecibelWriteDex(config, account, opts)
# Orders
write.place_order(market_name, price, size, is_buy, time_in_force, is_reduce_only)
write.cancel_order(market_name, order_id)
write.cancel_order_by_client_id(market_name, client_order_id)
# TP/SL
write.place_tp_sl_for_position(market_name, tp_price, sl_price, ...)
write.update_tp_order(market_name, order_id, new_trigger_price, ...)
write.update_sl_order(market_name, order_id, new_trigger_price, ...)
# Collateral
write.deposit(amount)
write.withdraw(amount)
Development
uv sync --all-extras # Install dependencies
uv run pre-commit install # Setup pre-commit hooks
uv run pytest # Run tests
uv run ruff check . # Lint
uv run pyright # Type check
Resources
- 📚 Documentation - Full API documentation
- 🌐 Trading Platform - Decibel trading interface
- 💬 Discord - Community support
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file decibel_python_sdk-0.1.0.tar.gz.
File metadata
- Download URL: decibel_python_sdk-0.1.0.tar.gz
- Upload date:
- Size: 50.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
409d79ee1c10c53fc38890df7794fcc0463badc597708f7907eb6f18435fee61
|
|
| MD5 |
a31f53dd4bffc93c51fa368b582a823b
|
|
| BLAKE2b-256 |
fe67d8abb9bc464b291d9b632cc1e90dadf42948da6adf84afa26fba0a7e89f1
|
File details
Details for the file decibel_python_sdk-0.1.0-py3-none-any.whl.
File metadata
- Download URL: decibel_python_sdk-0.1.0-py3-none-any.whl
- Upload date:
- Size: 73.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
efbaf85e336d362eccb497963166fe2c5af24ed7aa3e1461af54fc48bfb16172
|
|
| MD5 |
78c33497d021dbb0d273179719821bfd
|
|
| BLAKE2b-256 |
1ed88948ff21d3d15b59f752901449c6f50848fc3a746e12ee1a84924cb13a9e
|