def parse_element(script): content = None content_length = 0 uns = unhexlify(script) mark = uns[0] if 0x00 <= mark and mark <= 0x4B: content_length = mark content = script[2:2 + content_length * 2] script = script[2 + content_length * 2:] elif 0x4C <= mark and mark <= 0x4E: if 0x4C == mark: content_length = int(script[2:4], 16) content = script[4:4 + content_length * 2] script = script[4 + content_length * 2:] if 0x4D == mark: content_length = int(CT.big_or_little(script[2:6]), 16) content = script[6:6 + content_length * 2] script = script[6 + content_length * 2:] if 0x4E == mark: content_length = int(CT.big_or_little(script[2:10]), 16) content = script[10:10 + content_length * 2] script = script[10 + content_length * 2:] elif 0x4F == mark: content = -1 script = script[2:] elif 0x51 <= mark and mark <= 0x60: content = mark - 0x50 script = script[2:] else: pass return content, script
def script_to_hash(unhex): intermed = hashlib.sha256(unhex).digest() return CT.big_or_little( hexlify(hashlib.new('ripemd160', intermed).digest()).decode('ascii'))
def parse_return_type(cls, mark): if isinstance(mark, str): mark = int(CT.big_or_little(mark), 16) if isinstance(mark, int): return cls.get_arg_name(mark) raise ValueError('wrong type for return {}'.format(mark))