В чем разница между «родным segwit» и «bech32»?

Кажется, люди используют «родной segwit» и «bech32» как синонимы. Они действительно одно и то же?

Ответы (1)

TL;DR: Native segwit относится к выходным данным segwit без P2SH-обертки. Bech32 — это формат адреса, используемый для представления собственных сценариев блокировки segwit-v0.

Обернутый сегвит против нативного сегвита

Когда segwit был активирован, он представил нулевое поколение segwit, segwit-v0. Соответствующие сценарии блокировки были двух видов:

  1. Совместимые с предыдущими версиями типы выходных данных «обернутый segwit» или «вложенный segwit» заключают программу-свидетель в выходные данные Pay to Script Hash (P2SH) . Существует два варианта: P2SH-P2WPKH для одиночной подписи и P2SH-P2WSH для произвольных скриптов, включая мультиподпись. Как и все адреса P2SH , обернутые выходные данные segwit кодируются с использованием Base58Check . Обертка позволяет любым кошелькам с поддержкой P2SH отправлять на обернутые адреса segwit.
  2. Нарушающие совместимость типы вывода «родной SegWit», которые могут быть оплачены только кошельками с поддержкой SegWit. Собственные выходные данные segwit более эффективны в блочном пространстве , потому что они позволяют избежать дополнительных данных, необходимых для P2SH-оболочки, путем непосредственного разрешения программы-свидетеля. Встроенные сценарии блокировки segwit кодируются с использованием недавно представленного формата адресов bech32 (BIP-173) (для собственных выходных данных segwit версии 0).

Другое использование Bech32

Bech32 также используется для других целей, например, для кодирования счетов Lightning . Первоначально планировалось использовать Bech32 и для более поздних версий собственного вывода SegWit. Однако после того, как была обнаружена уязвимость изменчивости , и опросы показали, что многие кошельки неправильно обрабатывают отправку на более высокие версии SegWit, обсуждается измененная версия Bech32. Эта исправленная версия Bech32 будет использовать другую константу контрольной суммы, чтобы явно нарушить прямую совместимость, т.е. потребовать обновления кошельков для создания выходных данных segwit-v1. Нарушение прямой совместимости защищает кошельки от сжигания средств за счет неправильного понижения адресов segwit-v1 до адресов segwit-v0 и позволяет устранить уязвимость изменчивости.

Нативный segwit-v1 для использования Bech32m

Предлагаемый софт-форк Taproot представляет собственный тип вывода segwit-v1, Pay to Taproot (P2TR) , который будет первым собственным типом вывода segwit, использующим этот измененный формат адреса Bech32, названный «Bech32m», предложенный BIP-350 .