文章目录
Script
练习1
代码实现
from helper import hash160
def op_hash160(stack):
if len(stack) < 1:
return False
element = stack.pop()
h160 = hash160(element)
stack.append(h160)
return True
测试
无
练习2
代码实现
def op_checksig(stack, z):
if len(stack) < 2:
return False
sec_pubkey = stack.pop()
der_signature = stack.pop()[:-1]
try:
point = S256Point.parse(sec_pubkey)
sig = Signature.parse(der_signature)
except(ValueError, SyntaxError) as e:
return False
if point.verify(z, sig):
stack.append(encode_num(1))
else:
stack.append(encode_num(0))
return True
测试
无
练习3
一个可用的签名脚本
OP_2
测试(手测)
dup dup mul add 6 equal
2(OP_2)
22
222
24
6
66
1
练习4
该签名脚本目的
该比特币签名脚本的目的是悬赏 SHA-1碰撞,能解锁该脚本的唯一方法是给出不同的a和b。
具体解释
2dup equal not verify sha1 swap sha1 equal
a,b,(a为栈顶); 复制栈顶的两项a与b,判断它俩是否相等,不等经过not返回1,
verify消耗栈顶元素判断为True,对a进行sha1运算,交换b到栈顶。对b进行sha1运算,
equal判断a与b两者的sha1值相等,返回True