Bitcoin-адрес — это не просто строка символов, а указание на тип скрипта, который определяет, как именно монеты могут быть потрачены. От типа адреса зависят размер транзакции в байтах, комиссия, совместимость с кошельками и биржами, а также доступность расширенных функций вроде мультисигнатурных схем и смарт-контрактов. За историю Bitcoin появилось три основных поколения адресов, каждое из которых решало конкретную проблему предыдущего.
Legacy-адреса, также известные как P2PKH (Pay-to-Public-Key-Hash), — оригинальный формат, заложенный в протокол Bitcoin с момента запуска сети в 2009 году. Они начинаются с единицы (
Пример Legacy-адреса:
1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2
Скрипт блокировки (scriptPubKey) в P2PKH-транзакции содержит хеш публичного ключа получателя. Чтобы потратить монеты, отправитель должен предоставить:
Оба элемента передаются в поле witness транзакции (в Legacy-формате — прямо в тело транзакции, а не в отдельную witness-секцию). Это означает, что публичный ключ и подпись занимают место в основном размере транзакции, за который считается комиссия.
Legacy-адреса до сих пор принимаются всеми кошельками и биржами, но их использование для новых транзакций нецелесообразно: комиссия выше при тех же условиях.
Segregated Witness (SegWit) — мягкий форк, активированный в августе 2017 года (BIP 141). Его основная идея: вынести witness-данные (подписи и публичные ключи) из основного тела транзакции в отдельную секцию. Это решает две задачи одновременно: устраняет transaction malleability и уменьшает эффективный размер транзакции, за который считается комиссия.
SegWit ввёл понятие weight units (весовые единицы). Основной блок данных считается с весом 4 единицы за байт, а witness-данные — 1 единица за байт. Это означает, что witness-данные «дешевле» в четыре раза.
Native SegWit-адреса, или P2WPKH (Pay-to-Witness-Public-Key-Hash), начинаются с
Пример:
bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq
Скрипт блокировки P2WPKH содержит только хеш публичного ключа (20 байт). Witness-данные (подпись и публичный ключ) передаются в отдельной секции и учитываются с пониженным весом.
Размер типичной P2WPKH-транзакции (1 вход, 1 выход): около 141 весовая единица (vbytes), что примерно на 38% меньше, чем у P2PKH. При одинаковой ставке sat/vB комиссия будет заметно ниже.
Wrapped SegWit — переходный формат, который появился до широкого распространения Native SegWit. Адрес начинается с
Пример:
3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy
Этот формат был нужен для совместимости: старые кошельки и биржи, которые не поддерживали Bech32, могли отправлять средства на P2SH-адрес, а получатель тратил их как SegWit-транзакцию. Сегодня Wrapped SegWit теряет актуальность, поскольку поддержка Native SegWit стала стандартом.
Значения приблизительные и зависят от размера подписи (DER-кодирование может давать разную длину). Но порядок соотношения стабилен.
Taproot — мягкий форк, активированный в ноябре 2021 года (BIP 340, BIP 341, BIP 342). Он вводит новый тип адреса P2TR (Pay-to-Taproot), который начинается с
Пример:
bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqzk5jj0
1. Schnorr-подписи (BIP 340).
Taproot заменяет ECDSA-подписи на подписи Шнорра. Это даёт несколько преимуществ:
2. MAST — Merkleized Abstract Syntax Tree (BIP 341).
Taproot позволяет «спрятать» сложные условия траты в дереве Меркла. При трате раскрывается только та ветка скрипта, которая фактически используется. Остальные условия остаются скрытыми. Это означает:
3. Tapscript (BIP 342).
Обновлённый скриптовый язык для Taproot-выходов. Он добавляет новые опкоды (например,
Типичная P2TR-транзакция (1 вход, 1 выход, трата по ключевому пути) занимает около 154 vbytes. Это немного больше, чем P2WPKH (~141 vbytes), из-за того, что публичный ключ в P2TR всегда 32 байта (x-координата точки на кривой), а в P2WPKH хеш ключа — 20 байт. Однако при использовании скриптового пути (например, мультисигнатура) P2TR может быть значительно компактнее, чем эквивалентная P2SH-мультисигнатура.
Taproot поддерживается Bitcoin Core начиная с версии 22.0. Большинство современных кошельков (Sparrow, Electrum, BlueWallet, Trezor, Ledger) поддерживают создание и трату P2TR-адресов. Однако некоторые биржи и старые кошельки могут ещё не поддерживать отправку на
Выбор зависит от контекста использования:
Для получения и хранения — P2TR (Taproot), если кошелёк и контрагенты поддерживают. Это наиболее современный формат с лучшей конфиденциальностью и потенциалом для сложных скриптов.
Для максимальной совместимости — P2WPKH (Native SegWit). Поддерживается практически всеми кошельками и биржами, комиссия ниже Legacy, нет проблем с совместимостью.
Для мультисигнатурных схем — P2TR со скриптовым путём. Мультисигнатура через Taproot компактнее и приватнее, чем P2SH-мультисигнатура.
Legacy (P2PKH) — только если контрагент не поддерживает SegWit. Такие случаи становятся всё более редкими.
Отправка на адрес неподдерживаемого типа. Если кошелёк или биржа не поддерживает Taproot, отправка на
Смешивание типов в одной транзакции. Bitcoin позволяет создавать транзакции с входами и выходами разных типов. Это не ошибка, но может увеличить размер транзакции, если входы Legacy-типа.
Игнорирование fee estimation. Разница в размере между Legacy и SegWit означает разницу в комиссии. Если кошелёк неправильно определяет тип адреса и считает комиссию как для Legacy, пользователь переплачивает.
Использование Wrapped SegWit без необходимости. P2SH-P2WPKH был нужен как переходный формат. Если все участники поддерживают Native SegWit, использование Wrapped SegWit только увеличивает размер транзакции без пользы.
Определить тип адреса можно по префиксу:
Для программной проверки можно использовать библиотеки вроде
Каждый этап решал конкретную проблему: P2SH добавил поддержку сложных скриптов, SegWit снизил комиссии и устранил malleability, Taproot улучшил конфиденциальность и открыл путь для более сложных смарт-контрактов.
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 только увеличивает размер транзакции без пользы.
Проверка типа адреса
Определить тип адреса можно по префиксу:
| Префикс | Тип | Кодирование |
|---|---|---|
1 | P2PKH (Legacy) | Base58Check |
3 | P2SH (может быть Wrapped SegWit или мультисигнатура) | Base58Check |
bc1q | P2WPKH или P2WSH (Native SegWit) | Bech32 |
bc1p | P2TR (Taproot) | Bech32m |
Для программной проверки можно использовать библиотеки вроде
bitcoinjs-lib (JavaScript), python-bitcoinlib (Python) или bdk (Rust). Они валидируют контрольную сумму и определяют тип скрипта.Эволюция форматов: хронология
| Год | Событие | Результат |
|---|---|---|
| 2009 | Запуск Bitcoin | P2PKH (1...) |
| 2012 | BIP 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 со скриптовым путём.
- Проверяйте контрольную сумму адреса перед отправкой — ошибка в одном символе означает потерю средств.
- Обновляйте кошелёк до актуальной версии: поддержка новых типов адресов зависит от версии ПО.
