понимание адресов bech32 / вопрос BIP173

Я пытаюсь понять код из BIP173 . Я прочитал BIP, ссылки на RFC3548 или z-base-32, предложение base32 Марка Фриденбаха и несколько сообщений здесь.

Q1: как интерпретировать обработку скрипта?

Я думал понять, что bech32 — это представление адреса (кодирование хэша открытого ключа), и к скриптингу отношения не имеет. Я запутался, в разделе примеров написано:

Во всех примерах используется открытый ключ 0279BE66... ​​Примеры P2WSH используются <key OP_CHECKSIG>как скрипт.

В std tx у меня был бы sigscript с подписью и, например, pubkey. Итак, для расходного tx проверяется, что публичный ключ соответствует подписи. Верно ли то же самое для адреса bech32 (кроме того, что он находится в разделе свидетеля)? Есть ли пример с multisig tx только с адресами bech32?

Q2: что такое строка "GEN = [0x3b6a57b2..."?

В разделе Спецификация/Контрольная сумма написано:

def bech32_polymod(values):
  GEN = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3]
  ...

Мне интересно, что делают эти значения, откуда они берутся? Я также просмотрел код C, но дальнейших объяснений нет. Где я могу найти его значение?

Выбор значений намного лучше описан в биткойн-реализации bech32 здесь, стоит прочитать: github.com/bitcoin/bitcoin/blob/master/src/bech32.cpp
Я отвечаю на первый вопрос ниже. Я думаю, что второй вопрос не имеет отношения к делу и, вероятно, должен быть перенесен в отдельную ветку.
Спасибо, на 2-й вопрос в настоящее время отвечают ваши (?) Комментарии в файле cpp, на который ссылается MeshCollider. Если потребуется, подниму еще один. Теперь читаем ниже :-)

Ответы (1)

как интерпретировать обработку скрипта?

Чего вам не хватает, так это того, что BIP173 — это не способ кодирования открытых ключей или скриптов. Это способ кодирования выходных данных транзакций SegWit. Что представляют собой эти выходные данные и что они означают, в настоящее время находятся в BIP141 и BIP143, но со временем могут измениться без изменения BIP173.

Все выходы транзакций segwit (текущие и будущие) имеют следующую структуру:

  • один код операции между OP_0 и OP_16 (числовое значение которого мы называем версией-свидетелем)
  • нажатие массива байтов между 2 и 40 байтами (которое мы называем программой-свидетелем).

BIP173 просто кодирует номер версии-свидетеля и программу-свидетель. Не больше, не меньше. Его не волнует, что означают эти вещи.

В настоящее время определены 2 типа собственных выходов segwit:

  • P2WPKH: платите за хэш публичного ключа. Версия-свидетель — 0, а программа-свидетель — 20-байтовый RIPE160(SHA256(pubkey)).
  • P2WSH: платите за хэш скрипта-свидетеля. Версия-свидетель — 0, а программа-свидетель — 32-байтовый SHA256 (сценарий).

Адреса Segwit, определенные в BIP173, позволяют кодировать два вышеуказанных типа, а также все потенциальные будущие типы вывода свидетелей, поскольку они просто кодируют номер версии и программные байты, какими бы они ни были.

В некоторых примерах в BIP используются реальные версии-свидетели и программы этих двух типов, и для пояснения перечислены ключи и сценарии. Но BIP173 на самом деле все равно, что они из себя представляют.

Чтобы узнать, как в segwit осуществляются платежи по открытым ключам и скриптам с мультиподписью, посмотрите BIP141 и BIP143.