Глоссарий / Адреса и ключи
P2WPKH
Другие названия: адрес нативного SegWit, Pay-to-Witness-Public-Key-Hash, адрес bc1q.
- Что такое P2WPKH?
- P2WPKH переносит подпись и публичный ключ из входа в свидетель (witness), где каждый байт считается за одну единицу веса вместо четырех.
Определено в BIP-141.
Нативные выходы SegWit с одним ключом записываются как адреса bc1q из 42 символов. Скрипт блокировки занимает 22 байта, а расходование одного входа требует около 68 vbytes против примерно 148 у устаревшего эквивалента. Bitcoin Core выдает этот формат по умолчанию начиная с версии 0.20.0, а большинство других кошельков последовали за ним.
Как это работает
Выход P2WPKH не содержит опкодов в обычном смысле. Это байт 0x00, отмечающий версию свидетеля 0, за которым идет вставка 20-байтового HASH160 вашего сжатого публичного ключа: итого 22 байта, которые узлы распознают как программу свидетеля, а не исполняют как скрипт. Вход, который его расходует, оставляет поле scriptSig полностью пустым и помещает два элемента в поле свидетеля: подпись и ключ.
Экономия возникает из того, как измеряются блоки. BIP-141 определяет вес блока как базовый размер, умноженный на три, плюс общий размер, с ограничением 4 000 000 единиц веса, из чего следует, что байты вне свидетеля стоят четыре единицы каждый, а байты свидетеля стоят одну. Вход P2WPKH имеет 41 байт вне свидетеля весом 164 единицы и около 108 байтов свидетеля весом 108, всего 272 единицы. Разделите на четыре и получите 68 vbytes, за которые вы фактически платите.
Два побочных эффекта важны не меньше скидки. BIP-143 заменил алгоритм хеширования подписи так, что работа по подписанию растет линейно с числом входов, а не квадратично, и поэтому аппаратный кошелек быстро справляется с крупной транзакцией SegWit. А поскольку идентификатор транзакции больше не охватывает свидетель, третья сторона уже не может изменить подпись в пути, чтобы поменять txid.
Где это встречается
Откройте почти любой кошелек, выпущенный за последние несколько лет, и экран получения покажет строку bc1q. Кошельки выводят их из ветки BIP-84, путь m/84'/0'/0', которую SLIP-132 связывает с префиксом расширенного ключа zpub, так что резервная копия, восстановленная в другом программном обеспечении, дает те же адреса.
На сегодняшний день практически каждая форма вывода на биржах принимает bc1q. Если какая-то отказывает, она выполняет код проверки, написанный до 2017 года, и практичный ответ состоит в том, чтобы вывести в формат, который она принимает, и затем самостоятельно перевести средства дальше.
Одного адрес bc1q вам не сообщает: на что платит выход. Адрес bc1q из 42 символов представляет собой один ключ; адрес из 62 символов представляет собой скрипт. Оба относятся к версии свидетеля 0 и оба используют bech32, поэтому длина является единственным видимым отличием.
P2WPKH vs вложенный SegWit
P2WPKH и вложенный SegWit расходуют один и тот же ключ и привязаны к одному и тому же 20-байтовому хешу. Отличие состоит в обертке. Вложенный SegWit помещает эту 22-байтовую программу свидетеля внутрь выхода P2SH, чтобы адрес мог быть строкой Base58, начинающейся с 3, а 23 дополнительных байта вне свидетеля в расходующем входе весят 92 единицы, что в точности равно разнице между 91 vbytes и 68. Безопасность идентична. Вы отказываетесь примерно от трети доступной экономии на комиссии в обмен на адрес, который примет очень старое программное обеспечение.