Перейти к содержимому
buybitcoinsmart

Глоссарий / Адреса и ключи

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. Безопасность идентична. Вы отказываетесь примерно от трети доступной экономии на комиссии в обмен на адрес, который примет очень старое программное обеспечение.

Не путать с

Часто задаваемые вопросы

bc1q и нативный SegWit означают одно и то же?

Да, для кошельков с одним ключом. Адрес bc1q из 42 символов представляет собой выход P2WPKH, нативный формат SegWit для одного ключа. Адрес bc1q из 62 символов тоже является нативным SegWit, но платит на скрипт, а не на ключ.

Сколько на самом деле экономит нативный SegWit?

Примерно половину стоимости расходования. Вход P2WPKH весит 272 единицы веса, что составляет 68 vbytes, против примерно 148 vbytes у устаревшего входа. Экономия проявляется при расходовании, а не при получении.

Читайте далее

Связанные термины

Еще в разделе «Адреса и ключи»

Читать эту страницу на английском