Definición completa de la estructura de datos 'tx_witness' utilizada en la estructura de datos 'tx'

Estoy leyendo la página de documentación del protocolo para la estructura de datos 'tx' y no puedo encontrar una definición completamente clara de la estructura de datos 'tx_witness'.

Después de la tabla 'tx_out', hay un breve comentario que indica que "La estructura TxWitness consta de un recuento var_int de componentes de datos testigo, seguido de (para cada componente de datos testigo) una longitud var_int del componente y los datos del componente sin procesar".

¿Alguien podría publicar una tabla, similar a otras en la página de documentación del protocolo, que defina claramente cómo se debe formar una estructura de datos 'tx_witness'?

Respuestas (1)

En Bitcoin Core, la scriptWitnesspropiedad (para la CTxInclase) se serializa de a CTransactiona std::vector<std::vector<unsigned char> >, por lo que me imagino que la versión serializada se vería así:

TxTestigo:

+------------+-------------------------+------------------------+
| Field Size |        Description      |       Data Type        |
+------------+-------------------------+------------------------+
| 0+         | witness_component count | var_int                |
| ?          | witness_components      | witness_component[]    |
+------------+-------------------------+------------------------+

Componente de testigo:

+------------+------------------+-----------+
| Field Size |   Description    | Data Type |
+------------+------------------+-----------+
| 0+         | component length | var_int   |
| ?          | component        | uchar[]   |
+------------+------------------+-----------+

Referencias: