Почему ваш адрес не похож на их: форматы адресов и почему переводы срываются

·6 мин. чтения·Автор: SSP Editorial Team
Обложка SSP Academy: форматы криптоадресов и несостоявшиеся переводы

Почему ваш адрес не похож на их: форматы адресов и почему переводы срываются

Рано или поздно каждый, кто хранит криптовалюту сам, попадает в один и тот же обескураживающий момент. Вы копируете свой адрес для получения, чтобы отправить себе немного биткоина, — и он не похож на адреса, которые вы видели раньше. Или биржа его отклоняет. Или вы отправляете Bitcoin Cash на нечто, выглядящее ровно как биткоин-адрес, и проводите неприятный час, выясняя, что произошло.

Ничего из этого не случайно. Форматы адресов кодируют вполне реальные сведения о том, как монеты могут быть потрачены, и как только вы научитесь их читать, путаница почти целиком испаряется.

Адрес — это набор условий траты

Полезная мысленная модель — не «адрес это номер счёта». Она такая: адрес — это сжатое описание того, что должно быть истинным, чтобы эти монеты сдвинулись.

Отправьте на адрес, начинающийся с 1, и условие будет: конкретный открытый ключ должен произвести подпись. Отправьте на адрес bc1q… длинного вида, и условием может оказаться: два конкретных ключа должны оба подписать. Та же сеть, те же деньги, совершенно разные правила — и формат адреса есть способ, которым сеть сообщает вам, какие правила действуют.

Поэтому форматы и расплодились. Каждый раз, когда биткоин обретал новый способ запирать монеты, ему требовался новый способ записывать, где они заперты.

Форматы, которые встретятся вам в биткоине

Legacy — 1… Исходный. Оплата в хеш открытого ключа: один ключ, одна подпись. Поддерживается везде и дороже всех в трате, потому что данные подписи целиком считаются в размер блока.

Скрипт — 3… Оплата в хеш скрипта. Монеты заперты не ключом, а скриптом — кворумом мультиподписи, временной блокировкой, чем угодно. Адрес — это хеш условий, поэтому снаружи вы не поймёте, каковы они. Тем же путём ради совместимости протащили и ранний SegWit.

Нативный SegWit — bc1q… Bech32. Данные подписи переехали в отдельную структуру-свидетель, что удешевило трату и починило пластичность транзакций. Bech32 пишется строчными буквами, имеет более сильную контрольную сумму, чем base58, и устроен так, чтобы опечатки обнаруживались, а не принимались молча.

Нативный SegWit бывает двух длин, и разница существенна:

  • 42 символа всего — P2WPKH. Один ключ, одна подпись.
  • 62 символа всегоP2WSH. Скрипт, например мультиподпись два из двух.

Taprootbc1p… Самый новый. Лучше приватность и дешевле сложные траты — ценой того, что некоторые старые сервисы его до сих пор не принимают.

Почему адрес SSP выглядит непривычно

Вот здесь люди и удивляются, и объяснение приятное.

SSP — это кошелёк с мультиподписью два из двух. Ваши монеты заперты не одним ключом, а скриптом, который требует подписей и от браузерного расширения, и от телефона. Значит, биткоин-адрес SSP — это P2WSH, а не P2WPKH, то есть длинная форма bc1q: 62 символа вместо привычных большинству 42.

Если вы разглядываете свой адрес и думаете, что он слишком длинный, — так и должно быть. Лишняя длина — это хеш скрипта два из двух вместо хеша одного открытого ключа. Адрес длиннее, потому что условия богаче.

Иногда об это спотыкаются старые сервисы, которые по образцу распознают только короткую форму. Это ограничение на их стороне — P2WSH десять лет, — но стоит знать, откуда берётся ошибка, потому что сообщение обычно звучит бесполезно: «неверный адрес».

Каждая сеть сделала свой выбор

SSP поддерживает несколько UTXO-сетей, и каждая записывает мультиподписные адреса по-своему:

СетьТип скрипта в SSPАдрес выглядит так
BitcoinP2WSHbc1q… (62 символа)
LitecoinP2WSHltc1q…
Bitcoin CashP2SHbitcoincash:p…
DogecoinP2SHначинается с 9 или A
ZcashP2SHt3…
RavencoinP2SHначинается с r
FluxP2SHt3…

Litecoin близко следовал устройству биткоина и сменил только человекочитаемый префикс — поэтому его адреса выглядят знакомо. Zcash и Flux используют двухбайтовую версию, что даёт характерный префикс t3 для скриптовых адресов. Dogecoin выбрал собственный байт версии, поэтому его скриптовые адреса начинаются с 9 или A — ничего похожего на привычные одноключевые D….

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

Ловушка Bitcoin Cash и зачем нужен CashAddr

Есть кусок истории, который стоит знать, потому что он реально может стоить вам денег.

Когда Bitcoin Cash отделился от биткоина в 2017 году, он унаследовал формат адреса биткоина в точности — те же байты версии, 0x00 для ключевых адресов и 0x05 для скриптовых. Legacy-адрес BCH и legacy-адрес BTC были неразличимы. Не похожи. Структурно одинаковы.

Люди постоянно слали BTC на адреса BCH и BCH на адреса BTC, потому что ни одна программа не могла их различить. Монеты не уничтожались — один и тот же приватный ключ управляет обеими, — но чтобы их вернуть, нужно было импортировать ключи в кошелёк другой сети, а многие пользователи не могли сделать это безопасно.

CashAddr стал лекарством: формат в стиле bech32 с префиксом bitcoincash:, намеренно несовместимый с биткоиновым, чтобы отправка между сетями громко проваливалась, а не тихо удавалась. Поэтому SSP показывает адреса Bitcoin Cash с полным префиксом. Выглядит многословно. Многословие здесь и есть функция.

Почему переводы срываются и что означает каждый сбой

«Неверный адрес». Обычно сбой контрольной суммы — опечатка, обрезанная вставка, строка bech32 со смешанным регистром. Bech32 нечувствителен к регистру, но регистр не должен быть смешанным; некоторые пути копирования это портят. Иногда это значит, что отправляющий сервис не поддерживает ваш формат.

«Неподдерживаемый тип адреса». Сервис адрес распознаёт, но отправлять на него не станет — как правило, старая биржа, так и не добавившая Taproot, или работающая только с короткой формой SegWit. Чинить не вам: используйте другой путь вывода или промежуточный адрес.

Совсем не та сеть. Здесь вас защищает человекочитаемый префикс bech32: bc1 и ltc1 различаются, и кошельки это проверяют. Сети на base58 рискованнее, потому что корректный адрес Dogecoin структурно корректен и в нескольких других сетях.

Отправилось, но ничего не пришло. Либо вы смотрите обозреватель не той сети, либо средства ушли на корректный адрес, который вам не принадлежит. Отзыва не существует.

Практические правила

Копируйте, никогда не набирайте вручную. Контрольная сумма есть у каждого формата именно потому, что люди ошибаются при наборе. Не заставляйте её делать работу, которой быть не должно.

Прежде всего сверьте префикс с сетью. Биткоин — это bc1, 1 или 3. Litecoin — ltc1, L или M. Bitcoin Cash — bitcoincash:. Один этот взгляд ловит дорогие ошибки.

Ожидайте, что мультиподписные адреса будут длиннее. Если вы пользуетесь SSP или любым скриптовым кошельком, длинная форма корректна. Длина — не симптом ошибки.

Отправьте сначала небольшой пробный перевод, если получатель новый, особенно на биржу и особенно при крупных суммах. Комиссия ничтожна по сравнению с альтернативой.

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

Форматы адресов выглядят произвольной мелочью ровно до того момента, когда понимаешь: каждый из них — утверждение о том, как монеты могут двигаться. Читая их так, приём средств на свой кошелёк перестаёт быть прыжком веры и становится тем, что действительно можно проверить, — а в этом и весь смысл того, чтобы держать собственные ключи.

Поделиться статьёй

Похожие статьи