Глоссарий / Адреса и ключи
Вложенный SegWit
Другие названия: Nested SegWit, Wrapped SegWit, P2SH-P2WPKH, адрес 3.
- Что такое вложенный SegWit?
- Вложенный SegWit упаковывает хеш ключа нативного SegWit в адрес P2SH, покупая совместимость с программами, которые не умели читать строки bc1, примерно за 23 дополнительных vbyte на вход.
Определено в BIP-49.
В 2017 году почти ни одна биржа не умела разбирать адрес bech32, поэтому BIP-141 разрешил разместить программу свидетеля внутри обычного выхода pay to script hash. Для отправителя результат выглядит как любой другой адрес, начинающийся с 3, а расходование занимает около 91 vbyte против 148 для устаревшего входа и 68 для простого bc1q. Это был мост, и переход по нему открыт уже много лет.
Как это работает
Выход вложенного SegWit представляет собой ничем не примечательный выход P2SH: OP_HASH160, 20-байтовый хеш, OP_EQUAL. Необычно то, что стоит за хешем. Скрипт погашения на самом деле вовсе не скрипт, а сама 22-байтовая программа свидетеля: байт версии 0x00, за которым идет вставка 20-байтового HASH160 вашего сжатого публичного ключа.
Поэтому при расходовании задействованы оба мира. В scriptSig находится ровно один элемент, та самая 22-байтовая программа, и он удовлетворяет проверке P2SH. Подпись и публичный ключ уходят в свидетель, где получают скидку. С учетом кода операции вставки scriptSig дает 23 байта, не относящихся к свидетелю, с весом 92 единицы, а 92, деленное на четыре, составляет весь штраф в 23 vbyte по сравнению с нативным SegWit.
Кошельки держат такие адреса на собственной ветке. BIP-49 назначает путь производных ключей m/49'/0'/0', а SLIP-132 дал этой ветке префикс расширенного ключа ypub, поэтому при восстановлении резервной копии появляются адреса, начинающиеся с 3, а не bc1q. Если при восстановлении указать неверный префикс, кошелек покажется пустым, хотя сид-фраза верна.
Где это встречается
Любой экран пополнения или вывода средств, где "SegWit" и "Native SegWit" предлагаются как отдельные варианты, предлагает вложенный и нативный форматы именно в таком порядке. Экраны настройки счетов Ledger и Trezor делают то же самое. Биржи, которые приняли SegWit рано, стандартизировались на вложенном формате, и многие так и не изменились, поэтому значительная часть кастодиального холодного хранения до сих пор находится за адресами, начинающимися с 3.
Переход на нативный SegWit является ончейн-транзакцией, а не изменением настроек, потому что два формата происходят от разных веток одной и той же сид-фразы. Сделайте это, когда комиссии низкие, сначала отправьте небольшой пробный перевод, а затем проверьте, что ваш кошелек показывает счет m/84'/0'/0'. Разницы в безопасности между ними нет, так что спешить некуда. Выбор касается только комиссий в сравнении с совместимостью, а совместимость перестала быть дефицитом.
Вложенный SegWit vs адрес P2SH
Вложенный SegWit является одним из видов адреса P2SH, и ончейн их невозможно отличить друг от друга до момента расходования. Строка, начинающаяся с 3, может содержать 22-байтовую программу свидетеля, скрипт погашения мультиподписи 2 из 3 или условие восстановления с блокировкой по времени, и неизрасходованный выход ничего не выдает. Когда-то эта непрозрачность считалась преимуществом для приватности. На практике теперь это означает, что обозреватель блоков не может сказать вам, чем вы владеете, а отправитель не может предупредить вас, что опустошить этот адрес будет стоить дороже, чем адрес bc1q.