Представьте себе, вы создаете искупите, что может быть доказано никем, зная, какой-то секрет или обладание конкретного адреса Bitcoin.
котировка
Сценарий redeemScript = новый скрипт (
"OP_IF "
+ "OP_HASH256 " + Op.GetPushOp (secretHash) + " OP_EQUAL " +
"OP_ELSE "
+ address.ScriptPubKey + " " +
"OP_ENDIF");
"OP_IF "
+ "OP_HASH256 " + Op.GetPushOp (secretHash) + " OP_EQUAL " +
"OP_ELSE "
+ address.ScriptPubKey + " " +
"OP_ENDIF");
Такой скрипт работает нормально, если адрес является P2PKH, однако, если адрес является P2SH тогда единственное условие, чтобы удовлетворить ветвь ELSE, чтобы знать сценарий выкупа адреса.
Это может быть исправлено с помощью OP_EVAL следующим образом. (Предполагается, что адрес P2SH)
котировка
Сценарий redeemScript = новый скрипт (
"OP_IF "
+ "OP_HASH256 " + Op.GetPushOp (secretHash) + " OP_EQUAL " +
"OP_ELSE "
"OP_DUP " + Address.ScriptPubKey + " OP_EVAL" +
"OP_ENDIF");
"OP_IF "
+ "OP_HASH256 " + Op.GetPushOp (secretHash) + " OP_EQUAL " +
"OP_ELSE "
"OP_DUP " + Address.ScriptPubKey + " OP_EVAL" +
"OP_ENDIF");
Конечно, мы могли бы также использовать мульти сиговых или открытый ключ ScriptPubKey непосредственно в ELSE отрасли, но они не обязательно могут быть известны строителем выкуплен сценария.