Преобразование биткойн-адреса bech32 в устаревший

Я знаю, что аналогичные инструменты существуют для BCH (например, https://cashaddr.bitcoincash.org/ ). Есть ли способ преобразовать собственный биткойн- адрес segwit bech32 в устаревший формат?

Ответы (3)

Как говорит Anonymous, вы просто не можете.

Я попытаюсь выделить важную часть ответа MCCCS:

  • В Bitcoin Cash cashaddr ("bitcoincash:...", похожее на bech32, но не совсем) и устаревшие адреса ("1..." и "3...", base58) — это два разных способа представления одного и того же вывод onchain в удобочитаемом виде. Один можно преобразовать в другой, потому что результирующая транзакция будет идентичной, и получатель не может сказать, какой адрес вы использовали.

  • В Биткойне нативные адреса segwit («bc1...», bech32) и устаревшие адреса («1...» и «3...», base58) — это адреса для отдельных выходов в цепочке . Первые используются для выходов сегментации BIP141, а вторые — нет. Тот факт, что одно может быть технически преобразовано в другое, не имеет значения. Если получатель дал вам нативный segwit-адрес, значит, он ожидает транзакцию, которая платит на такой выход, и он может не распознать транзакцию, которая делает что-то еще. В некоторых случаях он может быть буквально не в состоянии получить доступ к монетам, отправленным в другое место (например, потому что он использует HSM, который может подписывать только определенные транзакции).

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

В биткойнах нет преобразования форматов адресов, и попытка сделать это приведет к потере средств.

Этот ответ посвящен различиям между форматами адресов и причинам несовместимости. Если вы не кодируете свой кошелек, не доверяйте своему кошельку в отношении распознавания разных адресов, сделанных из одного и того же открытого ключа! Не экспериментируйте ни с чем из того, что я сказал, с реальными деньгами!

В Bitcoin Cash адреса CashAddr и 1 — это разные способы кодирования хэша открытого ключа для Pay-2-Public-Key-Hash. Для проведения выходов P2PKH раскрывается публичный ключ, на который подписывается подпись. То, как сериализуется хэш открытого ключа, не влияет на то, как расходуются или создаются выходные данные . Таким образом, эти адреса являются конвертируемыми.

Вот информация Bech32 (P2WPKH), SegWit в P2SH (P2SH-P2WPKH) и 1 адрес хранится:

  • P2PKH содержит<20-byte-key-hash>
  • P2WPKH содержит<20-byte-key-hash>
  • P2SH-P2WPKH содержит хэш скрипта0 <20-byte-key-hash>

Означает ли это, что P2PKH и P2WPKH — это одно и то же? Нет, отправка денег на P2PKH и Bech32 с одним и тем же открытым ключом приведет к разным транзакциям. И то, как кошелек получателя потратит их с соответствующим приватным ключом, тоже будет другим. Но это один и тот же закрытый ключ, кошелек должен иметь возможность тратить оба! Например, когда кошелек сгенерировал адрес Bech32 , нет ничего, что требовало бы от кошелька сканирования транзакций, расходуемых на этот открытый ключ, как P2PKH или P2SH-P2WPKH . Это будет зависеть от реализации. (Кстати, в P2PKH можно использовать сжатый или несжатый открытый ключ. P2WPKH или P2SH-P2WPKH нельзя использовать с несжатым открытым ключом)

Для P2WPKH и P2SH-P2WPKH, как и в предыдущем случае, из P2WPKH вы можете создать P2SH-P2WPKH и использовать его, если кошелек получателя совместим (я не знаю о Bitcoin Core, но нет никаких причин, чтобы легкий кошелек был совместимы с этим). С другой стороны, если вы видите чей-то P2SH-P2WPKH, вы не сможете получить P2WPKH или P2PKH, пока этот адрес не будет израсходован. Это связано с однократным хешированием, добавлением нуля и повторным хэшированием. При расходовании открытый ключ (и его хеш) становятся доступными.

Резюме: Теоретически это возможно, но никакая реализация не будет совместима.

Плохой совет даже предположить, что кошельки могут тратить средства на адреса, которые они не генерировали. Люди сделали это и потеряли деньги.
Я согласен, опытные разработчики, которым, как я думал, мой ответ может быть полезен, не нуждаются в моем ответе, и пользователи могут быть направлены по ложному пути. Добавлю предупреждения.
Вы пробовали это в тестовой сети?
Ответ по-прежнему полезен разработчикам, желающим быстро понять адреса P2WPKH.