def _update_orderbook(self, orderbook_info):
    ' orderbook update.\n\n        Args:\n            orderbook_info: orderbook information.\n\n        Returns:\n        '
    market = orderbook_info['market']
    data = orderbook_info['data']
    if (data['action'] == 'partial'):
        self._reset_orderbook(market)
    for side in {'bids', 'asks'}:
        book = self._orderbooks[market][side]
        for (price, size) in data[side]:
            if size:
                book[price] = size
            else:
                del book[price]
    checksum = data['checksum']
    orderbook = self._get_orderbook(market)
    checksum_data = [':'.join([f'{float(order[0])}:{float(order[1])}' for order in (bid, offer) if order]) for (bid, offer) in zip_longest(orderbook['bids'][:100], orderbook['asks'][:100])]
    computed_result = int(zlib.crc32(':'.join(checksum_data).encode()))
    if (computed_result != checksum):

        @async_method_locker('FTXMarket._re_subscribe.locker')
        async def _re_subscribe():
            (await self.send_json({'op': 'unsubscribe', 'channel': 'orderbook', 'market': market}))
            (await self.send_json({'op': 'subscribe', 'channel': 'orderbook', 'market': market}))
        SingleTask.run(_re_subscribe)
        return
    logger.debug('orderbook:', json.dumps(orderbook), caller=self)
    ts = int((float(data['time']) * 1000))
    p = {'platform': self._platform, 'symbol': market, 'asks': orderbook['asks'], 'bids': orderbook['bids'], 'timestamp': ts}
    ob = Orderbook(**p)
    SingleTask.run(self.cb.on_orderbook_update_callback, ob)
orderbook update.

Args:
    orderbook_info: orderbook information.

Returns:
def _update_orderbook(self, orderbook_info):
    ' orderbook update.\n\n        Args:\n            orderbook_info: orderbook information.\n\n        Returns:\n        '
    market = orderbook_info['market']
    data = orderbook_info['data']
    if (data['action'] == 'partial'):
        self._reset_orderbook(market)
    for side in {'bids', 'asks'}:
        book = self._orderbooks[market][side]
        for (price, size) in data[side]:
            if size:
                book[price] = size
            else:
                del book[price]
    checksum = data['checksum']
    orderbook = self._get_orderbook(market)
    checksum_data = [':'.join([f'{float(order[0])}:{float(order[1])}' for order in (bid, offer) if order]) for (bid, offer) in zip_longest(orderbook['bids'][:100], orderbook['asks'][:100])]
    computed_result = int(zlib.crc32(':'.join(checksum_data).encode()))
    if (computed_result != checksum):

        @async_method_locker('FTXMarket._re_subscribe.locker')
        async def _re_subscribe():
            (await self.send_json({'op': 'unsubscribe', 'channel': 'orderbook', 'market': market}))
            (await self.send_json({'op': 'subscribe', 'channel': 'orderbook', 'market': market}))
        SingleTask.run(_re_subscribe)
        return
    logger.debug('orderbook:', json.dumps(orderbook), caller=self)
    ts = int((float(data['time']) * 1000))
    p = {'platform': self._platform, 'symbol': market, 'asks': orderbook['asks'], 'bids': orderbook['bids'], 'timestamp': ts}
    ob = Orderbook(**p)
    SingleTask.run(self.cb.on_orderbook_update_callback, ob)