introducción de la multidifusión de eventos públicos en la red de colocación de Deribit proporciona una interfaz de baja latencia para distribuir la información que también reduce significativamente los requisitos de recursos tanto del lado del cliente como del servidor. La migración de los clientes para que utilicen eventos de multidifusión en lugar de suscripciones a eventos en la API de Websocket no solo les permite reaccionar más rápido gracias a la menor latencia y a una codificación más eficiente, sino que también mejora la velocidad de procesamiento de las acciones de negociación en los nodos de
Sugerencia
El paquete de desarrollo del cliente de multidifusión, que incluye los scripts y la documentación de apoyo, está disponible para su descarga en el siguiente enlace:
Descargue el paquete de desarrollo de clientes Deribit Multicast
Este paquete está destinado a ayudar a los desarrolladores a integrarse con el feed de multidifusión de Deribit e incluye todos los materiales necesarios para empezar rápidamente.
Los eventos se envían en paquetes de multidifusión UDP con el formato SBE (codificación binaria simple).
El sistema de multidifusión agrupa los eventos por combinación de divisas y productos (perpetuos, opciones, futuros). Estos grupos se pueden asociar a los canales (las asociaciones de canales reales se mantienen y comparten en un documento independiente), donde a cada canal se le puede asignar una dirección de grupo de multidifusión y un número de puerto de destino UDP independientes. Cada canal conserva un historial limitado de 100.000 paquetes para su recuperación
Tras el encabezado del protocolo UDP, los paquetes de multidifusión comienzan con un encabezado de entramado que contiene la longitud del paquete, el identificador del canal y un número de secuencia en el canal (más información sobre el número de secuencia en 4.D). La longitud del paquete es la longitud total de todos los mensajes del SBE (después del número de secuencia) en bytes. El objetivo principal de este encabezado es permitir a los clientes detectar si pierden paquetes y recuperarlos mediante la API WebSocket/REST normal
|
Longitud del paquete (uint16) |
|---|
|
ID de canal (uint16) |
|
Número de secuencia (uint32) |
|
Mensaje SBE |
|
Mensaje SBE |
|
Mensaje SBE |
|
… |
Tenga en cuenta que todos los mensajes de muestra que se proporcionan a continuación, así como la captura de paquetes de muestra, provienen de un sistema de desarrollo local, con instrumentos definidos únicamente con el propósito de generar datos para probar/desarrollar el decodificador de multidifusión. Los parámetros del producto o instrumento utilizados no coinciden (ni pretenden hacerlo) con los
SBE es una codificación binaria eficiente con funciones que permiten, por ejemplo, ampliar el protocolo con nuevos elementos de forma compatible con versiones anteriores. También tiene un estándar bastante utilizado y conocido, con una comunidad detrás de él que proporciona, por ejemplo, herramientas
Cada mensaje de SBE contiene un encabezado, varios campos de longitud fija, grupos (listas de elementos de longitud variable) y, opcionalmente, campos de longitud variable en esta secuencia estricta.
|
Encabezado (tamaño fijo) |
|---|
|
Campos de longitud fija (tamaño fijo) |
|
Grupos |
|
Campos de longitud variable |
Nota
La especificación XML se proporciona en 2 formatos a partir de la versión 1.6.1. Se debe a una discrepancia en el comportamiento del código generado en los diferentes idiomas. Según los comentarios de los clientes, parece que el código generado para algunos de los lenguajes ya asume el messageHeader como parte de cada mensaje y no requiere que forme parte de cada sección del mensaje (incluso requiere una corrección manual). Para estos casos, se proporciona un archivo XML sin messageHeader siendo parte de las especificaciones del mensaje (deribit_multicast_noheader.xml). La otra versión (predeterminada) es para los idiomas (por ejemplo, CPP) en los que el generador de código necesita que se especifique el encabezado en cada mensaje (deribit_multicast.xml). Para los clientes que utilizan CPP con la herramienta generadora de código de
Herramientas de lógica real o desarrolladas internamente que dependen de messageHeader especificado en los mensajes, se recomienda el XML predeterminado.
Los fragmentos de mensajes XML de este documento NO incluyen el encabezado. El mismo mensaje con el encabezado incluido contiene además messageHeader como primer campo (y los identificadores de campo subsiguientes aumentarán en uno).
<composite name="messageHeader"> <type name="blockLength" primitiveType="uint16" /> <type name="templateId" primitiveType="uint16" /> <type name="schemaId" primitiveType="uint16" /> <type name="version" primitiveType="uint16" /> <type name="numGroups" primitiveType="uint16" /> <type name="numVarDataFields" primitiveType="uint16" /> </composite>
-
blockLengthes el número total de bytes de los campos fijos del mensaje. El propósito de este campo es que si se introduce un nuevo campo fijo (siempre después de los campos existentes), el cliente pueda decodificar los campos que conoce y, basándose en este campo, puede omitir
los elementos adicionales para encontrar el principio de los posibles campos de grupos/variables, o el final del mensaje
-
templateIdhace referencia al identificador del mensaje correspondiente (por ejemplo, 1001 para un cambio en la cartera de pedidos) -
El
schemaIdyversionlos campos sirven para indicar el identificador de la especificación XML y su número de versión -
numGroupses el número de grupos o listas del mensaje. El propósito de este campo es similar alblockLengthy permite introducir nuevos grupos de forma compatible con versiones anteriores -
numVarDataFieldstienen un propósito similar alblockLengthynumGroups
La lista de campos individuales de longitud fija se encuentra en este bloque. Estrictamente en la secuencia definida en la especificación XML. Los campos opcionales están presentes con un valor predeterminado, ya sea mencionado explícitamente en la plantilla de mensajes/campos XML o tal como se define en la especificación de SBE para el
Los grupos son una lista de elementos. Cada mensaje puede contener 0 o más grupos. Cada grupo puede tener 0 o más elementos. Los elementos tienen una estructura similar a la de los mensajes de SBE. Pueden consistir en un bloque de longitud fija, grupos (anidados) y campos de longitud variable. La información sobre la estructura de los elementos, así como el número de elementosnumInGroup) se describe en el encabezado de cada grupo.
La definición del encabezado del grupo:
<composite name="groupSizeEncoding"> <type name="blockLength" primitiveType="uint16"/> <type name="numInGroup" primitiveType="uint16"/> <type name="numGroups" primitiveType="uint16"/> <type name="numVarDataFields" primitiveType="uint16"/> </composite>
Tenga en cuenta que si el encabezado del grupo indica que las entradas no tienen grupos anidados (numGroups = 0) o campos de datos de longitud variable (numVarDataFields = 0) entonces las entradas tienen una longitud fija que es igual a blockLength. En este caso, el número total de bytes del grupo se puede calcular de la siguiente manera: blockLength * numInGroup.
Los campos de longitud variable comienzan con una longitud y un número de bytes de longitud. En la implementación actual, los campos variables se utilizan para los nombres de los instrumentos en los eventos o mensajes de los instrumentos
<composite name="varString" description="Variable-length string"> <type name="length" primitiveType="uint8" /> <type name="varData" length="0" primitiveType="uint8" /> </composite>
La especificación SBE recomienda usar decimales para la representación del precio/importe; sin embargo, dado que en este caso de uso, debido a la gran variedad de instrumentos, elegimos el doble (flotante de 64 bits) para simplificar la interfaz. Esto significa que, al utilizar esos valores para el cálculo, se debe tener en cuenta la propiedad inherente de los valores flotantes de que no todos los números se pueden representar con exactitud. Dado que esta «imprecisión» inherente a la flotación se produce después de 15 decimales, se recomienda que el cliente redondee los valores recibidos, por ejemplo, a
Desde la versión 1.6, la plataforma difunde múltiples eventos:
La estructura y el contenido de los eventos pretenden ser iguales o muy similares a los actuales Eventos de suscripción a la API de Websocket.
El propósito del Instrumento el evento consiste en notificar a los clientes cuando un instrumento (cartera de pedidos) es creado o cambia el estado del ciclo de vida, y para proporcionar información estática del instrumento mediante instantáneas.
A partir de este evento, los clientes pueden:
-
Comience a rastrear un instrumento recién creado o reactivado.
-
Deje de rastrear un instrumento que ha pasado a un estado de ciclo de vida inactivo o terminal.
-
Mantenga un entorno confiable Mapeo de nombres de instrumentos Instrument ID ↔, ya que ambos están incluidos en la carga útil del mensaje.
El mensaje del instrumento también se envía en canales de instantáneas, donde proporciona metadatos estáticos del instrumento como parte del flujo de instantáneas.
Estados del ciclo de vida del instrumento y de la cartera de pedidosCon 13 de enero de 2026 lanzamiento, el state el campo representa el fase actual del ciclo de vida de la cartera de pedidos del instrumento. Cada estado define explícitamente qué acciones están permitidas y cómo se comporta la cartera de pedidos
Los estados del libro de pedidos admitido:
-
abrir
Estado de negociación activo predeterminado. La cartera de pedidos acepta nuevos pedidos, modificaciones y cancelaciones. Los precios se actualizan y las operaciones
-
bloqueado
nuevos pedidos ni modificaciones; se aceptan cancelaciones. Los libros pueden empezar en este estado o bloquearse mediante una acción administrativa. Sigue siendo posible llegar a un acuerdo.
-
asentamiento
Introducido durante el procesamiento de la liquidación o la entrega. No se aceptan nuevos pedidos, modificaciones ni cancelaciones. Los pedidos con fecha límite se cancelan en el momento de
-
entregado
Estado final tras la finalización de la entrega. No se aceptan nuevos pedidos, modificaciones ni cancelaciones. Todos los pedidos abiertos se cancelan
-
inactivo
No se aceptan nuevos pedidos, modificaciones ni cancelaciones. Todos los pedidos abiertos se cancelan en el momento de la entrada. Este estado puede ser definitivo y se usa para instrumentos que ya no están activos, incluidos los instrumentos combinados.
-
detenido
ingresó debido a una condición de error. La liquidación no es posible mientras ningún libro esté en este estado.
Las transiciones del ciclo de vida se comunican a través de mensajes de instrumentos, lo que permite a los clientes responder con precisión a la disponibilidad de las operaciones, al procesamiento de liquidaciones y a las condiciones de las terminales.
Cambios de instrumentos por lotesCuando los cambios de instrumentos se producen de forma masiva (por ejemplo, al cerrar varios libros de opciones), es posible que se envíen varios mensajes de instrumentos combinados en un solo paquete, incluso en diferentes instrumentos, siempre que pertenezcan a la misma combinación de moneda y producto.
Cuando los libros pasan a un estado inactivo o terminal, eventos de cambio de libro (como la eliminación de los niveles de precios restantes) y eventos de cambio de estado del ciclo de vida del instrumento pueden combinarse.
Los instrumentos combinados siguen el mismos estados del ciclo de vida de la cartera de pedidos como todos los demás instrumentos.
Características principales:
-
Los instrumentos combinados se distribuyen en canales de multidifusión dedicados, tal como se define en el Canales de multidifusión de Deribit documento (v1.1 o posterior).
-
Cambios en los mensajes de los instrumentos relacionados con tipos de instrumentos o estados del ciclo de vida se aplican solo a los canales combinados.
Comportamiento durante el ciclo de vida de los combos:
-
Cuando un instrumento combinado se retira de las operaciones activas, su cartera de órdenes pasa a inactivo estado. Se envía un mensaje de instrumento que refleja este cambio de estado y el estado estático del instrumento (por ejemplo, en las instantáneas de cotizaciones o instrumentos) inactivo.
-
Cuando un instrumento combinado que antes estaba inactivo vuelve a estar disponible para su negociación, se envía un mensaje sobre el instrumento que indica una transición de vuelta al abierto estado, y el estado estático del instrumento se actualiza en consecuencia.
<message name="instrument" id="1000"> <field name="instrumentId" id ="1" type="uint32" /> <field name="instrumentState" id="2" type="instrumentState" /> <field name="kind" id="3" type="instrumentKind" /> <field name="instrumentType" id="4" type="instrumentType" /> <field name="optionType" id="5" type="optionType" /> <field name="rfq" id="6" type="yesNo" /> <field name="settlementPeriod" id="7" type="period" presence="optional" /> <field name="settlementPeriodCount" id="8" type="uint16" /> <field name="baseCurrency" id="9" type="string8" /> <field name="quoteCurrency" id="10" type="string8" /> <field name="counterCurrency" id="11" type="string8" /> <field name="settlementCurrency" id="12" type="string8" /> <field name="sizeCurrency" id="13" type="string8" /> <field name="creationTimestampMs" id="14" type="uint64" /> <field name="expirationTimestampMs" id="15" type="uint64" /> <field name="strikePrice" id="16" type="double" presence="optional" /> <field name="contractSize" id="17" type="double" /> <field name="minTradeAmount" id="18" type="double" /> <field name="tickSize" id="19" type="double" /> <field name="makerCommission" id="20" type="double" /> <field name="takerCommission" id="21" type="double" /> <field name="blockTradeCommission" id="22" type="double" presence="optional" /> <field name="maxLiquidationCommission" id="23" type="double" presence="optional" /> <field name="maxLeverage" id="24" type="double" presence="optional" /> <data name="instrumentName" id="25" type="varString" /> </message>
Tipos de enumeración utilizados en el mensaje
<enum name="instrumentState" encodingType="uint8"> <validValue name="created">0</validValue> <validValue name="open">1</validValue> <validValue name="closed">2</validValue> <validValue name="settled">3</validValue> <validValue name="deactivated">4</validValue> <validValue name="inactive">5</validValue> <validValue name="started">6</validValue> <validValue name="settlement" sinceVersion="4">7</validValue> <validValue name="delivered" sinceVersion="4">8</validValue> <validValue name="locked" sinceVersion="4">9</validValue> <validValue name="halted" sinceVersion="4">10</validValue> </enum> <enum name="instrumentKind" encodingType="uint8"> <validValue name="future">0</validValue> <validValue name="option">1</validValue> <validValue name="future_combo">2</validValue> <validValue name="option_combo">3</validValue> <validValue name="spot">4</validValue> </enum> <enum name="optionType" encodingType="uint8"> <validValue name="not_applicable">0</validValue> <validValue name="call">1</validValue> <validValue name="put">2</validValue> </enum> <enum name="instrumentType" encodingType="uint8"> <validValue name="not_applicable">0</validValue> <validValue name="reversed">1</validValue> <validValue name="linear">2</validValue> </enum> <enum name="period" encodingType="uint8"> <validValue name="perpetual">0</validValue> <validValue name="minute">1</validValue> <validValue name="hour">2</validValue> <validValue name="day">3</validValue> <validValue name="week">4</validValue> <validValue name="month">5</validValue> <validValue name="year">6</validValue> </enum>
Frame 4096: 227 bytes on wire (1816 bits), 227 bytes captured (1816 bits) on interface lo, id 0
Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00),
Dst: 00:00:00_00:00:00 (00:00:00:00:00:00)
Internet Protocol Version 4,
Src: 127.0.0.1,
Dst: 239.111.111.2
User Datagram Protocol,
Src Port: 48210,
Dst Port: 6100
Deribit SBE
Framing Header
Packet Length: 177
Channel Id: 2
Channel Sequence: 1
Instrument State
Header
Root Block Length: 140
Type: instrument (1000)
Schema Id: 1
Version: 1
Num Groups: 0
Num Vars: 1
Instrument Id: 618
Instrument State: created (0)
Instrument Kind: option (1)
Instrument Type: not applicable (0)
Option Type: call (1)
RFQ: 0
Settlement Period: minute (1)
Settlement Period Count: 15
Base Currency: BTC
Quote Currency: BTC
Counter Currency: USD
Settlement Currency: BTC
Size Currency: BTC
Creation Timestamp: May 14, 2022 06:35:05.000000000 UTC
Expiration Timestamp: May 14, 2022 06:45:00.000000000 UTC
Strike Price: 29200
Contract Size: 1
Minimum Trade Amount: 0,01
Tick Size: 0,0001
Maker Commission: 0,0001
Taker Commission: 0,0005
Block Trade Commission: 0,00015
Max Liquidation Commission: 0
Max Leverage: 0
Instrument Name: BTC-14MAY22_0645-29200-C
Hex Dump
0000 00 00 00 00 00 00 00 00 00 00 00 00 08 00 45 00 ..............E.
0010 00 d5 bc fc 40 00 20 11 bf a8 7f 00 00 01 ef 6f ....@. ........o
0020 6f 02 bc 52 17 d4 00 c1 de 45 b1 00 02 00 01 00 o..R.....E......
0030 00 00 8c 00 e8 03 01 00 01 00 00 00 01 00 6a 02 ..............j.
0040 00 00 00 01 00 01 00 01 0f 00 42 54 43 00 00 00 ..........BTC...
0050 00 00 42 54 43 00 00 00 00 00 55 53 44 00 00 00 ..BTC.....USD...
0060 00 00 42 54 43 00 00 00 00 00 42 54 43 00 00 00 ..BTC.....BTC...
0070 00 00 a8 1d 47 c1 80 01 00 00 e0 31 50 c1 80 01 ....G......1P...
0080 00 00 00 00 00 00 00 84 dc 40 00 00 00 00 00 00 .........@......
0090 f0 3f 7b 14 ae 47 e1 7a 84 3f 2d 43 1c eb e2 36 .?{..G.z.?-C...6
00a0 1a 3f 2d 43 1c eb e2 36 1a 3f fc a9 f1 d2 4d 62 .?-C...6.?....Mb
00b0 40 3f 61 32 55 30 2a a9 23 3f 00 00 00 00 00 00 @?a2U0*.#?......
00c0 00 00 00 00 00 00 00 00 00 00 18 42 54 43 2d 31 ...........BTC-1
00d0 34 4d 41 59 32 32 5f 30 36 34 35 2d 32 39 32 30 4MAY22_0645-2920
00e0 30 2d 43 0-C
Con la introducción de varios tamaños de garrapatas, necesitamos añadir la información sobre los pasos del tamaño de las garrapatas para que los clientes puedan realizar pedidos con los tamaños correctos de garrapatas en los diferentes rangos de precios.
Si bien SBE proporciona un mecanismo de compatibilidad con versiones anteriores para agregar nuevos campos, la elección de introducir un nuevo mensaje se tomó partiendo del supuesto de que las implementaciones de clientes tienen más probabilidades de ignorar los tipos de mensajes desconocidos que de implementar el mecanismo de compatibilidad con versiones anteriores de SBE. Un segundo motivo es que el nuevo mensaje nos permite eliminar el campo obsoleto «rfq». El mensaje de solicitud de presupuesto presentado recientemente proporciona un mecanismo mucho más fiable y completo para el seguimiento del estado de las solicitudes de presupuesto. SBE no admite la eliminación de campos de un mensaje de forma compatible con versiones anteriores, por lo que un mensaje nuevo es la única forma de hacerlo
La intención es que ambos mensajes se envíen en instantáneas y cambios de estado del instrumento durante un tiempo. Tras el tiempo suficiente y el anuncio oportuno para que los clientes puedan migrar y utilizar este nuevo mensaje, el mensaje original del instrumento se eliminará de la multidifusión
Tenemos la intención de utilizar este mecanismo en el futuro para realizar cambios en los mensajes.
<message name="instrumentV2" id="1010" sinceVersion="3"> <field name="instrumentId" id ="1" type="uint32" /> <field name="instrumentState" id="2" type="instrumentState" /> <field name="kind" id="3" type="instrumentKind" /> <field name="instrumentType" id="4" type="instrumentType" /> <field name="optionType" id="5" type="optionType" /> <field name="settlementPeriod" id="6" type="period" presence="optional" /> <field name="settlementPeriodCount" id="7" type="uint16" /> <field name="baseCurrency" id="8" type="string8" /> <field name="quoteCurrency" id="9" type="string8" /> <field name="counterCurrency" id="10" type="string8" /> <field name="settlementCurrency" id="11" type="string8" /> <field name="sizeCurrency" id="12" type="string8" /> <field name="creationTimestampMs" id="13" type="uint64" /> <field name="expirationTimestampMs" id="14" type="uint64" /> <field name="strikePrice" id="15" type="double" presence="optional" /> <field name="contractSize" id="16" type="double" /> <field name="minTradeAmount" id="17" type="double" /> <field name="tickSize" id="18" type="double" /> <field name="makerCommission" id="19" type="double" /> <field name="takerCommission" id="20" type="double" /> <field name="blockTradeCommission" id="21" type="double" presence="optional" /> <field name="maxLiquidationCommission" id="22" type="double" presence="optional" /> <field name="maxLeverage" id="23" type="double" presence="optional" /> <group name="tickStepsList" id="24" dimensionType="groupSizeEncoding"> <field name="abovePrice" id="1" type="double" /> <field name="tickSize" id="2" type="double" /> </group> <data name="instrumentName" id="25" type="varString" /> </message>
En este mensaje se utilizan los mismos tipos de enumeración que en el mensaje del instrumento original.
El mensaje InstrumentV2 se inserta justo después del mensaje del instrumento en una secuencia de instantáneas y en los eventos de cambio de estado del instrumento.
Frame 12890: 417 bytes on wire (3336 bits), 417 bytes captured (3336 bits) on interface lo, id 0
Interface id: 0 (lo)
Interface name: lo
Encapsulation type: Ethernet (1)
Arrival Time: Jun 15, 2023 20:51:00.018508968 CEST
[Time shift for this packet: 0.000000000 seconds]
Epoch Time: 1686855060.018508968 seconds
[Time delta from previous captured frame: 0.001292339 seconds]
[Time delta from previous displayed frame: 0.000000000 seconds]
[Time since reference or first frame: 283.628602527 seconds]
Frame Number: 12890
Frame Length: 417 bytes (3336 bits)
Capture Length: 417 bytes (3336 bits)
[Frame is marked: False]
[Frame is ignored: False]
[Protocols in frame: eth:ethertype:ip:udp:deribit_sbe]
[Coloring Rule Name: UDP]
[Coloring Rule String: udp]
Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00)
Destination: 00:00:00_00:00:00 (00:00:00:00:00:00)
Address: 00:00:00_00:00:00 (00:00:00:00:00:00)
.... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
.... ...0 .... .... .... .... = IG bit: Individual address (unicast)
Source: 00:00:00_00:00:00 (00:00:00:00:00:00)
Address: 00:00:00_00:00:00 (00:00:00:00:00:00)
.... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
.... ...0 .... .... .... .... = IG bit: Individual address (unicast)
Type: IPv4 (0x0800)
Internet Protocol Version 4, Src: 127.0.0.1, Dst: 239.111.111.2
0100 .... = Version: 4
.... 0101 = Header Length: 20 bytes (5)
Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
0000 00.. = Differentiated Services Codepoint: Default (0)
.... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)
Total Length: 403
Identification: 0x5ba3 (23459)
Flags: 0x40, Don't fragment
0... .... = Reserved bit: Not set
.1.. .... = Don't fragment: Set
..0. .... = More fragments: Not set
...0 0000 0000 0000 = Fragment Offset: 0
Time to Live: 32
Protocol: UDP (17)
Header Checksum: 0x2044 [validation disabled]
[Header checksum status: Unverified]
Source Address: 127.0.0.1
Destination Address: 239.111.111.2
User Datagram Protocol, Src Port: 32859, Dst Port: 6100
Source Port: 32859
Destination Port: 6100
Length: 383
Checksum: 0xdf03 [unverified]
[Checksum Status: Unverified]
[Stream index: 2]
[Timestamps]
[Time since first frame: 283.625157436 seconds]
[Time since previous frame: 0.001292339 seconds]
UDP payload (375 bytes)
Deribit SBE
Framing Header
Packet Length: 367
Channel Id: 2
Channel Sequence: 3145
Instrument State
Header
Root Block Length: 140
Type: instrument (1000)
Schema Id: 1
Version: 2
Num Groups: 0
Num Vars: 1
Instrument Id: 77
Instrument State: created (0)
Instrument Kind: option (1)
Instrument Type: reversed (1)
Option Type: call (1)
RFQ: 0
Settlement Period: week (4)
Settlement Period Count: 1
Base Currency: BTC
Quote Currency: BTC
Counter Currency: USD
Settlement Currency: BTC
Size Currency: BTC
Creation Timestamp: Jun 15, 2023 18:51:00.000000000 UTC
Expiration Timestamp: Jun 23, 2023 08:00:00.000000000 UTC
Strike Price: 25500
Contract Size: 1
Minimum Trade Amount: 0,01
Tick Size: 0,0001
Maker Commission: 0
Taker Commission: 0,0001
Block Trade Commission: 0,00015
Max Liquidation Commission: -nan
Max Leverage: -nan
Instrument Name: BTC-23JUN23-25500-C
Instrument State v2
Header
Root Block Length: 139
Type: instrument_v2 (1010)
Schema Id: 1
Version: 3
Num Groups: 1
Num Vars: 1
Instrument Id: 77
Instrument State: created (0)
Instrument Kind: option (1)
Instrument Type: reversed (1)
Option Type: call (1)
Settlement Period: week (4)
Settlement Period Count: 1
Base Currency: BTC
Quote Currency: BTC
Counter Currency: USD
Settlement Currency: BTC
Size Currency: BTC
Creation Timestamp: Jun 15, 2023 18:51:00.000000000 UTC
Expiration Timestamp: Jun 23, 2023 08:00:00.000000000 UTC
Strike Price: 25500
Contract Size: 1
Minimum Trade Amount: 0,01
Tick Size: 0,0001
Maker Commission: 0
Taker Commission: 0,0001
Block Trade Commission: 0,00015
Max Liquidation Commission: -nan
Max Leverage: -nan
Tick Size Steps Group
Header
Group Block Length: 16
Num In Group: 1
Group Num Groups: 0
Group Num Vars: 0
Tick Step List
above price : 0,001
tick_size : 0,0002
Instrument Name: BTC-23JUN23-25500-C
Hex Dump
0000 00 00 00 00 00 00 00 00 00 00 00 00 08 00 45 00 ..............E.
0010 01 93 5b a3 40 00 20 11 20 44 7f 00 00 01 ef 6f ..[.@. . D....o
0020 6f 02 80 5b 17 d4 01 7f df 03 6f 01 02 00 49 0c o..[......o...I.
0030 00 00 8c 00 e8 03 01 00 02 00 00 00 01 00 4d 00 ..............M.
0040 00 00 00 01 01 01 00 04 01 00 42 54 43 00 00 00 ..........BTC...
0050 00 00 42 54 43 00 00 00 00 00 55 53 44 00 00 00 ..BTC.....USD...
0060 00 00 42 54 43 00 00 00 00 00 42 54 43 00 00 00 ..BTC.....BTC...
0070 00 00 20 8a 65 c0 88 01 00 00 00 68 44 e7 88 01 .. .e......hD...
0080 00 00 00 00 00 00 00 e7 d8 40 00 00 00 00 00 00 .........@......
0090 f0 3f 7b 14 ae 47 e1 7a 84 3f 2d 43 1c eb e2 36 .?{..G.z.?-C...6
00a0 1a 3f 00 00 00 00 00 00 00 00 2d 43 1c eb e2 36 .?........-C...6
00b0 1a 3f 61 32 55 30 2a a9 23 3f ff ff ff ff ff ff .?a2U0*.#?......
00c0 ff ff ff ff ff ff ff ff ff ff 13 42 54 43 2d 32 ...........BTC-2
00d0 33 4a 55 4e 32 33 2d 32 35 35 30 30 2d 43 8b 00 3JUN23-25500-C..
00e0 f2 03 01 00 03 00 01 00 01 00 4d 00 00 00 00 01 ..........M.....
00f0 01 01 04 01 00 42 54 43 00 00 00 00 00 42 54 43 .....BTC....BTC
0100 00 00 00 00 00 55 53 44 00 00 00 00 00 42 54 43 .....USD....BTC
0110 00 00 00 00 00 42 54 43 00 00 00 00 00 20 8a 65 .....BTC..... .e
0120 c0 88 01 00 00 00 68 44 e7 88 01 00 00 00 00 00 ......hD........
0130 00 00 e7 d8 40 00 00 00 00 00 00 f0 3f 7b 14 ae ....@.......?{..
0140 47 e1 7a 84 3f 2d 43 1c eb e2 36 1a 3f 00 00 00 G.z.?-C...6.?...
0150 00 00 00 00 00 2d 43 1c eb e2 36 1a 3f 61 32 55 .....-C...6.?a2U
0160 30 2a a9 23 3f ff ff ff ff ff ff ff ff ff ff ff 0*.#?...........
0170 ff ff ff ff ff 10 00 01 00 00 00 00 00 fc a9 f1 ................
0180 d2 4d 62 50 3f 2d 43 1c eb e2 36 2a 3f 13 42 54 .MbP?-C...6*?.BT
0190 43 2d 32 33 4a 55 4e 32 33 2d 32 35 35 30 30 2d C-23JUN23-25500-
01a0 43 C
Este evento contiene cambios en los niveles del libro de pedidos. Los cambios pueden consistir en la creación de nuevos niveles, en la cantidad de los niveles o en la eliminación (no queda ningún importe), tal y como ocurre en los eventos de suscripción a Websocket
Los cambios en el libro de órdenes de los combos son los mismos que los de los instrumentos normales. Sin embargo, dado que las operaciones en combos cambian las posiciones (pero no los niveles de la cartera de órdenes) de los distintos instrumentos que forman parte del combo (también conocidas como tramos), las operaciones combinadas generarán eventos de cambio contable con cambios de nivel vacíos
Del mismo modo, un cambio de posición iniciado por un administrador también puede desencadenar un evento de cambio de libro con cambios de nivel vacíos.
<message name="book" id="1001"> <field name="instrumentId" id="1" type="uint32" /> <field name="timestampMs" id="2" type="uint64" /> <field name="prevChangeId" id="3" type="uint64" /> <field name="changeId" id="4" type="uint64" /> <field name="isLast" id="5" type="yesNo" /> <group name="changesList" id="6" dimensionType="groupSizeEncoding"> <field name="side" id="1" type="bookSide" /> <field name="change" id="2" type="bookChange" /> <!-- Use double (64 bit float) encoding, SBE FIX price/amount decimal encoding makes sense when the decimal point is on a somewhat fixed position, for crypto, it can vary more by instrument --> <field name="price" id="3" type="double" /> <field name="amount" id="4" type="double" /> </group> </message>
Tipos de enumeración utilizados en este mensaje
<enum name="bookChange" encodingType="uint8"> <validValue name="created">0</validValue> <validValue name="changed">1</validValue> <validValue name="deleted">2</validValue> </enum> <enum name="bookSide" encodingType="uint8"> <validValue name="ask">0</validValue> <validValue name="bid">1</validValue> </enum> <enum name="yesNo" encodingType="uint8"> <validValue name="no">0</validValue> <validValue name="yes">1</validValue> </enum>
Los eventos utilizan el mismo mecanismo para garantizar la coherencia de la cartera de pedidos que los eventos de websocket.
Cada mensaje contiene un mensaje actual changeId y prevChangeId. Cuando se recibe un evento, prevChangeId debe compararse con el changeId del último evento visto en el libro. Se debe suponer que el identificador de cambio es simplemente un número que aumenta monótonamente de forma no estrictamente consecutiva
ocasiones, la lista de cambios en el libro puede generar un mensaje que supere el tamaño máximo del paquete. En este caso, la plataforma divide la lista de cambios en varias listas y genera una secuencia de varios mensajes de cambios completos en la cartera de pedidos. Los mensajes tienen los mismos campos fijosheader, timestampMs, prevChangeId, changeId) pero el isLast el campo se establece en el valor 0 para todos los mensajes de la secuencia, excepto el último, para indicar si se ha enviado la lista de cambios completa.
Mensaje de ejemplo
Frame 220: 135 bytes on wire (1080 bits), 135 bytes captured (1080 bits) on interface lo, id 0
Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00),
Dst: 00:00:00_00:00:00 (00:00:00:00:00:00)
Internet Protocol Version 4,
Src: 127.0.0.1,
Dst: 239.111.111.3
User Datagram Protocol,
Src Port: 51012,
Dst Port: 6100
Deribit SBE
Framing Header
Packet Length: 85
Channel Id: 3
Channel Sequence: 21093
Book Change
Header
Root Block Length: 29
Type: book (1001)
Schema Id: 1
Version: 1
Num Groups: 1
Num Vars: 0
Instrument Id: 136
Timestamp: May 2, 2022 11:53:01.475000000 UTC
Previous Change ID: 3086730
Change ID: 3086733
Is Last Part: last (1)
Changes
Group Header
Group Block Length: 18
Num In Group: 2
Group Num Groups: 0
Group Num Vars: 0
Change List
delete bid - price : 35171,99
amount: 0
new bid - price : 36930,58
amount: 40
Hex Dump
0000 00 00 00 00 00 00 00 00 00 00 00 00 08 00 45 00 ..............E.
0010 00 79 7b 98 40 00 20 11 01 68 7f 00 00 01 ef 6f .y{.@. ..h....o
0020 6f 03 c7 44 17 d4 00 65 dd ea 55 00 03 00 65 52 o..D...e..U...eR
0030 00 00 1d 00 e9 03 01 00 01 00 01 00 00 00 88 00 ................
0040 00 00 23 e3 9d 84 80 01 00 00 8a 19 2f 00 00 00 ..#........./...
0050 00 00 8d 19 2f 00 00 00 00 00 01 12 00 02 00 00 ..../...........
0060 00 00 00 01 02 e1 7a 14 ae 7f 2c e1 40 00 00 00 ......z...,.@...
0070 00 00 00 00 00 01 00 f6 28 5c 8f 52 08 e2 40 00 ........(\.R..@.
0080 00 00 00 00 00 44 40 .....D@
En caso de que una orden dé como resultado una o más operaciones, estas se envían en un evento de operaciones que contiene una o más operaciones relacionadas con el mismo instrumento y orden.
El significado y el propósito de los campos son los mismos que los del evento de API de websocket correspondiente.
Dado que las operaciones combinadas cambian de posición en los tramos, las operaciones de combos también son visibles en los flujos de instrumentos (tramos) que forman parte del combo. El campo «ComboTradeID» de las operaciones a nivel de pierna se ajustará al «TradeID» de la operación con el instrumento
<message name="trades" id="1002"> <field name="instrumentId" id="1" type="uint32" /> <group name="tradesList" id="2" dimensionType="groupSizeEncoding"> <field name="direction" id="1" type="direction" /> <field name="price" id="2" type="double" /> <field name="amount" id="3" type="double" /> <field name="timestampMs" id="4" type="uint64" /> <field name="markPrice" id="5" type="double" /> <field name="indexPrice" id="6" type="double" /> <field name="tradeSeq" id="7" type="uint64" /> <field name="tradeId" id="8" type="uint64" /> <field name="tickDirection" id="9" type="tickDirection" /> <field name="liquidation" id="10" type="liquidation" /> <field name="iv" id="11" type="double" presence="optional" /> <field name="blockTradeId" id="12" type="uint64" presence="optional" nullValue="0" /> <field name="comboTradeId" id="13" type="uint64" presence="optional" nullValue="0" /> </group> </message>
Tipos de enumeración utilizados en el mensaje
<enum name="tickDirection" encodingType="uint8"> <validValue name="plus">0</validValue> <validValue name="zeroplus">1</validValue> <validValue name="minus">2</validValue> <validValue name="zerominus">3</validValue> </enum> <enum name="direction" encodingType="uint8"> <validValue name="buy">0</validValue> <validValue name="sell">1</validValue> </enum> <enum name="liquidation" encodingType="uint8"> <validValue name="none">0</validValue> <validValue name="maker">1</validValue> <validValue name="taker">2</validValue> <validValue name="both">3</validValue> </enum>
El sistema de eventos combina los eventos relacionados con la misma transacción en un instrumento. Si estos eventos caben en un solo paquete, los mensajes contables, bursátiles y bursátiles relacionados se combinarán en un paquete
Frame 181: 470 bytes on wire (3760 bits), 470 bytes captured (3760 bits) on interface lo, id 0
Ethernet II,
Src: 00:00:00_00:00:00 (00:00:00:00:00:00),
Dst: 00:00:00_00:00:00 (00:00:00:00:00:00)
Internet Protocol Version 4,
Src: 127.0.0.1,
Dst: 239.111.111.1
User Datagram Protocol,
Src Port: 55022,
Dst Port: 6100
Deribit SBE
Framing Header
Packet Length: 420
Channel Id: 1
Channel Sequence: 10477
Trades
Header
Root Block Length: 4
Type: trades (1002)
Schema Id: 1
Version: 1
Num Groups: 1
Num Vars: 0
Instrument Id: 1
Trades
Group Header
Group Block Length: 83
Num In Group: 2
Group Num Groups: 0
Group Num Vars: 0
Trade 1
Trade Direction: sell (1)
Price: 39344,25
Amount: 10
Timestamp: May 2, 2022 11:53:01.000000000 UTC
Mark Price: 38815,96
Index Price: 38603,64
Trade Sequence: 392167
Trade Id: 1297362
Tick Direction: zerominus (3)
Liquidation: no liquidation (0)
Implied Volatility: 0
Block Trade Id: 0
Combo Trade Id: 0
Trade 2
Trade Direction: sell (1)
Price: 39316,72
Amount: 10
Timestamp: May 2, 2022 11:53:01.000000000 UTC
Mark Price: 38815,96
Index Price: 38603,64
Trade Sequence: 392168
Trade Id: 1297363
Tick Direction: minus (2)
Liquidation: no liquidation (0)
Implied Volatility: 0
Block Trade Id: 0
Combo Trade Id: 0
Ticker
Header
Root Block Length: 133
Type: ticker (1003)
Schema Id: 1
Version: 1
Num Groups: 0
Num Vars: 0
Instrument Id: 1
Instrument State: open (1)
Timestamp: May 2, 2022 11:53:01.000000000 UTC
Open Interest: 60
Min Price: 38980,56
Max Price: 39375,71
Last Price: 39316,72
Index Price: 38603,64
Mark Price: 38815,96
Best Bid Price: 39316,31
Best Bid Amount: 30
Best Ask Price: 39375,72
Best Ask Amount: 10
Current Funding: 0,005
Funding 8h: 0,00751341
Estimated Delivery Price: 38603,64
Delivery Price: 0
Settlement Price: 39229,82
Book Change
Header
Root Block Length: 29
Type: book (1001)
Schema Id: 1
Version: 1
Num Groups: 1
Num Vars: 0
Instrument Id: 1
Timestamp: May 2, 2022 11:53:01.000000000 UTC
Previous Change ID: 3086708
Change ID: 3086709
Is Last Part: last (1)
Changes
Group Header
Group Block Length: 18
Num In Group: 2
Group Num Groups: 0
Group Num Vars: 0
Change List
delete bid - price : 39316,72
amount: 0
delete bid - price : 39344,25
amount: 0
Hex Dump:
0000 00 00 00 00 00 00 00 00 00 00 00 00 08 00 45 00 ..............E.
0010 01 c8 bd 2f 40 00 20 11 be 83 7f 00 00 01 ef 6f .../@. ......o
0020 6f 01 d6 ee 17 d4 01 b4 df 37 a4 01 01 00 ed 28 o........7.....(
0030 00 00 04 00 ea 03 01 00 01 00 01 00 00 00 01 00 ................
0040 00 00 53 00 02 00 00 00 00 00 01 00 00 00 00 08 ..S.............
0050 36 e3 40 00 00 00 00 00 00 24 40 48 e1 9d 84 80 6.@......$@H....
0060 01 00 00 85 eb 51 b8 fe f3 e2 40 ae 47 e1 7a 74 .....Q....@.G.zt
0070 d9 e2 40 e7 fb 05 00 00 00 00 00 d2 cb 13 00 00 ..@.............
0080 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 ................
0090 00 00 00 00 00 00 00 00 00 00 00 00 00 01 a4 70 ...............p
00a0 3d 0a 97 32 e3 40 00 00 00 00 00 00 24 40 48 e1 =..2.@......$@H.
00b0 9d 84 80 01 00 00 85 eb 51 b8 fe f3 e2 40 ae 47 ........Q....@.G
00c0 e1 7a 74 d9 e2 40 e8 fb 05 00 00 00 00 00 d3 cb .zt..@..........
00d0 13 00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 ................
00e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00f0 85 00 eb 03 01 00 01 00 00 00 00 00 01 00 00 00 ................
0100 01 48 e1 9d 84 80 01 00 00 00 00 00 00 00 00 4e .H.............N
0110 40 b8 1e 85 eb 91 08 e3 40 85 eb 51 b8 f6 39 e3 @........@..Q..9.
0120 40 a4 70 3d 0a 97 32 e3 40 ae 47 e1 7a 74 d9 e2 @.p=..2.@.G.zt..
0130 40 85 eb 51 b8 fe f3 e2 40 b8 1e 85 eb 89 32 e3 @..Q....@.....2.
0140 40 00 00 00 00 00 00 3e 40 a4 70 3d 0a f7 39 e3 @......>@.p=..9.
0150 40 00 00 00 00 00 00 24 40 7b 14 ae 47 e1 7a 74 @......$@{..G.zt
0160 3f c2 f9 b3 a3 61 c6 7e 3f ae 47 e1 7a 74 d9 e2 ?....a.~?.G.zt..
0170 40 00 00 00 00 00 00 00 00 d7 a3 70 3d ba 27 e3 @.........p=.'.
0180 40 1d 00 e9 03 01 00 01 00 01 00 00 00 01 00 00 @...............
0190 00 48 e1 9d 84 80 01 00 00 74 19 2f 00 00 00 00 .H.......t./....
01a0 00 75 19 2f 00 00 00 00 00 01 12 00 02 00 00 00 .u./............
01b0 00 00 01 02 a4 70 3d 0a 97 32 e3 40 00 00 00 00 .....p=..2.@....
01c0 00 00 00 00 01 02 00 00 00 00 08 36 e3 40 00 00 ...........6.@..
01d0 00 00 00 00 00 00 ......
El evento de cotización se envía periódicamente para indicar cambios en los datos del libro que no están estrictamente nivelados (por ejemplo, el precio del índice). El evento puede estar relacionado con un cambio en el nivel contable (por ejemplo, cambios en la mejor oferta o demanda), en cuyo caso se envía junto con el cambio en el libro correspondiente. También se puede enviar como un evento independiente
La estructura de mensajes de cotización también se usa en los canales de instantáneas.
Nota
Las tasas de financiación y los campos de financiación relacionados publicados en este evento de multidifusión se derivan del Deribit ticker.{instrument_name}.{interval} canal de notificación. Consulte el documentación oficial de Deribit para obtener más información.
<message name="ticker" id="1003"> <!-- according the the SBE spec, optional floats use the quietNaN null value 0xffffffffffffffff --> <field name="instrumentId" id="1" type="uint32" /> <field name="instrumentState" id="2" type="instrumentState" /> <field name="timestampMs" id="3" type="uint64" /> <field name="openInterest" id="4" type="double" presence="optional" /> <field name="minSellPrice" id="5" type="double" /> <field name="maxBuyPrice" id="6" type="double" /> <field name="lastPrice" id="7" type="double" presence="optional"/> <field name="indexPrice" id="8" type="double" /> <field name="markPrice" id="9" type="double" /> <field name="bestBidPrice" id="10" type="double" /> <field name="bestBidAmount" id="11" type="double" /> <field name="bestAskPrice" id="12" type="double" /> <field name="bestAskAmount" id="13" type="double" /> <field name="currentFunding" id="14" type="double" presence="optional" /> <field name="funding8h" id="15" type="double" presence="optional" /> <field name="estimatedDeliveryPrice" id="16" type="double" presence="optional"/> <field name="deliveryPrice" id="17" type="double" presence="optional" /> <field name="settlementPrice" id="18" type="double" presence="optional" /> </message>
Frame 106: 195 bytes on wire (1560 bits), 195 bytes captured (1560 bits) on interface lo, id 0
Ethernet II,
Src: 00:00:00_00:00:00 (00:00:00:00:00:00),
Dst: 00:00:00_00:00:00 (00:00:00:00:00:00)
Internet Protocol Version 4,
Src: 127.0.0.1,
Dst: 239.111.111.4
User Datagram Protocol,
Src Port: 37630,
Dst Port: 6100
Deribit SBE
Framing Header
Packet Length: 145
Channel Id: 4
Channel Sequence: 4218
Ticker
Header
Root Block Length: 133
Type: ticker (1003)
Schema Id: 1
Version: 1
Num Groups: 0
Num Vars: 0
Instrument Id: 2
Instrument State: open (1)
Timestamp: May 3, 2022 13:17:24.827000000 UTC
Open Interest: 10
Min Price: 2837,56
Max Price: 2866,08
Last Price: 2865,61
Index Price: 2834,85
Mark Price: 2850,44
Best Bid Price: 2866,09
Best Bid Amount: 20
Best Ask Price: 2866,10
Best Ask Amount: 10
Current Funding: 0,004999
Funding 8h: -0,003006
Estimated Delivery Price: 2834,85
Delivery Price: 0
Settlement Price: 2837,27
Hex Dump:
0000 00 00 00 00 00 00 00 00 00 00 00 00 08 00 45 00 ..............E.
0010 00 b5 9e 37 40 00 20 11 de 8b 7f 00 00 01 ef 6f ...7@. ......o
0020 6f 04 92 fe 17 d4 00 a1 de 27 91 00 04 00 7a 10 o........'....z.
0030 00 00 85 00 eb 03 01 00 01 00 00 00 00 00 02 00 ................
0040 00 00 01 db 81 11 8a 80 01 00 00 00 00 00 00 00 ................
0050 00 24 40 85 eb 51 b8 1e 2b a6 40 5c 8f c2 f5 28 .$@..Q..+.@\...(
0060 64 a6 40 1f 85 eb 51 38 63 a6 40 33 33 33 33 b3 d.@...Q8c.@3333.
0070 25 a6 40 7b 14 ae 47 e1 44 a6 40 48 e1 7a 14 2e %.@{..G.D.@H.z..
0080 64 a6 40 00 00 00 00 00 00 34 40 33 33 33 33 33 d.@......4@33333
0090 64 a6 40 00 00 00 00 00 00 24 40 1c 09 34 d8 d4 d.@......$@..4..
00a0 79 74 3f 6c 07 23 f6 09 a0 68 bf 33 33 33 33 b3 yt?l.#...h.3333.
00b0 25 a6 40 00 00 00 00 00 00 00 00 d7 a3 70 3d 8a %.@..........p=.
00c0 2a a6 40 *.@
Además de los eventos anteriores, las instantáneas normales (cada 1 minuto de forma predeterminada) de los libros de pedidos también se difunden en múltiples formatos. Las instantáneas también se agrupan por divisa o producto (como los eventos) y se pueden Canales de multidifusión de Deribit).
Las instantáneas son una secuencia de instrument/instrument_v2/ticker/snapshot mensajes que contienen los datos estáticos del instrumento, la información de cotización del estado actual de la cartera, los niveles de la cartera de pedidos y el identificador del último cambio con la fecha y hora del último cambio.
Los niveles de libros de ambas caras (solicitas/ofertas) se combinan en una sola lista mediante un método en zigzag (oferta1, pregunta1, oferta2, pregunta2...).
Por lo general, las instantáneas están completas (es decir, contienen todos los niveles del libro); sin embargo, si tienen más de 10 000 niveles, se limitarán a 10 000.
Para indicar si la instantánea está completa o no, el mensaje contiene un isComplete
bandera.
Si una instantánea completa no cabe en un paquete, la lista de niveles se divide (de forma similar a los cambios en la cartera de pedidos). isLast el indicador indica si el mensaje contiene una parte de la lista de niveles y el siguiente mensaje contiene el seguimiento (valor = 0) o si el mensaje es el último de la secuencia y el envío de los niveles ha finalizado, o si el mensaje tiene todos los niveles enviados en la instantánea (valor = 1).
Si es múltiple instrument/instrument_v2/ticker/snapshot las secuencias de mensajes (para diferentes instrumentos de un par divisa/producto) caben en un solo paquete y se combinarán. Los mensajes instantáneos a nivel de libro pueden dividirse en paquetes
<message name="snapshot" id="1004"> <field name="instrumentId" id="1" type="uint32" /> <field name="timestampMs" id="2" type="uint64" /> <field name="changeId" id="3" type="uint64" /> <field name="isBookComplete" id="4" type="yesNo" /> <field name="isLastInBook" id="5" type="yesNo" /> <group name="levelsList" id="6" dimensionType="groupSizeEncoding"> <field name="side" id="1" type="bookSide" /> <field name="price" id="2" type="double" /> <field name="amount" id="3" type="double" /> </group> </message>
Tipos de enumeración utilizados en el mensaje
<enum name="yesNo" encodingType="uint8"> <validValue name="no">0</validValue> <validValue name="yes">1</validValue> </enum> <enum name="bookSide" encodingType="uint8"> <validValue name="ask">0</validValue> <validValue name="bid">1</validValue> </enum>
Frame 13142: 347 bytes on wire (2776 bits), 347 bytes captured (2776 bits) on interface lo, id 0
Ethernet II,
Src: 00:00:00_00:00:00 (00:00:00:00:00:00),
Dst: 00:00:00_00:00:00 (00:00:00:00:00:00)
Internet Protocol Version 4,
Src: 127.0.0.1,
Dst: 239.111.111.5
User Datagram Protocol,
Src Port: 33646,
Dst Port: 6101
Deribit SBE
Framing Header
Packet Length: 297
Channel Id: 105
Channel Sequence: 95
Book Snapshot
Header
Root Block Length: 22
Type: snapshot (1004)
Schema Id: 1
Version: 1
Num Groups: 1
Num Vars: 0
Instrument Id: 486
Timestamp: May 9, 2022 14:04:23.702000000 UTC
Change ID: 4434022
Is Book Complete: complete (1)
Is Last Part: last (1)
Levels
Group Header
Group Block Length: 17
Num In Group: 15
Group Num Groups: 0
Group Num Vars: 0
Level List:
bid - price: 32030,22 amount: 10
bid - price: 32018,26 amount: 10
bid - price: 32017,43 amount: 10
bid - price: 32016,94 amount: 20
bid - price: 32013,36 amount: 10
bid - price: 32011,99 amount: 10
bid - price: 31728,66 amount: 10
bid - price: 31724,04 amount: 30
bid - price: 31712,10 amount: 10
bid - price: 31711,62 amount: 20
bid - price: 31709,33 amount: 20
bid - price: 31694,14 amount: 20
bid - price: 31684,67 amount: 10
bid - price: 31683,33 amount: 20
bid - price: 31079,33 amount: 30
Hex Dump:
0000 00 00 00 00 00 00 00 00 00 00 00 00 08 00 45 00 ..............E.
0010 01 4d c1 01 40 00 20 11 bb 28 7f 00 00 01 ef 6f .M..@. ..(....o
0020 6f 05 83 6e 17 d5 01 39 de c0 29 01 69 00 5f 00 o..n...9..).i._.
0030 00 00 16 00 ec 03 01 00 01 00 01 00 00 00 e6 01 ................
0040 00 00 16 ad 22 a9 80 01 00 00 66 a8 43 00 00 00 ....".....f.C...
0050 00 00 01 01 11 00 0f 00 00 00 00 00 01 48 e1 7a .............H.z
0060 14 8e 47 df 40 00 00 00 00 00 00 00 24 40 01 3d ..G.@.......$@.=
0070 0a d7 a3 90 44 df 40 00 00 00 00 00 00 00 24 40 ....D.@.......$@
0080 01 52 b8 1e 85 5b 44 df 40 00 00 00 00 00 00 24 .R...[D.@......$
0090 40 01 8f c2 f5 28 3c 44 df 40 00 00 00 00 00 00 @....(@.ffff...@.
00f0 00 00 00 00 00 00 24 40 01 e1 7a 14 ae e7 f7 de ......$@..z.....
0100 40 00 00 00 00 00 00 00 34 40 01 ec 51 b8 1e 55 @.......4@..Q..U
0110 f7 de 40 00 00 00 00 00 00 34 40 01 5c 8f c2 f5 ..@......4@.\\...
0120 88 f3 de 40 00 00 00 00 00 00 34 40 01 14 ae 47 ...@......4@...G
0130 e1 2a f1 de 40 00 00 00 00 00 00 24 40 01 ec 51 .*..@......$@..Q
0140 b8 1e d5 f0 de 40 00 00 00 00 00 00 34 40 01 ec .....@......4@..
0150 51 b8 1e d5 59 de 40 00 00 00 00 00 00 00 3e 40 Q...Y.@.......>@
Ejemplo de secuencia de instantáneas
El propósito del snapshotStart evento es indicar al cliente que puede empezar a prepararse para la llegada de una próxima instantánea, almacenando en búfer los eventos antes de recibir o procesar la instantánea. Poco antes de enviar cada instantánea (actualmente 200 ms), aparece un mensaje snapshotStart se envía para indicar que habrá una posible secuencia de instantáneas en camino.
El campo snapshotDelay indica el retraso en milisegundos.
Otro mensaje con tipo snapshotEnd se envía tan pronto como se completa la secuencia de instantáneas del canal
En el caso de que no haya ninguna instantánea disponible (no haya libros activos en el canal), solo un par de snapshotStart y snapshotEnd se enviará.
<message name="snapshotStart" id="1005"> <field name="snapshotDelay" id="1" type="uint32" /> </message>
Frame 1: 66 bytes on wire (528 bits), 66 bytes captured (528 bits) on interface lo, id 0
Ethernet II,
Src: 00:00:00_00:00:00 (00:00:00:00:00:00),
Dst: 00:00:00_00:00:00 (00:00:00:00:00:00)
Internet Protocol Version 4,
Src: 127.0.0.1,
Dst: 239.111.111.10
User Datagram Protocol,
Src Port: 48141,
Dst Port: 6101
Deribit SBE
Framing Header
Packet Length: 16
Channel Id: 110
Channel Sequence: 2
Book Snapshot Start
Header
Root Block Length: 4
Type: snapshot_start (1005)
Schema Id: 1
Version: 1
Num Groups: 0
Num Vars: 0
Snapshot Delay: 200
Hex Dump:
0000 00 00 00 00 00 00 00 00 00 00 00 00 08 00 45 00 ..............E.
0010 00 b5 54 33 40 00 20 11 28 8a 7f 00 00 01 ef 6f ..T3@. .(.....o
0020 6f 0a bc 0d 17 d5 00 20 91 9c 10 00 6e 00 02 00 o...... ...n...
0030 00 00 04 00 ed 03 01 00 01 00 00 00 00 00 c8 00 ................
0040 00 00
Frame 1: 62 bytes on wire (496 bits), 62 bytes captured (496 bits) on interface lo, id 0
Ethernet II,
Src: 00:00:00_00:00:00 (00:00:00:00:00:00),
Dst: 00:00:00_00:00:00 (00:00:00:00:00:00)
Internet Protocol Version 4,
Src: 127.0.0.1,
Dst: 239.111.111.10
User Datagram Protocol,
Src Port: 48141,
Dst Port: 6101
Deribit SBE
Framing Header
Packet Length: 12
Channel Id: 110
Channel Sequence: 3
Book Snapshot End
Header
Root Block Length: 0
Type: snapshot_end (1006)
Schema Id: 1
Version: 1
Num Groups: 0
Num Vars: 0
Hex Dump:
0000 00 00 00 00 00 00 00 00 00 00 00 00 08 00 45 00 ..............E.
0010 00 b5 54 33 40 00 20 11 28 8a 7f 00 00 01 ef 6f ..T3@. .(.....o
0020 6f 0a bc 0d 17 d5 00 1c 5f a5 0c 00 6e 00 03 00 o......._...n...
0030 00 00 00 00 ee 03 01 00 01 00 00 00 00 00 ..............
Ejemplo de secuencia de instantáneas
El mensaje combinado se envía después del mensaje del instrumento en los canales combinados de eventos y multidifusión en dos ocasiones: 1) en el canal de eventos cuando se crea un combo 2) en el canal de instantáneas con cada instantánea.
El evento contiene un identificador de instrumento y una lista de etapas combinadas. Cada tramo combinado de la lista contiene un identificador de instrumento para el tramo combinado, así como el tamaño del tramo combinado (int32)
<message name="comboLegs" id="1007"> <field name="instrumentId" id="1" type="uint32" /> <group name="legsList" id="2" dimensionType="groupSizeEncoding"> <field name="legInstrumentId" id="1" type="uint32" /> <field name="legSize" id="2" type="int32" /> </group> </message>
Frame 1865: 264 bytes on wire (2112 bits), 264 bytes captured (2112 bits) on interface lo, id 0
Ethernet II,
Src: 00:00:00_00:00:00 (00:00:00:00:00:00),
Dst: 00:00:00_00:00:00 (00:00:00:00:00:00)
Internet Protocol Version 4,
Src: 127.0.0.1,
Dst: 239.111.111.14
User Datagram Protocol,
Src Port: 54658,
Dst Port: 6100
Deribit SBE
Framing Header
Packet Length: 214
Channel Id: 14
Channel Sequence: 0
Instrument State - Combo Legs
Header
Root Block Length: 4
Type: combo_legs (1007)
Schema Id: 1
Version: 2
Num Groups: 1
Num Vars: 0
Instrument Id: 32
Legs
Group Header
Group Block Length: 8
Num In Group: 2
Group Num Groups: 0
Group Num Vars: 0
Leg List:
leg instrument id: 1 leg size: -1
leg instrument id: 2 leg size: 1
Hex Dump:
0000 00 00 00 00 00 00 00 00 00 00 00 00 08 00 45 00 ..............E.
0010 00 fa ed e2 40 00 20 11 8e 91 7f 00 00 01 ef 6f ....@. ......o
0020 6f 0e d5 82 17 d4 00 e6 de 76 d6 00 0e 00 00 00 o........v......
0030 00 00 8c 00 e8 03 01 00 02 00 00 00 01 00 20 00 .............. .
0040 00 00 00 02 00 00 01 04 01 00 42 54 43 00 00 00 ..........BTC...
0050 00 00 55 53 44 00 00 00 00 00 55 53 44 00 00 00 ..USD.....USD...
0060 00 00 42 54 43 00 00 00 00 00 55 53 44 00 00 00 ..BTC.....USD...
0070 00 00 10 bd 10 3d 84 01 00 00 00 64 a7 41 84 01 .....=.....d.A..
0080 00 00 ff ff ff ff ff ff ff ff 00 00 00 00 00 00 ................
0090 24 40 00 00 00 00 00 00 24 40 7b 14 ae 47 e1 7a $@......$@{..G.z
00a0 84 3f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .?..............
00b0 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
00c0 ff ff ff ff ff ff ff ff ff ff 15 42 54 43 2d 46 ...........BTC-F
00d0 53 2d 31 31 4e 4f 56 32 32 5f 34 4e 4f 56 32 32 S-11NOV22_4NOV22
00e0 04 00 ef 03 01 00 02 00 01 00 00 00 20 00 00 00 ............ ...
00f0 08 00 02 00 00 00 00 00 01 00 00 00 ff ff ff ff ................
0100 02 00 00 00 01 00 00 00 ........
El evento de índice de precios contiene un nombre de índice de 16 bytes en forma de pares de divisas (por ejemplo, eth_usdc), seguido del precio y la marca de tiempo. Los mensajes sobre el índice de precios no están asociados a ningún grupo de divisas o productos, por lo que se envían por
<message name="priceIndex" id="1008"> <field name="indexName" id="1" type="string16" /> <field name="price" id="2" type="double" /> <field name="timestampMs" id="3" type="uint64" /> </message>
Otros tipos utilizados en el mensaje:
<type name="string16" primitiveType="char" length="16" />
Frame 1228: 94 bytes on wire (752 bits), 94 bytes captured (752 bits) on interface lo, id 0
Ethernet II,
Src: 00:00:00_00:00:00 (00:00:00:00:00:00),
Dst: 00:00:00_00:00:00 (00:00:00:00:00:00)
Internet Protocol Version 4,
Src: 127.0.0.1,
Dst: 239.111.111.0
User Datagram Protocol,
Src Port: 40820,
Dst Port: 6100
Deribit SBE
Framing Header
Packet Length: 44
Channel Id: 0
Channel Sequence: 306
Price Index
Header
Root Block Length: 32
Type: price_index (1008)
Schema Id: 1
Version: 2
Num Groups: 0
Num Vars: 0
Currency Pair: eth_usdc
Price: 1271,1231
Timestamp: Nov 11, 2022 10:10:45.315000000 UTC
Hex Dump:
0000 00 00 00 00 00 00 00 00 00 00 00 00 08 00 45 00 ..............E.
0010 00 50 1e 49 40 00 20 11 5e e3 7f 00 00 01 ef 6f .P.I@. .^......o
0020 6f 00 9f 74 17 d4 00 3c dd be 2c 00 00 00 32 01 o..t...<..,...2.
0030 00 00 20 00 f0 03 01 00 02 00 00 00 00 00 65 74 .. ............et
0040 68 5f 75 73 64 63 00 00 00 00 00 00 00 00 8d 28 h_usdc.........(
0050 ed 0d 7e dc 93 40 c3 9d 2b 66 84 01 00 00 ..~..@..+f....
El evento RFQ (solicitud de cotización) contiene el estado (activo o inactivo), el lado (compra, venta o no_direction), seguido del importe y la marca de tiempo. Este mensaje se enviará con el identificador de canal genérico: 0. Consulte la documentación del canal para conocer su dirección de multidifusión.
<message name="rfq" id="1009"> <field name="instrumentId" id="1" type="uint32" /> <field name="state" id="2" type="yesNo" /> <field name="side" id="3" type="rfqDirection" /> <field name="amount" id="4" type="double" /> <field name="timestampMs" id="5" type="uint64" /> </message>
Tipos de enumeración utilizados en el mensaje:
<enum name="yesNo" encodingType="uint8"> <validValue name="no">0</validValue> <validValue name="yes">1</validValue> </enum> <enum name="rfqDirection" encodingType="uint8"> <validValue name="buy">0</validValue> <validValue name="sell">1</validValue> <validValue name="no_direction">2</validValue> </enum>
Frame 1229: 84 bytes on wire (672 bits), 84 bytes captured (672 bits) on interface lo, id 0
Ethernet II,
Src: 00:00:00_00:00:00 (00:00:00:00:00:00),
Dst: 00:00:00_00:00:00 (00:00:00:00:00:00)
Internet Protocol Version 4,
Src: 127.0.0.1,
Dst: 239.111.111.1
User Datagram Protocol,
Src Port: 37608,
Dst Port: 6100
Deribit SBE
Framing Header
Packet Length: 34
Channel Id: 1
Channel Sequence: 59
RFQ (Request for Quote)
Header
Root Block Length: 22
Type: rfq (1009)
Schema Id: 1
Version: 2
Num Groups: 0
Num Vars: 0
Instrument Id: 12
RFQ State: active (1)
RFQ Side: buy (0)
Amount: 1
Timestamp: Nov 11, 2022 10:10:46.250000000 UTC
Hex Dump:
0000 00 00 00 00 00 00 00 00 00 00 00 00 08 00 45 00 ..............E.
0010 00 46 29 55 40 00 20 11 53 e0 7f 00 00 01 ef 6f .F)U@. .S......o
0020 6f 01 92 e8 17 d4 00 32 dd b5 22 00 01 00 3b 00 o......2.."...;.
0030 00 00 16 00 f1 03 01 00 02 00 00 00 00 00 0c 00 ................
0040 00 00 01 00 00 00 00 00 00 00 f0 3f 6a a1 2b 66 ...........?j.+f
0050 84 01 00 00 ....
Los instrumentos puntuales generan los mismos mensajes que otros instrumentos. Los eventos contables y los eventos bursátiles se generan para los cambios en los datos de la cartera de pedidos. Las instantáneas de spot incluyen datos bursátiles y contables de todos
Frame 19: 117 bytes on wire (936 bits), 117 bytes captured (936 bits) on interface lo, id 0
Ethernet II,
Src: 00:00:00_00:00:00 (00:00:00:00:00:00),
Dst: 00:00:00_00:00:00 (00:00:00:00:00:00)
Internet Protocol Version 4,
Src: 127.0.0.1,
Dst: 239.111.111.21
User Datagram Protocol,
Src Port: 52994,
Dst Port: 6100
Deribit SBE
Framing Header
Packet Length: 67
Channel Id: 21
Channel Sequence: 184
Book Change
Header
Root Block Length: 29
Type: book (1001)
Schema Id: 1
Version: 2
Num Groups: 1
Num Vars: 0
Instrument Id: 29
Timestamp: Mar 2, 2023 13:43:14.929000000 UTC
Previous Change ID: 80
Change ID: 86
Is Last Part: last (1)
Changes
Group Header
Group Block Length: 18
Num In Group: 1
Group Num Groups: 0
Group Num Vars: 0
Change List
new ask - price : 23308,9845
amount : 0,0002
Hex Dump:
0000 43 00 15 00 b8 00 00 00 1d 00 e9 03 01 00 02 00 C...............
0010 01 00 00 00 1d 00 00 00 f1 0c 90 a2 86 01 00 00 ................
0020 50 00 00 00 00 00 00 00 56 00 00 00 00 00 00 00 P.......V.......
0030 01 12 00 01 00 00 00 00 00 00 00 ba 49 0c 02 3f ............I..?
0040 c3 d6 40 2d 43 1c eb e2 36 2a 3f ..@-C...6*?
Frame 723: 1494 bytes on wire (11952 bits), 1494 bytes captured (11952 bits) on interface lo, id 0
Ethernet II,
Src: 00:00:00_00:00:00 (00:00:00:00:00:00),
Dst: 00:00:00_00:00:00 (00:00:00:00:00:00)
Internet Protocol Version 4,
Src: 127.0.0.1,
Dst: 239.111.111.21
User Datagram Protocol,
Src Port: 48500,
Dst Port: 6101
Deribit SBE
Framing Header
Packet Length: 1444
Channel Id: 121
Channel Sequence: 4
Instrument State
Header
Root Block Length: 140
Type: instrument (1000)
Schema Id: 1
Version: 2
Num Groups: 0
Num Vars: 1
Instrument Id: 29
Instrument State: open (1)
Instrument Kind: spot (4)
Instrument Type: not applicable (0)
Option Type: not applicable (0)
RFQ: 0
Settlement Period: Unknown (255)
Settlement Period Count: 0
Base Currency: BTC
Quote Currency: USDC
Counter Currency: USDC
Settlement Currency: [empty]
Size Currency: BTC
Creation Timestamp: Mar 2, 2023 13:42:24.000000000 UTC
Expiration Timestamp: Jan 1, 3000 08:00:00.000000000 UTC
Strike Price: -nan
Contract Size: 0,0001
Minimum Trade Amount: 0,0001
Tick Size: 0,0001
Maker Commission: 0
Taker Commission: 0,0001
Block Trade Commission: -nan
Max Liquidation Commission: -nan
Max Leverage: -nan
Instrument Name: BTC_USDC
Ticker
Header
Root Block Length: 133
Type: ticker (1003)
Schema Id: 1
Version: 2
Num Groups: 0
Num Vars: 0
Instrument Id: 29
Instrument State: open (1)
Timestamp: Mar 2, 2023 13:43:26.970000000 UTC
Open Interest: -nan
Min Sell Price: 23226,7493
Max Buy Price: 23460,1839
Last Price: 23274,6191
Index Price: 23372,9729
Mark Price: 23296,2361
Best Bid Price: 23274,6191
Best Bid Amount: 0,0005
Best Ask Price: 23317,8531
Best Ask Amount: 0,0001
Current Funding: -nan
Funding 8h: -nan
Estimated Delivery Price: -nan
Delivery Price: -nan
Settlement Price: -nan
Book Snapshot
Header
Root Block Length: 22
Type: snapshot (1004)
Schema Id: 1
Version: 2
Num Groups: 1
Num Vars: 0
Instrument Id: 29
Timestamp: Mar 2, 2023 13:43:26.970000000 UTC
Change ID: 163
Is Book Complete: complete
Is Last Part: last (1)
Levels
Group Header
Group Block Length: 17
Num In Group: 27
Group Num Groups: 0
Group Num Vars: 0
Orderbook Levels:
ask - price: 23317,8531 amount: 0,0001
bid - price: 23274,6191 amount: 0,0005
ask - price: 23325,4224 amount: 0,0001
bid - price: 23267,3293 amount: 0,0003
ask - price: 23327,1627 amount: 0,0004
ask - price: 23332,8221 amount: 0,0002
ask - price: 23343,9179 amount: 0,0006
ask - price: 23355,7196 amount: 0,0007
ask - price: 23355,7235 amount: 0,0004
ask - price: 23360,0454 amount: 0,0004
ask - price: 23363,7177 amount: 0,0006
ask - price: 23370,4559 amount: 0,0007
ask - price: 23371,5373 amount: 0,0001
ask - price: 23374,1273 amount: 0,0002
ask - price: 23383,1583 amount: 0,0002
ask - price: 23386,2295 amount: 0,0001
ask - price: 23392,8084 amount: 0,0004
ask - price: 23392,8220 amount: 0,0002
ask - price: 23409,2294 amount: 0,0004
ask - price: 23410,6344 amount: 0,0001
ask - price: 23417,4490 amount: 0,0003
ask - price: 23419,4629 amount: 0,0008
ask - price: 23436,5183 amount: 0,0001
ask - price: 23436,5464 amount: 0,0008
ask - price: 23437,9561 amount: 0,0001
ask - price: 23438,0801 amount: 0,0002
ask - price: 23438,2290 amount: 0,0003
Instrument
State Header
Root Block Length: 140
Type: instrument (1000)
Schema Id: 1
Version: 2
Num Groups: 0
Num Vars: 1
Instrument Id: 30
Instrument State: open (1)
Instrument Kind: spot (4)
Instrument Type: not applicable (0)
Option Type: not applicable (0)
RFQ: 0
Settlement Period: Unknown (255)
Settlement Period Count: 0
Base Currency: ETH
Quote Currency: USDC
Counter Currency: USDC
Settlement Currency: –
Size Currency: ETH
Creation Timestamp: Mar 2, 2023 13:42:24.000000000 UTC
Expiration Timestamp: Jan 1, 3000 08:00:00.000000000 UTC
Strike Price: -nan
Contract Size: 0,0001
Minimum Trade Amount: 0,0001
Tick Size: 0,0001
Maker Commission: 0
Taker Commission: 0,0001
Block Trade Commission: -nan
Max Liquidation Commission: -nan
Max Leverage: -nan
Instrument Name: ETH_USDC
Ticker
Header
Root Block Length: 133
Type: ticker (1003)
Schema Id: 1
Version: 2
Num Groups: 0
Num Vars: 0
Instrument Id: 30
Instrument State: open (1)
Timestamp: Mar 2, 2023 13:43:26.973000000 UTC
Open Interest: -nan
Min Sell Price: 1624,8012
Max Buy Price: 1641,1309
Last Price: 1628,9218
Index Price: 1634,1202
Mark Price: 1629,0167
Best Bid Price: 0
Best Bid Amount: 0
Best Ask Price: 1624,9995
Best Ask Amount: 0,0025
Current Funding: -nan
Funding 8h: -nan
Estimated Delivery Price: -nan
Delivery Price: -nan
Settlement Price: -nan
Book Snapshot
Header
Root Block Length: 22
Type: snapshot (1004)
Schema Id: 1
Version: 2
Num Groups: 1
Num Vars: 0
Instrument Id: 30
Timestamp: Mar 2, 2023 13:43:26.973000000 UTC
Change ID: 162
Is Book Complete: complete (1)
Is Last Part: more to come (0)
Levels
Group Header
Group Block Length: 17
Num In Group: 17
Group Num Groups: 0
Group Num Vars: 0
Orderbook Levels (asks):
ask - price: 1624,9995 amount: 0,0025
ask - price: 1630,9028 amount: 0,0104
ask - price: 1630,9219 amount: 0,0098
ask - price: 1631,4677 amount: 0,0012
ask - price: 1632,6882 amount: 0,0043
ask - price: 1634,0983 amount: 0,0052
ask - price: 1634,7069 amount: 0,0061
ask - price: 1635,2764 amount: 0,0098
ask - price: 1635,3288 amount: 0,0098
ask - price: 1635,5830 amount: 0,0006
ask - price: 1635,9182 amount: 0,0012
ask - price: 1637,3179 amount: 0,0055
ask - price: 1637,4283 amount: 0,0043
ask - price: 1637,6410 amount: 0,0061
ask - price: 1637,8371 amount: 0,0061
ask - price: 1638,5149 amount: 0,0117
ask - price: 1639,1852 amount: 0,0043
Hex Dump:
0000 a4 05 79 00 04 00 00 00 8c 00 e8 03 01 00 02 00
0010 00 00 01 00 1d 00 00 00 01 04 00 00 00 ff 00 00
0020 42 54 43 00 00 00 00 00 55 53 44 43 00 00 00 00
0030 55 53 44 43 00 00 00 00 00 00 00 00 00 00 00 00
0040 42 54 43 00 00 00 00 00 00 46 8f a2 86 01 00 00
0050 00 54 04 dc 8f 1d 00 00 ff ff ff ff ff ff ff ff
0060 2d 43 1c eb e2 36 1a 3f 2d 43 1c eb e2 36 1a 3f
0070 2d 43 1c eb e2 36 1a 3f 00 00 00 00 00 00 00 00
0080 2d 43 1c eb e2 36 1a 3f ff ff ff ff ff ff ff ff
0090 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
00a0 08 42 54 43 5f 55 53 44 43 85 00 eb 03 01 00 02
00b0 00 00 00 00 00 1d 00 00 00 01 fa 3b 90 a2 86 01
00c0 00 00 ff ff ff ff ff ff ff ff b9 fc 87 f4 af ae
00d0 d6 40 6f 81 04 c5 0b e9 d6 40 3d 9b 55 9f a7 ba
00e0 d6 40 92 5c fe 43 3e d3 d6 40 a5 2c 43 1c 0f c0
00f0 d6 40 3d 9b 55 9f a7 ba d6 40 fc a9 f1 d2 4d 62
0100 40 3f 0e be 30 99 76 c5 d6 40 2d 43 1c eb e2 36
0110 1a 3f ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0120 ff ff 92 5c fe 43 3e d3 d6 40 ff ff ff ff ff ff
0130 ff ff ff ff ff ff ff ff ff ff 16 00 ec 03 01 00
0140 02 00 01 00 00 00 1d 00 00 00 fa 3b 90 a2 86 01
0150 00 00 a3 00 00 00 00 00 00 00 01 01 11 00 1b 00
0160 00 00 00 00 00 0e be 30 99 76 c5 d6 40 2d 43 1c
0170 eb e2 36 1a 3f 01 3d 9b 55 9f a7 ba d6 40 fc a9
0180 f1 d2 4d 62 40 3f 00 75 02 9a 08 5b c7 d6 40 2d
0190 43 1c eb e2 36 1a 3f 01 a5 4e 40 13 d5 b8 d6 40
01a0 61 32 55 30 2a a9 33 3f 00 c4 42 ad 69 ca c7 d6
01b0 40 2d 43 1c eb e2 36 3a 3f 00 83 51 49 9d 34 c9
01c0 d6 40 2d 43 1c eb e2 36 2a 3f 00 40 a4 df be fa
01d0 cb d6 40 61 32 55 30 2a a9 43 3f 00 8d 28 ed 0d
01e0 ee ce d6 40 c7 ba b8 8d 06 f0 46 3f 00 aa f1 d2
01f0 4d ee ce d6 40 2d 43 1c eb e2 36 3a 3f 00 cf 66
0200 d5 e7 02 d0 d6 40 2d 43 1c eb e2 36 3a 3f 00 16
0210 fb cb ee ed d0 d6 40 61 32 55 30 2a a9 43 3f 00
0220 90 31 77 2d 9d d2 d6 40 c7 ba b8 8d 06 f0 46 3f
0230 00 09 8a 1f 63 e2 d2 d6 40 2d 43 1c eb e2 36 1a
0240 3f 00 32 e6 ae 25 88 d3 d6 40 2d 43 1c eb e2 36
0250 2a 3f 00 bd 52 96 21 ca d5 d6 40 2d 43 1c eb e2
0260 36 2a 3f 00 9c c4 20 b0 8e d6 d6 40 2d 43 1c eb
0270 e2 36 1a 3f 00 86 5a d3 bc 33 d8 d6 40 2d 43 1c
0280 eb e2 36 3a 3f 00 54 e3 a5 9b 34 d8 d6 40 2d 43
0290 1c eb e2 36 2a 3f 00 6d 56 7d ae 4e dc d6 40 2d
02a0 43 1c eb e2 36 3a 3f 00 25 75 02 9a a8 dc d6 40
02b0 2d 43 1c eb e2 36 1a 3f 00 fa 7e 6a bc 5c de d6
02c0 40 61 32 55 30 2a a9 33 3f 00 54 52 27 a0 dd de
02d0 d6 40 2d 43 1c eb e2 36 4a 3f 00 61 c3 d3 2b 21
02e0 e3 d6 40 2d 43 1c eb e2 36 1a 3f 00 a2 b4 37 f8
02f0 22 e3 d6 40 2d 43 1c eb e2 36 4a 3f 00 ed 0d be
0300 30 7d e3 d6 40 2d 43 1c eb e2 36 1a 3f 00 1a c0
0310 5b 20 85 e3 d6 40 2d 43 1c eb e2 36 2a 3f 00 b2
0320 9d ef a7 8e e3 d6 40 61 32 55 30 2a a9 33 3f 8c
0330 00 e8 03 01 00 02 00 00 00 01 00 1e 00 00 00 01
0340 04 00 00 00 ff 00 00 45 54 48 00 00 00 00 00 55
0350 53 44 43 00 00 00 00 00 55 53 44 43 00 00 00 00
0360 00 00 00 00 00 00 00 00 45 54 48 00 00 00 00 00
0370 46 8f a2 86 01 00 00 00 54 04 dc 8f 1d 00 00 ff
0380 ff ff ff ff ff ff ff 2d 43 1c eb e2 36 1a 3f 2d
0390 43 1c eb e2 36 1a 3f 2d 43 1c eb e2 36 1a 3f ff
03a0 ff ff ff ff ff ff ff ff 2d 43 1c eb e2 36 1a 3f
03b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
03c0 ff ff ff ff ff ff ff ff 08 45 54 48 5f 55 53 44
03d0 85 00 eb 03 01 00 02 00 00 00 00 00 1e 00 00 00
03e0 01 fd 3b 90 a2 86 01 00 00 ff ff ff ff ff ff ff
03f0 ff 39 d6 c5 6d 34 63 99 40 30 4c a6 0a 86 a4 99
0400 40 d0 d5 56 ec af 73 99 40 eb 73 b5 15 7b 88 99
0410 40 5f 07 ce 19 11 74 99 40 00 00 00 00 00 00 00
0420 00 00 00 00 00 00 00 00 00 68 91 ed 7c ff 63 99
0430 40 7b 14 ae 47 e1 7a 64 3f ff ff ff ff ff ff ff
0440 ff ff ff ff ff ff ff ff ff eb 73 b5 15 7b 88 99
0450 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0460 16 00 ec 03 01 00 02 00 01 00 00 00 1e 00 00 00
0470 fd 3b 90 a2 86 01 00 00 a2 00 00 00 00 00 00 00
0480 00 01 00 11 00 11 00 00 00 00 00 00 68 91 ed 7c
0490 ff 63 99 40 7b 14 ae 47 e1 7a 64 3f 00 51 6b 9a
04a0 77 9c 7b 99 40 94 f6 06 5f 98 4c 85 3f 00 bb b8
04b0 8d 06 b0 7b 99 40 6e a3 01 bc 05 12 84 3f 00 5b
04c0 b1 bf ec de 7d 99 40 61 32 55 30 2a a9 53 3f 00
04d0 6e 34 80 b7 c0 82 99 40 22 fd f6 75 e0 9c 71 3f
04e0 00 ca 54 c1 a8 64 88 99 40 94 f6 06 5f 98 4c 75
04f0 3f 00 2b f6 97 dd d3 8a 99 40 07 f0 16 48 50 fc
0500 78 3f 00 75 02 9a 08 1b 8d 99 40 6e a3 01 bc 05
0510 12 84 3f 00 b3 7b f2 b0 50 8d 99 40 6e a3 01 bc
0520 05 12 84 3f 00 46 b6 f3 fd 54 8e 99 40 61 32 55
0530 30 2a a9 43 3f 00 c0 ec 9e 3c ac 8f 99 40 61 32
0540 55 30 2a a9 53 3f 00 98 dd 93 87 45 95 99 40 ba
0550 49 0c 02 2b 87 76 3f 00 82 73 46 94 b6 95 99 40
0560 22 fd f6 75 e0 9c 71 3f 00 f2 d2 4d 62 90 96 99
0570 40 07 f0 16 48 50 fc 78 3f 00 ed 0d be 30 59 97
0580 99 40 07 f0 16 48 50 fc 78 3f 00 d7 12 f2 41 0f
0590 9a 99 40 67 d5 e7 6a 2b f6 87 3f 00 e0 9c 11 a5
05a0 bd 9c 99 40 22 fd f6 75 e0 9c 71 3f
Cuando un cliente se inicia, debe empezar a escuchar los eventos de multidifusión y poner en cola los mensajes recibidos para asegurarse de que no pasa por alto los cambios mientras crea los datos iniciales con los siguientes pasos.
-
Recupere el diccionario de instrumentos completo actual para todos los instrumentos abiertos con la nueva llamada a la API
multicast/get_instrument_dictionaryEl resultado de la llamada es un mapeo entre el ID del instrumento y el nombre del instrumento
por ejemplo:
{"jsonrpc":"2.0","result":{"ETH-PERPETUAL":2,"BTC-PERPETUAL":3,"BTC-15APR22": 4}}La asignación también se puede recuperar para la divisa o el producto en cuestión desde la API normal mediante la llamada public/get_instruments.
Los datos del instrumento ahora contienen el identificador numérico del instrumento. El cliente puede usar esto para crear un diccionario de identificación/nombre del instrumento
-
Consulte el estado de los libros de pedidos de cada instrumento mediante el
public/get_order_book(opublic/get_order_book_by_instrument_id) Llamada a la API.
Aplica los cambios en la cartera de pedidos que eventualmente no se hayan realizado, en función del identificador de cambio en los libros recuperados y en los eventos de multidifusión recibidos.
El cliente también puede crear el estado inicial de los libros basándose en las instantáneas habituales. Los detalles de los mensajes instantáneos (instrument/instrument_v2/ticker/snapshot
Cuando se utilizan instantáneas, se sigue recomendando poner en cola los cambios, ya que pueden ocurrir mientras la plataforma crea o envía las instantáneas. A partir de los cambios a nivel de libro que estén en cola, si hay alguno con un identificador de cambio superior al indicado en la instantánea
Obviamente, los cambios realizados antes de la instantánea Change ID no son relevantes y deben descartarse. Para solucionar el caso (poco probable) de que solo se recopilen eventos con un identificador de cambio superior al de la instantánea (o, de hecho, el resultado de la llamada a la API), el identificador de cambio anterior del evento también debería validarse con el ID de cambio de la instantánea del libro
Como las instantáneas contienen tanto el ID del instrumento como el nombre del instrumento, así como otros datos estáticos del instrumento, probablemente no sea necesario recuperar el diccionario de la API.
Nota
Tenga en cuenta que, si bien el multicast/get_instrument_dictionary La llamada a la API contiene solo la lista de instrumentos activos; el flujo de instantáneas incluye los instrumentos cerrados o fijos hasta que se archivan (normalmente, después de un día).
Al unirse a un canal de instantáneas en medio de un lote de instantáneas (es decir, paquetes que se reciben inmediatamente al unirse), se recomienda ignorarlos y esperar al siguiente lote para asegurarse de que se recibe o procesa un lote de instantáneas completo, con todos los instrumentos del canal.
Cuando se agrega un nuevo instrumento al sistema, un instrument se genera un evento (ver arriba) que contiene el ID y el nombre del nuevo instrumento. El nuevo libro también formará parte de las instantáneas
Cuando los instrumentos están cerrados o liquidados, también hay instrument eventos generados que el cliente puede utilizar para dejar de mantener el libro.
Un cliente puede detectar un paquete perdido basándose en un salto en los números de secuencia. Tenga en cuenta que el número de secuencia es un entero de 32 bits y pasará a ser 0 cuando alcance su valor máximo (2^32-1), que los clientes deberían poder reconocer como una secuencia normal y no tratarlo como
Los números de secuencia también pueden restablecerse a 0 después de un mantenimiento del sistema, lo que puede requerir que los clientes reconstruyan sus datos iniciales (por ejemplo, como se describió anteriormente).
Cuando el cliente detecta paquetes perdidos, puede recuperarlos mediante el multicast/get_packets llamada. Los parámetros de la llamada
|
id_canal |
El identificador entero del canal de multidifusión en el que se perdió el paquete |
|---|---|
|
iniciar |
Número de secuencia de inicio |
|
final |
Número de secuencia final |
La respuesta contiene la lista de paquetes solicitados, excluyendo el encabezado de encuadre (solo los mensajes SBE) en formato binario codificado en base64, que se puede decodificar de la misma manera que un paquete de multidifusión (después de la decodificación en base64).
Es posible solicitar un máximo de 1000 paquetes consecutivos en el canal con esta llamada. La llamada también tiene un límite de velocidad de 1 solicitud por segundo con una ráfaga de 3 solicitudes por segundo. Si se pierden más de 1000 paquetes en el canal a la vez, se prefiere realizar una recuperación completa del canal mediante cualquiera de los mecanismos de inicio del cliente descritos en los artículos 4.A y 4.B, en lugar de intentar
Solicitud
api/v2/multicast/get_packets?channel_id=15&end=2&start=1
Respuesta
{
"jsonrpc": "2.0",
"result": [
{
"seq": 1,
"packet": "6QMBAAEAGQABAAAAAQAAABuxRACAAQAAAAAAAAAAAAAFAAAAAAAAAAESAAEAAAAAAAAAzczMzBxy5kAAAAAAAAAkQOsDAQABACgAAAAAAAEAAAAbsUQAgAEAAAAAAAAAAAAAAAAAAAAAAADNzMzMHHLmQAAAAAAAACRA"
},
{
"seq": 2,
"packet": "6QMBAAEAGQABAAAAAQAAAIWxRACAAQAABQAAAAAAAAAHAAAAAAAAAAESAAEAAAAAAAEA7FG4Hr185UAAAAAAAAA0QOsDAQABACgAAAAAAAEAAACFsUQAgAEAAOxRuB69fOVAAAAAAAAANEDNzMzMHHLmQAAAAAAAACRA"
}
],
"usIn": 1649273556304472,
"usOut": 1649273556304731,
"usDiff": 259,
"testnet": false
}
Junto a este documento, se proporcionan los siguientes archivos para ayudar al desarrollo de los clientes.
Se toman de una configuración de prueba de desarrollo y se pueden usar como referencia para inspeccionar con Wireshark (usando el complemento que creamos) o reproducir paquetes con herramientas como tcpreplay.
Los rastros adicionales con información nueva se proporcionan por separado, por ejemplo, para los mensajes nuevos que deberían usarse para
tc preplay está disponible en la mayoría de las distribuciones de Linux como paquete. Tras la instalación, el archivo pcap se puede reproducir
sudo tcpreplay -p 1 -i lo sample_capture_v1_6.pcapng
Con este comando, los paquetes del archivo de captura se reproducen en la interfaz local (bucle) con una velocidad de 1 paquete por segundo.
Tenga en cuenta que tcpreplay solo puede reproducir paquetes en la red. Si bien la reproducción local es visible, por ejemplo, con tcpdump en el propio host, no es posible recibirlos realmente con una aplicación. Para poder usarlo con un cliente de prueba, tcpreplay necesita disponer de una interfaz física real y el cliente tendrá que ejecutarse en otro host conectado a
|
sample_capture_v1_6.pcapng |
ejemplos de instantáneas y mensajes de multidifusión |
Un complemento de disector LUA Wireshark deribit_sbe.lua se creó para permitir que la herramienta de captura y análisis de paquetes de Wireshark muestre el contenido de los paquetes de multidifusión.
El disector se ha probado con la versión 3.4.8 de Wireshark en Linux (ubuntu 20.04).
Para agregar el disector a Wireshark, copie el archivo en el directorio de «Plugins LUA personales» o 'Plugins LUA globales' que se pueden encontrar en Wireshark en 'Ayuda' -> 'Acerca de Wireshark' -> 'Carpetas'.
La carga del complemento se puede verificar haciendo clic en el «Plugins» pestaña en la misma ventana.
El complemento se asigna automáticamente a los puertos UDP 6100 y 6101; sin embargo, si se requiere la decodificación en otros puertos (por ejemplo, flujos de prueba), se deben asignar explícitamente en
Wireshark.
Una vez que se carga el complemento y los paquetes no se decodifican, Haga clic con el botón derecho en cualquiera de los paquetes y seleccione 'Decodificar como... ' desde el menú contextual. En el cuadro de diálogo, seleccione el número de puerto de destino UDP del paquete y asigne el «DERIBIT SBE» decodificador para ello.
El archivo LUA también se puede usar como muestra para comprender la decodificación del mensaje.
El deribit_multicast.xml El archivo XML contiene las definiciones de los mensajes en el formato XML SBE (consulte la especificación SBE) y se puede utilizar como referencia para crear el decodificador o como entrada para la generación de código para diferentes idiomas.
La herramienta que se puede utilizar para la generación de código (requiere la instalación de Java) ha sido creada por Real Logic. Solo se incluye para mayor comodidad y no es compatible con nosotros.
Para cualquier consulta o problema (no relacionado con posibles problemas con la definición de XML), el repositorio github del proyecto es el mejor recurso (https://github.com/real-logic/simple-binary-encoding). También se pueden encontrar versiones más recientes de la herramienta allí. Puede generar código de biblioteca a partir de la especificación XML en diferentes lenguajes de programación (c, c++, java, go, rust). La herramienta es de código abierto bajo la licencia Apache 2.0
Tenga en cuenta que la definición de XML solo se proporciona para ayudar al desarrollo del cliente, no se usa en la plataforma (y no se prueba exhaustivamente), por lo que se agradece cualquier comentario sobre cualquier problema que se encuentre en XML.
Los comandos de ejemplo se proporcionan como scripts (p. ej. generate_c.sh) como ejemplo para generar bibliotecas.
En SBE, la secuencia y el tamaño de los campos son fijos. Si un campo está marcado como opcional, solo significa que el campo tiene un «valor nulo» especial. La especificación SBE especifica los valores nulos predeterminados para los diferentes tipos de campos, a menos que «NullValue» esté definido específicamente en un campo. Para los campos enteros, el valor nulo predeterminado es 2tamaño de bits-1, para los flotantes es un valor NaN.
|
Fecha |
Versión |
Resumen |
|---|---|---|
|
6 de abril de 2022 |
1.1 |
Publicado por primera vez |
|
11 de abril de 2022 |
1.2 |
Cambio de la estructura del encabezado del mensaje (BlockLength se movió a la parte superior del encabezado). Agregue una nueva llamada a la API para recuperar el diccionario del instrumento. Mejore las descripciones de los mensajes con tipos y ejemplos de mensajes. Se actualizaron las especificaciones XML, el rastreo de muestras y el disector LUA |
|
13 de abril de 2022 |
1.3 |
Corrija el campo InstrumentID en la especificación XML, actualice las bibliotecas de código generadas |
|
2 de mayo de 2022 |
1.4 |
|
|
13 de mayo de 2022 |
1.4.1 |
- Corrige la longitud del bloque raíz de la muestra del mensaje del instrumento y proporciona un nuevo rastreo de muestra |
|
23 de mayo de 2022 |
1.4.2 |
|
|
09 de junio de 2022 |
1.4.3 |
|
|
12 de julio de 2022 |
1.5 |
|
|
14 de octubre de 2022 |
1.5.1 |
- Se agregaron nuevos tipos de mensajes SnapshotStart y SnapshotEnd |
|
3 de noviembre de 2022 |
1.5.2 |
- Se agregó un nuevo tipo de mensaje ComboLegs |
|
11 de noviembre de 2022 |
1.5.3 |
- Se agregaron nuevos tipos de mensajes PriceIndex y rfq |
|
31 de enero de 2023 |
1.5.4 |
- Se corrigió la enumeración utilizada en la solicitud de presupuesto |
|
6 de marzo de 2023 |
1.5.5 |
- Puntos añadidos |
|
6 de abril de 2023 |
1.5.6 |
- Cambie el nombre de todas las referencias a «Tipo futuro» por «Tipo de instrumento» |
|
27 de abril de 2023 |
1.5.7 |
- Agregue una explicación sobre la lista de cambios vacía en el cambio del libro de pedidos |
|
22 de mayo de 2023 |
1.5.8 |
|
|
15 de junio de 2023 |
1.6 |
|
|
20 de julio de 2023 |
1.6.1 |
|
|
2 de diciembre de 2023 |
1.6.2 |
- Actualice los documentos de asignación de canales de prueba y producción solo en el paquete de desarrollo para los nuevos canales de USDT (sin cambios en este documento, solo el número de versión actualizado) |