文章目录
 
 
 
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