Orderbook Checksum
Every orderbook message contains a 32-bit integer checksum (represented as a base-10 string). This checksum is used to compare a client's orderbook state versus the matching engine's orderbook state.
Should these checksums differ between client and server, the Websocket client is encouraged to re-subscribe to the channel to fetch the new orderbook snapshot in order to re-build the orderbook state.
The preimage of the checksum is generated by concatenating each order's price and size, sorted by their price levels
Only the best 100 price levels are included for purposes of checksumming.
Format:
<best_bid_price>:<best_bid_size>:<best_ask_price>:<best_ask_size>:<second_best_bid_price>:<second_best_bid_size>:...
Example:
orderbook:
{ "bids": ["9", "2"]], "asks": [["10", "1"] }resulting concatenation:
9:2:10:1
// Code Example
import zlib
def checksum(bids, asks):
preimage = ""
iterations = max(len(bids), len(asks))
for index in range(min(iterations, 100)):
if len(bids) > index:
price, size = bids[index]
preimage += price + ":" + size + ":"
if len(asks) > index:
price, size = asks[index]
preimage += price + ":" + size + ":"
preimage = preimage[:-1] # strip last colon
crc = zlib.crc32(preimage.encode("utf8")) & 0xFFFFFFFF
return crc
print(checksum([["9", "2"]], [["10", "1"]])) # 1226559413Last updated
Was this helpful?

