带有VERIFY操作码的条件子句
另一种比特币脚本中的条件形式是以VERIFY结尾的任何操作码。VERIFY后缀意味着如果评估的条件不为TRUE,则脚本的执行立即终止,并将事务视为无效。
与提供替代执行路径的IF子句不同,VERIFY后缀充当了一个守卫子句,只有在满足前提条件时才继续执行。
例如,以下脚本要求Bob的签名和产生特定哈希的预图像(秘密)。只有满足这两个条件才能解锁:
OP_HASH160 <expected hash> OP_EQUALVERIFY <Bob's Pubkey> OP_CHECKSIG
为了花费这笔交易,Bob必须提供一个有效的预影像和一个签名:
<Bob's Sig> <hash pre-image>
没有提供预影像,Bob无法进入检查他签名的脚本部分。
这个脚本也可以用OP_IF来编写:
Bob的身份验证数据是相同的:
<Bob's Sig> <hash pre-image>
使用OP_IF的脚本与使用带有VERIFY后缀的操作码执行相同的操作;它们都作为守卫子句运行。然而,VERIFY的构造更高效,使用了两个较少的操作码。
那么,我们什么时候使用VERIFY,什么时候使用OP_IF呢?如果我们只是想要附加一个前提条件(守卫子句),那么VERIFY更好。然而,如果我们想要有多个执行路径(流程控制),那么我们需要一个OP_IF…OP_ELSE的流程控制子句。
Last updated