Можно ли преобразовать адрес из p2pkh в p2sh?

Можно ли преобразовать адрес p2pkh в адрес p2sh?

Кроме того, будет ли баланс адреса p2pkh перенесен на адрес p2sh?

Ответы (2)

Можно ли преобразовать адрес p2pkh в адрес p2sh?

Не.

Адреса определяются кошельком. Это кошелек получателя, говорящий: «Я приму платеж, когда он поступит на адрес X». Отправка на другой адрес может означать, что кошелек его не распознает. В худшем случае, если у получателя есть какой-то аппаратный модуль безопасности, в котором хранится ключ, может быть буквально невозможно даже восстановить средства, если они отправлены на неверный адрес.

Это ничем не отличается от того, чтобы задолжать другу немного денег и «погасить» его, закопав конверт с наличными на его лужайке. Технически вы можете считать это переводом средств им, но если это не было сделано способом, известным или даже узнаваемым ими, очень трудно считать это платежом.

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

Как получатель, если вы хотите выдать P2SH-адрес (предположительно, потому что вам нужна безопасность с несколькими подписями или segwit?), просто обновите свой кошелек до программного обеспечения, поддерживающего указанную функцию, и создайте новый адрес.

Также будет ли баланс адреса p2pkh перенесен на адрес p2sh?

Нет, адреса не имеют остатков.

Хотя я согласен с Питером в том, что, как правило, этого делать не следует, есть некоторое техническое понимание, которое можно получить, зная, как это можно сделать. Нижеследующее для справки:

П2ПКХ

Адрес P2PKH A создается из открытого ключа K следующим образом:

A = BASE58CHECK(0x00 HASH160( K ))

Где HASH160( K ) эквивалентен RIPEMD160(SHA256( K )) и 0x00 представляет байт версии (для P2PKH)

П2Ш

С адресами P2SH вместо хеширования открытого ключа вы хэшируете сценарий транзакции .

Транзакция с мультиподписью 1 из 1 создается путем объединения следующих значений байтов:

OP_0 0x14 HASH160( K )

Следовательно, чтобы создать P2SHадрес, использующий транзакцию с мультиподписью 1 к 1, вы создаете его следующим образом:

BASE58CHECK( 0x05 HASH160( OP_0 0x14 HASH160( K )) )

Где 0x05 — это байт версии для хеш-адресов скрипта, а 0x14 — количество байтов, ожидаемое в HASH160( K ).

Справочник по биткойн-скрипту