В этой статье рассматриваются методы получения биткоина ончейн, которые были внедрены в протокол по мере его развития.
Перевод работы Тома Хонзика подготовлен Тони⚡️. Поддержать проект.
Если вы активно используете Биткоин, то наверняка замечали множество различных видов адресов. Возможно, вы сталкивались с аббревиатурами, обозначающими разные способы расходования монет. Эти способы оплаты начинаются с символов “P2” (от англ. “pay to” - “заплатить на”), например P2PKH или P2WSH. Сегодня мы рассмотрим все методы получения биткоина ончейн, которые были внедрены в протокол по мере его развития, и объясним некоторые существенные различия, которые делают каждый метод уникальным.
Сравнительная таблица доступна здесь.
P2PK #
Отправка на публичный ключ (Pay-to-Public-Key) – это метод передачи биткоина, который не предполагает указания адреса. P2PK был первым типом, который Сатоши внедрил для передачи монет. Как следует из названия, биткоин отправляется непосредственно на публичный ключ получателя. Первая передача биткоина, когда Сатоши Накамото отправил монеты Хэлу Финни в блоке номер 170, была проведена с использованием P2PK.
P2PK больше не используется, поскольку это более дорогой, менее приватный и не самый безопасный способ передачи биткоина.
Интересные факты
Первое появление | Блок 0 - 3 января 2009 г. |
Пример получателя | 04678afdb0fe5548271967f…384df7ba0b8d578a4c702b6bf11d5 |
Текущий объем хранящихся монет | ~ 1.7 млн BTC или 9% |
Статус | Устаревший |
P2PKH #
Отправка на хеш публичного ключа (Pay-to-Public-Key-Hash) была доступна с самого начала существования Биткоина. Этот вид транзакции впервые был осуществлён в блокчейне менее чем через две недели после создания генезис-блока. P2PKH предлагает ряд усовершенствований по сравнению с P2PK, в частности, использует адрес вместо самого публичного ключа. Плюс адресов состоит в том, что они содержат контрольную сумму, которая помогает избежать опечаток и потери биткоинов.
Адреса P2PKH обычно состоят из 34 или 33 символов (но теоретически могут состоять и из 26 символов) и кодируются в формате Base58. Они начинаются с префикса 1 и на связанных с ними ключах в настоящее время хранится 43% добытых биткоинов. По этому параметру P2PKH обходит любой другой тип расходования монет.
Создание P2PKH-адреса предполагает хеширование публичного ключа через функции SHA-256 и RIPEMD-160. Это сокращает объем данных, что, в свою очередь, позволяет экономить место в блоке и снижает транзакционные комиссии. Это также обеспечивает дополнительную защиту приватного ключа от обнаружения злоумышленниками, помимо использования эллиптической кривой secp256k1, которая уже считается неприступной.
Интересные факты
Первое появление | Блок 728 - 16 января 2009 г. |
Префикс | 1 |
Пример получателя | 12higDjoCCNXSA95xZMWUdPvXNmkAduhWv |
Кодировка | Base58 |
Количество символов | 26 - 34 |
Текущее предложение | ~ 8.3 млн BTC или 43% |
Статус | Популярность падает |
P2MS #
Отправка на кошелек с мультиподписью (Pay-to-Multisig) - это простой тип транзакций, который был актуален только в течение короткого времени и никогда не использовался для хранения более 100 биткоинов одновременно. Тем не менее, P2MS является частью истории Биткоина.
P2MS был введен в качестве стандартного скрипта (сценария расходования) в начале 2012 года в соответствии с BIP11. Однако этот тип транзакций страдал от тех же проблем, что и P2PK, - раскрывал открытые ключи, так как для получения монет использовались ключи, а не адреса. Кроме того, он ограничивал количество публичных ключей в мультисиг-кворуме тремя. В течение нескольких месяцев P2MS заменили альтернативным методом получения биткоина в мультисиг-схеме под названием P2SH.
Интересные факты
Первое появление | Блок 164467 - 29 января 2012 г. |
Пример получателя | Несколько публичных ключей, как в P2PK |
Текущее предложение | ~ 43 BTC или 0.0002% |
Статус | Устаревший |
P2SH #
Оплата на хеш скрипта (Pay-to-Script-Hash) была введена в виде софтфорка в соответствии с BIP 16 1 апреля 2012 г. Как и большинство форков, история его появления очень интересна. P2SH во многом схож с P2PKH. Основное отличие заключается в том, что адрес создается путем хеширования скрипта погашения, а не публичного ключа.
Скрипт погашения является закодированной инструкцией, которая определяет, как полученные на адрес P2SH монеты, могут быть потрачены в будущем. Здесь может быть множество вариантов, включая несколько различных публичных ключей. Детали скрипта определяет получатель, а не отправитель. Инструкции по расходованию средств не публикуются до тех пор, пока биткоины не будут потрачены.
Хотя опытные пользователи могут создавать сложные скрипты, наиболее часто P2SH используется для создания адресов Nested SegWit (о них речь пойдет ниже) и мультисиг-кошельков. Например, скрипт может включать три публичных ключа и указывать, что подписи любых двух из трех указанных приватных ключей могут расходовать биткоин. Таким образом создается мультисиг-адрес 2-из-3.
Длина P2SH-адресов составляет ровно 34 символа, и они начинаются с префикса 3, как это предусмотрено BIP 13. До софтфорка, состоявшегося 1 апреля, несколько разработчиков отправляли транзакции, экспериментируя с этим префиксом. Первая из подобных транзакций содержится в блоке 170052.
Интересные факты
Первое появление | Блок 174717 - 7 апреля 2012 г. |
Префикс | 3 |
Пример получателя | 342ftSRCvFHfCeFFBuz4xwbeqnDw6BGUey |
Текущее предложение | ~ 4,6 млн BTC или 24% |
Кодировка | Base58 |
Количество символов | 34 |
Статус | Популярность падает |
P2WPKH #
Оплата на свидетельские данные хеша публичного ключа (Pay-to-Witness-Public-Key-Hash) - первый тип адресов, появившийся в Биткоине после софтфорка SegWit в августе 2017 года. История этих событий описана в книге “Война за размер блока”, написанной Джонатаном Биром.
P2WPKH - это SegWit-вариант P2PKH. Выбрав этот тип адреса вместо старых адресов P2PKH вы сэкономите на транзакционных комиссиях.
Адреса SegWit сильно отличаются от устаревших типов адресов (Legacy), поскольку согласно BIP173 они используют кодировку Bech32 вместо Base58. Что особенно важно, в Bech32 отсутствуют заглавные буквы. Адреса P2WPKH можно идентифицировать по префиксу bc1q и длине строки, равной 42 символам.
Интересные факты
Первое появление | Блок 481824 - 23 августа 2017 г. |
Префикс | bc1q |
Пример получателя | bc1q34aq5drpuwy3wgl9lhup9892qp6svr8ldzyy7c |
Кодировка | Bech32 |
Количество символов | 42 |
Текущее предложение | ~ 3,8 млн BTC или 20% |
Статус | Популярность растет |
P2WSH #
Оплата на свидетельские данные хеша скрипта (Pay-to-Witness-Script-Hash) - это SegWit-вариант P2SH. Основное преимущество P2WSH перед P2SH заключается в том, что он позволяет снизить комиссию за транзакции, а основная причина использования хеша скрипта вместо хеша публичного ключа заключается в возможности использования схем мультисиг.
Как и P2WPKH, адрес P2WSH начинается с префикса bc1q. Однако его строка содержит больше символов - ровно 62. В отличие от рассмотренных до сих пор типов адресов, адреса P2WSH создаются только с использованием функции хеширования SHA-256, не прибегая к RIPEMD-160. Обход хеширования через RIPEMD-160 обусловил увеличение количества символов; это было сделано, чтобы обеспечить дополнительную защиту от (хоть и весьма тонкой и крайне маловероятной) атаки на схемы мультисиг.
Интересные факты
Первое появление | Блок 481824 - 23 августа 2017 г. |
Префикс | bc1q |
Пример получателя | bc1qeklep85ntjz4605drds6aww9u0qr46qzrv5xswd35uhjuj8ahfcqgf6hak |
Кодировка | Bech32 |
Количество символов | 62 |
Текущее предложение | ~ 0.8M BTC или 4% |
Статус | Популярность растет |
Nested SegWit (P2SH-P2WPKH и P2SH-P2WSH) #
Nested SegWit (также известный как Wrapped SegWit) технически не является отдельным типом адресов. Тем не менее, это уникальный способ использования ранее рассмотренных вариантов, принесший в свое время значительную пользу биткоин-сообществу.
Когда произошел софтфорк SegWit, не все биткоин-узлы, программное обеспечение и сервисы сразу же обновились для поддержки новых типов адресов Native SegWit - P2WPKH и P2WSH. Только узлы, обновившие свое ПО, могли отправлять монеты на эти адреса. Это означало, что те, кто хотел иметь возможность получать биткоины от любого участника сети (в том числе и от тех, кто не обновился), пока не могли использовать кошелек Native SegWit. Однако, поскольку SegWit предлагал более низкие комиссии за транзакции, многие стремилось начать его использовать.
Хитрым решением стало использование транзакций P2SH. Организации, еще не внедрившие SegWit, могли отправлять биткоины на адреса P2SH, которые, как уже говорилось выше, создаются с помощью скрипта погашения, содержащего инструкции по дальнейшему расходованию монет. Как оказалось, эти инструкции могут включать в себя новую модель расходования SegWit, предоставляя пользователям возможность снизить комиссии. Поэтому P2SH-адреса, использующие этот трюк, стали называться Nested SegWit и сыграли значительную роль в процессе принятия этого обновления.
Внешне адреса Nested SegWit неотличимы от других P2SH-адресов, поэтому количество биткоинов, хранящихся этим способом, неизвестен. Кроме того, поскольку все современные инструменты для работы с Биткоином теперь могут отправлять их непосредственно на адреса Native SegWit, веских причин для использования Nested SegWit больше нет.
Интересные факты
Первое появление | Неизвестно |
Префикс | 3 |
Пример получателя | Тот же, что и у P2SH |
Кодировка | Base58 |
Количество символов | 62 |
Текущее предложение | Неизвестно (подмножество P2SH) |
Статус | Устаревший |
P2TR #
Оплата на Тапрут-адрес (Pay-to-Taproot) - это самый новый тип адресов, который стал доступен благодаря софтфорку Taproot в ноябре 2021 года. На момент написания статьи уровень распространения P2TR остается довольно низким. Некоторые программные продукты и сервисы, использующие Биткоин, всё еще работают над его внедрением. Со списком ПО и бизнесов, поддерживаюх Taproot, можно ознакомиться здесь.
В то время как P2WPKH и P2WSH известны как SegWit V0, P2TR считается SegWit V1. Примечательно, что в P2TR используется алгоритм цифровой подписи Шнорра в отличие от более ранних типов расходования биткоина, полагающихся на формат ECDSA. Подписи Шнорра обладают рядом преимуществ, включая дополнительное снижение транзакционных комиссий и улучшение приватности.
Говоря о приватности, благодаря объединению ключей и подписей Шнорра мультисиг-адреса неотличимы от адресов с одной подписью, а условия расходования средств для P2TR-адреса никогда не раскрываются публично. Создатель адреса может даже включить в него несколько настраиваемых скриптов погашения для последующей траты монет.
Адреса P2TR состоят из 62 символов и используют кодировку Bech32m - несколько модифицированную версию Bech32, описанную в BIP 350. Адреса P2TR можно идентифицировать по уникальному префиксу bc1p.
Интересные факты
Первое появление | Блок 709632 - 13 ноября 2021 г. |
Префикс | bc1p |
Пример получателя | bc1pxwww0ct9ue7e8tdnlmug5m2tamfn7q06sahstg39ys4c9f3340qqxrdu9k |
Кодировка | Bech32m |
Количество символов | 62 |
BTC на адресах | ~ 0,02M BTC или 0.1% |
Статус | Популярность растет |
Сравнительная таблица #
Тип | Первое появление | BTC на адресах | Использование | Кодировка | Префикс | Символы |
---|---|---|---|---|---|---|
P2PK | янв 2009 | 9% (1.7M) | Устарел | - | - | - |
P2PKH | янв 2009 | 43% (8.3M) | Спад | Base58 | 1 | 26 - 34 |
P2MS | янв 2012 | Незначительно | Устарел | - | - | |
P2SH | апр 2012 | 24% (4.6M) | Спад | Base58 | 3 | 34 |
P2WPKH | авг 2017 | 20% (3.8M) | Рост | Bech32 | bc1q | 42 |
P2WSH | авг 2017 | 4% (0.8M) | Рост | Bech32 | bc1q | 62 |
P2TR | ноя 2021 | 0.1% (0.02M) | Рост | Bech32m | bc1p | 62 |