Типы адресов Bitcoin: Legacy, SegWit и Taproot — чем отличаются и какой выбрать

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

Legacy (P2PKH) — первый формат​


Legacy-адреса, также известные как P2PKH (Pay-to-Public-Key-Hash), — оригинальный формат, заложенный в протокол Bitcoin с момента запуска сети в 2009 году. Они начинаются с единицы (1) и используют Base58Check-кодирование.

Пример Legacy-адреса:

1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2

Как устроен P2PKH​


Скрипт блокировки (scriptPubKey) в P2PKH-транзакции содержит хеш публичного ключа получателя. Чтобы потратить монеты, отправитель должен предоставить:

  • публичный ключ, соответствующий хешу;
  • подпись, созданную приватным ключом.

Оба элемента передаются в поле witness транзакции (в Legacy-формате — прямо в тело транзакции, а не в отдельную witness-секцию). Это означает, что публичный ключ и подпись занимают место в основном размере транзакции, за который считается комиссия.

Ограничения Legacy​


  • Размер транзакции. Подпись и публичный ключ передаются целиком в основной части транзакции. Типичная P2PKH-транзакция с одним входом и одним выходом занимает около 226 байт.
  • Отсутствие разделения witness-данных. До активации SegWit все данные транзакции (включая подписи) хранились в одном блоке данных. Это создавало проблему transaction malleability: третья сторона могла изменить подпись в неподтверждённой транзакции, поменяв её txid, что ломало цепочки зависимых транзакций.
  • Нет поддержки расширенных скриптов. P2PKH не поддерживает мультисигнатуру, timelock-скрипты и другие сложные условия напрямую.

Legacy-адреса до сих пор принимаются всеми кошельками и биржами, но их использование для новых транзакций нецелесообразно: комиссия выше при тех же условиях.

SegWit — разделение данных и снижение комиссий​


Segregated Witness (SegWit) — мягкий форк, активированный в августе 2017 года (BIP 141). Его основная идея: вынести witness-данные (подписи и публичные ключи) из основного тела транзакции в отдельную секцию. Это решает две задачи одновременно: устраняет transaction malleability и уменьшает эффективный размер транзакции, за который считается комиссия.

SegWit ввёл понятие weight units (весовые единицы). Основной блок данных считается с весом 4 единицы за байт, а witness-данные — 1 единица за байт. Это означает, что witness-данные «дешевле» в четыре раза.

Native SegWit (P2WPKH) — bc1q​


Native SegWit-адреса, или P2WPKH (Pay-to-Witness-Public-Key-Hash), начинаются с bc1q и используют кодирование Bech32 (BIP 173).

Пример:

bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq

Скрипт блокировки P2WPKH содержит только хеш публичного ключа (20 байт). Witness-данные (подпись и публичный ключ) передаются в отдельной секции и учитываются с пониженным весом.

Размер типичной P2WPKH-транзакции (1 вход, 1 выход): около 141 весовая единица (vbytes), что примерно на 38% меньше, чем у P2PKH. При одинаковой ставке sat/vB комиссия будет заметно ниже.

Wrapped SegWit (P2SH-P2WPKH) — 3...​


Wrapped SegWit — переходный формат, который появился до широкого распространения Native SegWit. Адрес начинается с 3 и использует P2SH-обёртку вокруг P2WPKH-скрипта.

Пример:

3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy

Этот формат был нужен для совместимости: старые кошельки и биржи, которые не поддерживали Bech32, могли отправлять средства на P2SH-адрес, а получатель тратил их как SegWit-транзакцию. Сегодня Wrapped SegWit теряет актуальность, поскольку поддержка Native SegWit стала стандартом.

Сравнение размеров и комиссий​


Тип адресаФорматПримерный размер (1 вход, 1 выход)Относительная комиссия
P2PKH (Legacy)1...~226 vbytesБазовая
P2SH-P2WPKH (Wrapped)3...~167 vbytes~74% от Legacy
P2WPKH (Native SegWit)bc1q...~141 vbytes~62% от Legacy

Значения приблизительные и зависят от размера подписи (DER-кодирование может давать разную длину). Но порядок соотношения стабилен.

Taproot (P2TR) — bc1p​


Taproot — мягкий форк, активированный в ноябре 2021 года (BIP 340, BIP 341, BIP 342). Он вводит новый тип адреса P2TR (Pay-to-Taproot), который начинается с bc1p и использует кодирование Bech32m (BIP 350).

Пример:

bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqzk5jj0

Что даёт Taproot​


1. Schnorr-подписи (BIP 340).

Taproot заменяет ECDSA-подписи на подписи Шнорра. Это даёт несколько преимуществ:

  • Линейность. Подписи от нескольких участников мультисигнатурной схемы можно агрегировать в одну. Для наблюдателя мультисигнатурная транзакция 3-из-5 выглядит identically обычной транзакции с одним ключом — одинаковый размер, одинаковая структура.
  • Конфиденциальность. Поскольку мультисигнатура неотличима от одиночной подписи, сложные скрипты не раскрывают свою структуру в блокчейне.
  • Безопасность. Подписи Шнорра имеют доказуемую безопасность в модели случайного оракула и не подвержены проблеме transaction malleability на уровне подписи.

2. MAST — Merkleized Abstract Syntax Tree (BIP 341).

Taproot позволяет «спрятать» сложные условия траты в дереве Меркла. При трате раскрывается только та ветка скрипта, которая фактически используется. Остальные условия остаются скрытыми. Это означает:

  • мультисигнатура, timelock, hashlock и другие условия могут сосуществовать в одном адресе;
  • при трате по самому простому пути (одна подпись) транзакция выглядит как обычная P2TR-транзакция с одним ключом;
  • размер транзакции не растёт пропорционально количеству заложенных условий.

3. Tapscript (BIP 342).

Обновлённый скриптовый язык для Taproot-выходов. Он добавляет новые опкоды (например, OP_CHECKSIGADD для мультисигнатурных схем) и убирает некоторые ограничения оригинального Bitcoin Script.

Размер и комиссия P2TR​


Типичная P2TR-транзакция (1 вход, 1 выход, трата по ключевому пути) занимает около 154 vbytes. Это немного больше, чем P2WPKH (~141 vbytes), из-за того, что публичный ключ в P2TR всегда 32 байта (x-координата точки на кривой), а в P2WPKH хеш ключа — 20 байт. Однако при использовании скриптового пути (например, мультисигнатура) P2TR может быть значительно компактнее, чем эквивалентная P2SH-мультисигнатура.

ТипРазмер (1 вход, 1 выход)Примечание
P2WPKH~141 vbytesОдиночная подпись
P2TR (key path)~154 vbytesОдиночная подпись, Schnorr
P2TR (script path)Зависит от скриптаМожет быть компактнее P2SH-аналогов

Совместимость Taproot​


Taproot поддерживается Bitcoin Core начиная с версии 22.0. Большинство современных кошельков (Sparrow, Electrum, BlueWallet, Trezor, Ledger) поддерживают создание и трату P2TR-адресов. Однако некоторые биржи и старые кошельки могут ещё не поддерживать отправку на bc1p-адреса. Перед использованием стоит убедиться, что контрагент принимает Taproot.

Какой тип адреса выбрать​


Выбор зависит от контекста использования:

Для получения и хранения — P2TR (Taproot), если кошелёк и контрагенты поддерживают. Это наиболее современный формат с лучшей конфиденциальностью и потенциалом для сложных скриптов.

Для максимальной совместимости — P2WPKH (Native SegWit). Поддерживается практически всеми кошельками и биржами, комиссия ниже Legacy, нет проблем с совместимостью.

Для мультисигнатурных схем — P2TR со скриптовым путём. Мультисигнатура через Taproot компактнее и приватнее, чем P2SH-мультисигнатура.

Legacy (P2PKH) — только если контрагент не поддерживает SegWit. Такие случаи становятся всё более редкими.

Типичные ошибки при работе с адресами​


Отправка на адрес неподдерживаемого типа. Если кошелёк или биржа не поддерживает Taproot, отправка на bc1p-адрес приведёт к потере средств или ошибке. Всегда проверяйте поддержку формата перед отправкой.

Смешивание типов в одной транзакции. Bitcoin позволяет создавать транзакции с входами и выходами разных типов. Это не ошибка, но может увеличить размер транзакции, если входы Legacy-типа.

Игнорирование fee estimation. Разница в размере между Legacy и SegWit означает разницу в комиссии. Если кошелёк неправильно определяет тип адреса и считает комиссию как для Legacy, пользователь переплачивает.

Использование Wrapped SegWit без необходимости. P2SH-P2WPKH был нужен как переходный формат. Если все участники поддерживают Native SegWit, использование Wrapped SegWit только увеличивает размер транзакции без пользы.

Проверка типа адреса​


Определить тип адреса можно по префиксу:

ПрефиксТипКодирование
1P2PKH (Legacy)Base58Check
3P2SH (может быть Wrapped SegWit или мультисигнатура)Base58Check
bc1qP2WPKH или P2WSH (Native SegWit)Bech32
bc1pP2TR (Taproot)Bech32m

Для программной проверки можно использовать библиотеки вроде bitcoinjs-lib (JavaScript), python-bitcoinlib (Python) или bdk (Rust). Они валидируют контрольную сумму и определяют тип скрипта.

Эволюция форматов: хронология​


ГодСобытиеРезультат
2009Запуск BitcoinP2PKH (1...)
2012BIP 16 (P2SH)Адреса 3... для мультисигнатуры и сложных скриптов
2017Активация SegWit (BIP 141)P2WPKH (bc1q...), P2SH-P2WPKH (3...)
2021Активация Taproot (BIP 340/341/342)P2TR (bc1p...), Schnorr-подписи, MAST

Каждый этап решал конкретную проблему: P2SH добавил поддержку сложных скриптов, SegWit снизил комиссии и устранил malleability, Taproot улучшил конфиденциальность и открыл путь для более сложных смарт-контрактов.

Практический чек-лист​


  • Перед отправкой убедитесь, что получатель поддерживает формат адреса.
  • Для новых кошельков выбирайте P2TR или P2WPKH.
  • Не используйте Legacy для новых транзакций, если нет ограничений совместимости.
  • При мультисигнатурных схемах предпочитайте P2TR со скриптовым путём.
  • Проверяйте контрольную сумму адреса перед отправкой — ошибка в одном символе означает потерю средств.
  • Обновляйте кошелёк до актуальной версии: поддержка новых типов адресов зависит от версии ПО.

Источники​


 
Назад
Верх Низ