Research
Security News
Malicious npm Package Targets Solana Developers and Hijacks Funds
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
bitmex-trio-websocket
Advanced tools
Websocket implementation for BitMEX cryptocurrency derivatives exchange.
Websocket implementation for BitMEX cryptocurrency derivatives exchange.
This library requires Python 3.7 or greater.
To install from PyPI:
pip install bitmex-trio-websocket
import trio
from async_generator import aclosing
from bitmex_trio_websocket import open_bitmex_websocket
from trio_websocket import ConnectionClosed
async def main():
async with open_bitmex_websocket('testnet') as bws:
async with aclosing(bws.listen('instrument')) as agen:
try:
async for msg in agen:
print(f'Received message, symbol: \'{msg["symbol"]}\', timestamp: \'{msg["timestamp"]}\'')
except ConnectionClosed as e:
print(e)
if __name__ == '__main__':
trio.run(main)
This will print a sequence of dicts for each received item on inserts (including partials) or updates.
Multiple tables can be listened to concurrently, by running each listener in a seperate task using nursery.start_soon.
Creates a new websocket object.
This is an async context manager, so it needs to be used with the async with .. as ..:
construct. The returned value is a BitMEXWebsocket object.
network
str
Network to connect to. Options: 'mainnet', 'testnet'.
api_key
Optional[str]
Api key for authenticated connections.
api_secret
Optional[str]
Api secret for authenticated connections.
dead_mans_switch
Optional[bool]
When enabled, the websocket will periodically send cancelAllAfter messages with a timeout of 60 seconds. The timer is refreshed every 15 seconds.
See: https://www.bitmex.com/app/wsAPI#Dead-Mans-Switch-Auto-Cancel
Subscribes to the channel and optionally a specific symbol. It is possible for multiple listeners to be listening using the same subscription.
Returns an async generator object that yields messages from the channel.
If the websocket is closed, while a listener is still active, a trio-websocket.ConnectionClosed error will be raised by the generator, with the reason for the closure.
table
str
Channel to subscribe to.
symbol
Optional[str]
Optional symbol to subscribe to.
This attribute contains the storage object for the websocket. The storage object caches the data tables for received items. The implementation uses SortedDict from Sorted Containers, to handle inserts, updates and deletes.
The storage object has two public attributes data
, and keys
.
data
contains the table state for each channel as a dictionary with the table name as key. The tables are sorted dictionaries, stored with key tuples generated from each item using the keys schema received in the initial partial message.
data['orderBookL2']
is a special state dictionary for the orderBookL2 table. It is a double nested defaultdict, with a SortedDict containing each price level. The nested dictionaries are composed like this:
# Special storage for orderBookL2
# dict[symbol][side][id]
self.data['orderBookL2'] = defaultdict(lambda: defaultdict(SortedDict))
keys
contains a mapping for lists of keys by which to look up values in each table.
In addition the following helper methods are supplied:
make_key(table, match_data)
creates a key for searching the data
table. Raises ValueError
if table == 'orderBookL2'
, since this table needs special indexing.
parse_timestamp(timestamp)
static method for converting BitMEX timestamps to datetime with timezone (UTC).
Thanks to the Trio and Trio-websocket libraries for their awesome work.
The library was originally based on the reference client, but is now substantially redesigned.
This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.
FAQs
Websocket implementation for BitMEX cryptocurrency derivatives exchange.
We found that bitmex-trio-websocket demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Security News
Research
Socket researchers have discovered malicious npm packages targeting crypto developers, stealing credentials and wallet data using spyware delivered through typosquats of popular cryptographic libraries.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.