Этот вопрос является продолжением моего вчерашнего поста .
Сегодня у меня вопрос по выполнению P2SH поэтому пример скрипта должен быть таким
OP_0 <A Signature> <B Signature> OP_2 <Public key A> <Public key B>
<Public key C> OP_3 OP_CHECKMULTISIG
OP_HASH160 <ScriptSig Hash> OP_EQUAL
или если используется ключ P2SH, он должен быть таким (я думаю, что в этом скрипте что-то осталось для преобразования hash160 внутри ключа P2SH, верно?)
OP_0 <A Signature> <B Signature> OP_2 <Public key A> <Public key B>
<Public key C> OP_3 OP_CHECKMULTISIG
OP_HASH160 <P2SH key> OP_EQUAL
Теперь, если я правильно понял, симуляция казни делится на две фазы.
scriptSig
равен хешу внутриscriptPubKey
Моделирование
scriptSig
стек, так что теперь стек<A sig> <B sig> <A pubkey> <B pubkey> <C pubkey>
hash160
с данными внутри стека, так что теперь состояние стека<scriptSig hash>
scriptSig
ожидаемый хеш, теперь статус стека<hash scriptsig> <hash scriptsigexpected>
OP_EQUAL
(true или false)scriptSig
выполняться, например, скрипт с мультиподписьюМоделирование
scriptSig
, статус стека<A Signature> <B Signature>
<A Signature> <B Signature> <Public key A> <Public key B> <Public key C>
OP_CHECKMULTISIG
оператор и получить результатМои вопросы:
Кроме того, я прочитал этот пост , но не думаю, что он содержит этот ответ.
Если мой пример сценария неверен, извините за исправления
Давайте рассмотрим это шаг за шагом. Предположим, вы хотите заблокировать несколько биткойнов в мультиподписи 2 из 3.
Шаги блокировки
OP_2 <pub_key 1> <pub_key2> <pub_key3> OP_3 OP_CHECKMULTISIG
.HASH160
которого вы получаете multi-sig_scripthash
.multi-sig_scripthash
версию 0x05, указав адрес, начинающийся с 3...
.scriptPubKey
_OP_HASH160 <multi-sig_scripthash> OP_EQUAL
Разблокировка шагов
Ваш стек начнется с <signatures><redeemScript>
. Подпись есть OP_0 <sig_A> <sig_B>
и redeemScript
есть OP_2 <pub_key 1> <pub_key2> <pub_key3> OP_3 OP_CHECKMULTISIG
.
Начиная с версии 0.3.7, Bitcoin Core сначала выполняет сценарий разблокировки и просматривает полученный стек. Так ваш <signatures>
и <redeemScript>
оцениваются вместе в первую очередь. Это приведет к оценке с несколькими подписями.
В обычных случаях описанный выше шаг должен просто возвращать 1, поскольку подписи удовлетворяют требованиям redeemScript. Но с P2SH есть предостережение, добавленное BIP-16 . Всякий раз, когда у вас есть OP_HASH160 <hash> OP_EQUAL
сценарий блокировки, он служит идентификатором P2SH. Поэтому перед оценкой <signatures>
with <redeemScript>
копируется redeemScript
из стека в другой. Затем выполняется оценка того, что находится в стеке ( <signatures><redeemScript>
в нашем случае). В случае успеха замените текущий стек на только что redeemScript
. Следовательно, вместо 1 у вас <redeemScript>
наверху стека.
Вы работаете OP_HASH160
на redeemScript. Стек сейчас<hash160_of_redeemScript>
Вы нажимаете <expectedredeemScripthash>
. Стек сейчас<hash160_of_redeemScript><expectedredeemScripthash>
Вы запускаете OP_EQUAL
, что приводит к оценке и возвращает 1 на вершину стека.
Винченцопалаццо
Угам Камат
Винченцопалаццо
Угам Камат
Угам Камат
OP_HASH160 <redeem_scripthash> OP_EQUAL
в качестве scriptPubKey. Если ваш адрес начинается с 1, программное обеспечение кошелька будет использовать егоOP_DUP OP_HASH160 <redeem_scripthash> OP_EQUALVERIFY OP_CHECKSIG
как scriptPubKey.Винченцопалаццо