Полное определение структуры данных «tx_witness», используемой в структуре данных «tx».

Я читаю страницу документации протокола для структуры данных «tx» и не могу найти полностью четкое определение структуры данных «tx_witness».

После таблицы 'tx_out' следует короткий комментарий, в котором говорится, что «структура TxWitness состоит из числа var_int компонентов данных-свидетелей, за которым следует (для каждого компонента данных-свидетелей) длина var_int компонента и сами необработанные данные компонента».

Может ли кто-нибудь опубликовать таблицу, подобную другим на странице документации протокола, четко определяющую, как должна формироваться структура данных «tx_witness»?

Ответы (1)

В Bitcoin Core scriptWitnessсвойство (для CTxInкласса) сериализуется из a CTransactionкак std::vector<std::vector<unsigned char> >, поэтому я могу представить, что сериализованная версия будет выглядеть примерно так:

TxWitness:

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

Компонент-свидетель:

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

Использованная литература: