Проверка сценария транзакции P2SH вручную. Как мне объединить OP CODES, чтобы хэшировать скрипт?

Я читаю это:

Транзакция 40eee3ae1760e3a8532263678cdf64569e6ad06abc133af64f735e52562bccc8 была выплачена на адрес P2SH 3P14159f73E4gFr7JterCCQh9QjiTjiZrG. Вы можете увидеть сценарий погашения в транзакции 7edb32d4ffd7a385b763c7a8e56b6358bcd729e747290624e18acdbe6209fc45, которая тратит этот вывод, используя OP_FALSE { OP_1 OP_1 OP_CHECKMULTISIG }.

с https://en.bitcoin.it/wiki/Pay_to_script_hash

Я пытаюсь вручную проверить действительность транзакций, чтобы понять, понимаю ли я, что происходит. Я впервые нашел первую транзакцию: https://blockchain.info/tx/40eee3ae1760e3a8532263678cdf64569e6ad06abc133af64f735e52562bccc8

Как я понял, он блокирует эти выходы в скрипте вывода

OP_HASH160 e9c3dd0c07aac76179ebc76a6c78d4d67c6c160a OP_EQUAL 

Текст говорит мне посмотреть на другую транзакцию: https://blockchain.info/tx/7edb32d4ffd7a385b763c7a8e56b6358bcd729e747290624e18acdbe6209fc45 .

который тратит этот вывод. Это означает, что эта транзакция представляет сценарий (с данными), который удовлетворяет OP_HASH160 e9c3dd0c07aac76179ebc76a6c78d4d67c6c160a OP_EQUAL. Давайте посмотрим на ввод этой транзакции:

OP_FALSE 3045022100ad0851c69dd756b45190b5a8e97cb4ac3c2b0fa2f2aae23aed6ca97ab33bf88302200b248593abc1259512793e7dea61036c601775ebb23640a0120b0dba2c34b79001 5141042f90074d7a5bf30c72cf3a8dfd1381bdbd30407010e878f3a11269d5f74a58788505cdca22ea6eab7cfb40dc0e07aba200424ab0d79122a653ad0c7ec9896bdf51ae

Я должен взять OP_HASH160это, чтобы убедиться, что оно равно e9c3dd0c07aac76179ebc76a6c78d4d67c6c160a, верно? Помните, что это OP_HASH160означает: ripemd160(sha256(что-то)). Должен ли я сначала объединить этот OP_FALSE? Кроме того, разве это не должен быть сценарий? Где кроме других op_codes OP_FALSE?

Ответы (1)

Вы можете найти выполнение аналогичной транзакции с оплатой за хэш скрипта (P2SH) здесь: Выполнение платежа за хэш скрипта

По сути, сначала оценивается scriptSig, он помещает в стек пустой массив байтов из-за кода OP_FALSE, затем помещает в стек подпись 3045....001 и, наконец, помещает сценарий погашения 5141...1ae на . Затем мы переходим к оценке scriptPubKey, закодированный скрипт выкупа извлекается из стека и хешируется, а хеш сравнивается с хэшем e9c3...60a. если они равны, мы переходим к фактической оценке сценария погашения. Это означает, что стек возвращается к точке перед выполнением scriptPubKey, поэтому мы имеем:

 5141...1ae
 3045....001
 (empty value)

Верхний элемент извлекается, декодируется, а затем оценивается. В данном случае это скрипт OP_CHECKMULTISIG, декодированная версия находится на веб-странице, на которую вы ссылаетесь, а также в вашем вопросе, но этот мультиподпись имеет только один открытый ключ и одну подпись, так что это в основном эквивалентно оплате прямо на этот один адрес. OP_CHECKMULTISIG проверит подпись 3045...001 по открытому ключу, и если она совпадает, транзакция действительна. Пустые данные, помещаемые в начале с помощью OP_FALSE, просто существуют из-за того, что CHECKMULTISIG берет на один элемент больше, чем нужно, из-за ошибки, поэтому это просто неиспользуемый бит данных, необходимый для его работы.

Я не уверен, что вы имеете в виду, говоря, что это сценарий. Это скрипт, он просто закодирован в 5141...1ae. Вы можете расшифровать его decodescriptвызовом биткойн RPC.

Разве нет никакого обозревателя блоков, который показывает мне сценарий? У меня нет этих инструментов командной строки для декодирования скрипта