23 марта 2020

Адреса кошельков P2PKH, P2SH и SegWit – что это?

Адреса кошельков P2PKH, P2SH и SegWit – что это? Как это виляет на выбор криптовалютных кошельков? Какова скорость транзакций? Все это и многое другое чуть ниже.

При попытке разобраться в принципах работы различных криптовалют многие сталкиваются с большим количеством криптографических терминов, англоязычных аббревиатур и всякого рода названий. И если про хеширование в общих чертах кто-то что-то слышал, то Segregated Witness, Lightning network, P2SH, P2PKH – это для большинства нечто непереводимое, причем очень тесно связанное между собой, и где точка входа в это тайное знание – не понятно. В этой статье мы попробуем хотя бы немного разомкнуть этот круг и простыми словами рассказать, чем отличаются типы кошельков P2PKH, P2SH и SegWit.

В начале были P2PKH-адреса

И придумал их сам Накамото. Именного тогда в архитектуру первой криптовалюты были заложены фундаментальные особенности, которые, в своем большинстве, остаются актуальными и сегодня. Адрес-кошелька в таком формате – это результат кодирования по алгоритму Base58 строки, содержащей три фрагмента:

  1. Идентификатор сети (с ним всё просто, это шестнадцатеричное значение 0х00 для биткоин).
  2. Открытый ключ (но не простой, а после поочередного хеширования сначала по алгоритму SHA-256, затем по алгоритму RIPEMD-160).
  3. Фрагмент контрольной суммы от предыдущего фрагмента (а это ещё пара последовательных хеширований по алгоритму SHA-256).

Алгоритм кодирования Base58 – одно из полезнейших изобретений, которое позволяет преобразовывать строку из любых символов в любой кодировке в строку, содержащую только однозначно понимаемые человеком. Уверены, вы сталкивались с ситуацией, когда цифра 0 и буква О не отличаются от друг от друга. Аналогичная ситуация с буквами I (заглавная буква i) и l (строчная буква L). Так вот Base58 решает эту проблему, такие «неоднозначные» символы просто не используются. Такой подход находит свое применение не только при формировании адресов кошельков, но и, например, в сервисах сокращения ссылок.

Платой за удобство является чувствительно к регистру, то есть буквы F и f – это разные буквы по версии Base58. Это несущественный недостаток, но об этом нельзя забывать. P2PKH-Адрес биткоин-кошелька имеет вид:  

1Kb3Sx1hiXQnXZoJJUWXH3tvbdqjmhyFir

Есть буквы верхнего и нижнего регистра, цифры, все символы понятны, а начинается всегда с единицы. Почему так получается? Идентификатор сети стоял в начале строки. Он рамен нулю, поэтому после преобразования в начале строки всегда оказывается единица. Никакого противоречия, адгоритм Base58 превращает шестнадцатеричный 0 (идентификатор сети) в символ 1 (первый символ адреса кошелька).

P2SH-адреса

В 2012 году в использование были введены новые P2SH-адреса. Обновление касается, прежде всего, механизма обработки платежей, а не самих адресов. Появилась возможность создания кошельков с мультиподписью (чтобы отправить средства требуется подтверждение от нескольких владельцев ключей), снизилась комиссия за перевод для отправителя платежа.

Эти весьма актуальные нововведения не повлияли на структуру адреса кошелька, но требовалось различать кошельки с их поддержкой, и без них (так называемые «старые» P2PKH-адреса). Для этого разработчиками было принято решение на этапе генерация адреса использовать другой идентификатор сети не 0х00, а 0х05. После кодирования в Base58 идентификатор превратится в 3, поэтому все P2SH-адреса начинаются с тройки. Пример такого адреса:

3QVgQ7JNEkxrabfe9ZQBtS36sGEG58DmLt

Адрес всё также содержит цифры, почти все буквы латинского алфавита и всё также чувствителен к регистру.

SegWit-адреса

Еще более масштабное обновление – SegWit, которое заработало в 2017 году. Оно вызывало бурный общественный резонанс, был риск разделения биткоина на две равнозначные криптовалюты, непредсказуемых потрясений стоимости и прочего. В итоге все прошло благополучно, а обновление хорошо повлияло на безопасность системы, снизило размеры комиссии, скорость обработки транзакций, а также добавило возможность проведения дальнейших серьезных изменений. Но изменения коснулись и формата записи адресов. Теперь вместо Base58 при генерации используется алгоритм Bech32, который еще больше ограничивает количество допустимых для использования символов (и в данном случае это хорошо). Все символы теперь в одном регистре, а цифра 1 – служебный разделитель.  

Если сильно упростить, то SegWit-адрес включает в себя три фрагмента:

  1. Идентификатор сети (bc1 в дальнейшем уже не подвергается преобразованию).
  2. Адрес кошелька.
  3. Цифра 1, которая служит разделителем между вторым и четвертым фрагментом.
  4. Контрольная сумма.

Фрагменты 2, 3 и 4 подвергаются кодированию по алгоритму Bech32, а идентификатор добавляется без изменения, то есть адрес в итоге содержит одну единицу, доставшуюся от идентификатора. Пример SegWit-адреса:

bc1rt6rnd3w2uu82wzkl3fhqq263ch37w6lq5sue7

Основной недостаток такие адресов – это отсутствие их поддержки со стороны некоторых сервисов – старых кошельков, некоторых бирж и т.д.

Транзакции между различными типами кошельков как правило проходят благополучно, но создать себе SegWit-адрес можно не в каждом сервисе.

 

Какой кошелек в итоге выбрать?

Команда разработчиков EMCD.io рекомендует использовать SegWit-кошельки. 

Во-первых, это безопаснее — такие кошельки устойчивее сразу к нескольким типам атак.

Во-вторых, это дешевле — стоимость транзакции ниже, по сравнению с другими типами кошельков.

В-третьих, это быстрее — транзакции обрабатывается быстрее, так как их размер меньше.

В-четвертых, SegWit-кошельки совместимы со всеми остальными и вы можете отправлять из них средства на любые другие.

И, наконец, SegWit — это реальность сегодняшнего и даже завтрашнего дня, это прогресс и вклад в развитие сети биткоина. Именно такие кошельки смогут получить преимущества от всех последующих обновлений. 

 

Команда  разработки майнинг пула emcd.io эксклюзивно для forklog hub.

 

Обсудить в Discord!

emcd
  • Зарегистрирован: 22 мая 2012 г.
  • Локация:London/United Kingdom
  • Сайт:penroseisparty.com