Как создать адрес Bech32 из открытого ключа?

Каковы шаги для создания адреса Bech32 из открытого ключа ECDSA? Биткойн-вики имеет хорошее пошаговое руководство по созданию адреса из открытого ключа, но как насчет адресов Bech32? Я прочитал BIP173, но я не понимаю, что дать в качестве ввода.

Возможно, это может вам помочь: github.com/sipa/bech32/tree/master/ref/python
@pors Я видел это репо, но не знаю, что вводить. Я понимаю, что должен использовать функцию bech32_encode, но что мне туда вставить? Открытый ключ? Хэш160? P2WSH? Как мне это создать?
Добро пожаловать в Биткойн.SE! Для @pors вы можете помочь, опубликовав свои расширенные комментарии в качестве ответа и, возможно, включив некоторую информацию о том, как использовать.
В декабре nullius создал инструмент для работы с адресами bech32 в C. Простой в использовании, код также задокументирован. См. здесь: bitcointalk.org/index.php?topic=2664728.msg27178628#msg27178628

Ответы (1)

Хорошо, я понял, как это сделать.

Для создания адреса bech32 вам нужно 3 части информации.

  • hrp: удобочитаемая часть. Это bcдля основной сети и tbдля тестовой сети
  • witver: версия свидетеля. На 0данный момент это представлено байтом, 0x00но может увеличиться, 16когда они добавят больше версий.
  • witprog: программа свидетеля. Если вам нужен адрес открытого ключа Pay-to-witness (P2WPK), который является наиболее распространенным, это 20-байтовый хеш160 сжатого открытого ключа , ripemd160(sha256(compressed_pub_key))т.е. Если вам нужен адрес Pay-to-witness-script-hash (P2WSH), это 32-байтовый sha256 scriptPubKey, который является сценарием, который должен быть оценен как True, чтобы кто-то мог потратить вывод. Подробнее об этом в BIP141

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

Я собрал небольшую чистую библиотеку Python для всех, кому интересно, как все это работает внутри.

Можете ли вы добавить сюда несколько текстовых векторов или указать на свои тестовые векторы?