最后一种,也是最复杂的一种,pay to script hash,这种脚本的输出脚本,给出的收款人公钥的哈希,是收款人提供的一个脚本的哈希,这个脚本叫redeemscript,赎回脚本,将来花这个钱时,输入脚本里要给出这个redeemscipt的具体内容,同时还要给出让这个赎回脚本正确运行所需要的签名。
以上是输入、输出脚本的拼接,前两行来自输入脚本,后面三行来自输出脚本。首先把输入脚本的signature压入栈,然后把赎回脚本压入栈,然后取哈希的操作,得到赎回脚本的哈希,RSH是赎回脚本的哈希值,然后输出脚本里给出的哈希值压入栈,这个时候栈里就有两个哈希值,最后用EQUAL比较一下这两个哈希值是否相等。
然后作第二阶段的验证:
首先把输入脚本里序列化的赎回脚本作反序列化,反序列化的操作在PPT上没有展现,这是每个节点自己要完成的,然后执行这个赎回脚本,首先把这个pubkey压入栈,然后用checksig验证输入脚本里给出的signature的正确性,验证通过后整个pay to scripthash才算执行完成。