Почему кошелек Testnet создает получающие адреса в виде хеш-адресов скриптов ( префикс 2 ) вместо «обычных» адресов с префиксом m/n ? Есть ли какая-то причина безопасности? И какой сценарий он хеширует? Я предполагал из BIP.16 случай с одной подписью:
scriptPubKey: OP_HASH160 [20-байтовый хэш {[pubkey] OP_CHECKSIG}] OP_EQUAL
Но мне не удалось получить тот самый хэш скрипта (разумеется, я знаю приватный ключ). Я попробовал следующие шаги:
$ echo [ 02b6d...открытый ключ...47f89 ] checksig > script
$ bx script-encode < скрипт | бх ша256 | бх рипмд160
046f...fb3
$ echo hash160 [ 046f...fb3 ] равно > script2
$ bx script-encode < script2 | бх ша256 | бх рипмд160 | bx base58check-encode --версия 196
2NxxxexxxxxL
(Я ожидал получить тот же результат, созданный кошельком, но они были другими).
Обратите внимание, что я точно знаю и приватный, и публичный ключи.
То, что вы видите, это адрес Segwit, встроенный в P2SH.
Он содержит хэш скрипта OP_0 [20-byte hash160 of compressed pubkey]
.
Вы можете настроить Bitcoin Core для создания устаревших адресов P2PKH (начинайте с -addresstype=legacy
). Вы также можете заставить его создавать адреса Bech32 (BIP173) с помощью -addresstype=bech32
, которые OP_0 [20-byte hash160 of compressed pubkey]
напрямую представляют скрипт. Их дешевле тратить, но не все программы поддерживают отправку на них.
Благодаря @pieter-wuille, я подтверждаю, что это встроенный адрес Segwit P2SH:
$ echo '0 [a01..pukbKeyHash..e8e]' | bx script-to-address -v 196
2Mu..xxxx..r
Или:
$ echo '0 [a01..pukbKeyHash..e8e]' > script3
$ bx script-encode < script3 | bx sha256 | bx ripemd160 | bx base58check-encode --version 196
2Mu..xxxx..r
Какой именно адрес я искал.