Skip to main content

Python SDK

The Mersennet Python SDK (prime-chain-sdk) provides a client for the JSON-RPC API, PrimeOrders (on-chain order book), and WebSocket subscriptions.

Installationโ€‹

From PyPI (when published):

pip install prime-chain-sdk

From source (Mersennet monorepo):

cd sdk-python
pip install -e .

Or with requirements:

pip install requests websocket-client

Quick Startโ€‹

from prime_chain import PrimeProvider, PrimeOrders

provider = PrimeProvider("http://46.225.30.187:8545")
orders = PrimeOrders(provider)

# Query chain
block_num = provider.block_number()
chain_id = provider.chain_id()
print(f"Block: {block_num}, Chain ID: {chain_id}")

# Query balance
balance = provider.get_balance("0x7f5ce38fb2553e95dd8ef9182a80bc219c9a0d45")
print(f"Balance: {balance}")

# Query order book
book = orders.get_order_book(1)
print(f"Bids: {book.bids}, Asks: {book.asks}")

Creating a Providerโ€‹

from prime_chain import PrimeProvider

provider = PrimeProvider("http://46.225.30.187:8545")

Basic Usageโ€‹

Block and Chain Infoโ€‹

# Latest block number
block_num = provider.block_number()

# Block by number
block = provider.get_block("latest", include_txs=False)
block = provider.get_block(12345, include_txs=True)

# Chain ID
chain_id = provider.chain_id()

# Gas price (hex)
gas_price = provider.gas_price()

Account Queriesโ€‹

# Balance (hex string)
balance = provider.get_balance("0xYourAddress")

# Nonce (transaction count)
nonce = provider.get_nonce("0xYourAddress")

Transaction Queriesโ€‹

# Transaction by hash
tx = provider.get_transaction("0xTxHash")

# Transaction receipt
receipt = provider.get_transaction_receipt("0xTxHash")

Contract Calls (eth_call)โ€‹

# Simulate a contract call
result = provider.call({
"from": "0x...",
"to": "0x...",
"data": "0x...",
})

Sending Raw Transactionsโ€‹

# Send signed raw transaction
tx_hash = provider.send_raw_transaction("0xSignedTxHex")
note

Mersennet uses a custom raw transaction format. Use eth_sendTransaction or prime_sendTransaction when the node has the account unlocked. For wallet-signed transactions, ensure your signing library produces the Mersennet format.

PrimeOrdersโ€‹

Get Order Bookโ€‹

book = orders.get_order_book(1)
for bid in book.bids:
print(f"Bid: price={bid.price}, size={bid.size}")
for ask in book.asks:
print(f"Ask: price={ask.price}, size={ask.size}")

Place Orderโ€‹

Requires the RPC node to have the owner account unlocked:

result = orders.place_order(
market=1,
side="buy",
price="1000000",
amount="10",
tif="gtc",
owner="0xOwnerAddress",
)

Cancel Orderโ€‹

success = orders.cancel_order(order_id=123)

Get Tradesโ€‹

trades = orders.get_trades(1)
for t in trades:
print(f"Trade: {t.taker} -> {t.maker}, price={t.price}, size={t.size}")

Get Positionsโ€‹

positions = orders.get_positions("0xOwnerAddress", market=1)

Add Market (Admin)โ€‹

market_id = orders.add_market(
base="PRIM",
quote="USDC",
lot="1000000",
tick="1000",
)

WebSocket Subscriptionsโ€‹

from prime_chain import PrimeSubscriber

# PrimeSubscriber takes the WebSocket URL directly
subscriber = PrimeSubscriber("ws://46.225.30.187:8546")

# Connect
subscriber.connect()

# Subscribe to new blocks
def on_block(block):
print("New block:", block)

sub_id = subscriber.subscribe_blocks(on_block)

# Subscribe to PrimeOrders trades for a market
def on_trade(trade):
print("Trade:", trade)

trade_sub_id = subscriber.subscribe_trades(1, on_trade)

# Subscribe to logs
def on_log(log):
print("Log:", log)

log_sub_id = subscriber.subscribe_logs(on_log, address="0x...")

# Unsubscribe
subscriber.unsubscribe(sub_id)
subscriber.disconnect()
tip

WebSocket support may vary by node configuration. If subscriptions fail, use HTTP polling.

Error Handlingโ€‹

from prime_chain import PrimeProvider
from prime_chain.provider import MersennetError

provider = PrimeProvider("http://46.225.30.187:8545")

try:
balance = provider.get_balance("0x...")
except MersennetError as e:
print(f"RPC error: {e}, code: {e.code}")

Dependenciesโ€‹

  • Python 3.9+
  • requests (recommended for HTTP)
  • websocket-client (for WebSocket subscriptions)

The SDK can fall back to urllib if requests is not installed, but requests is recommended for production use.