Как выполняется сценарий P2SH?

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

До P2SH:

До того, как P2SH добавил новые правила проверки, узлы выполняли скрипт следующим образом:

До P2SH

Другими словами, старый узел будет просто счастлив проверить, соответствует ли HASH160 сценария выкупа HASH160 в scriptPubKey. Никакой проверки MULTISIG не потребуется, потому что OP_1 (TRUE) останется на вершине стека.

После P2SH:

С новыми правилами проверки я предполагаю, что скрипт выполняет что-то вроде этого:

Пост-P2SH

Вопрос:

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

Я надеюсь, что моя визуализация выполнения P2SH не вводит в заблуждение.

Ответы (1)

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

Что-то вроде. На самом деле это не второй стек, а скорее копия исходного стека. После завершения выполнения scriptPubKey исходный стек до выполнения scriptPubKey восстанавливается, а затем выполняется redeemScript.

Поток примерно такой:

  1. Выполнить scriptSig, который создаетstack
  2. Копировать stackвstackCopy
  3. Выполнить scriptPubKey, используяstack
  4. Если P2SH, замените stackнаstackCopy
  5. Если P2SH, снимите верхний элемент stackи выполните как redeemScript, используяstack