MCPcopy Create free account
hub / github.com/bitcoinxt/bitcoinxt / raw_iter

Method raw_iter

qa/rpc-tests/test_framework/script.py:698–753  ·  view source on GitHub ↗

Raw iteration Yields tuples of (opcode, data, sop_idx) so that the different possible PUSHDATA encodings can be accurately distinguished, as well as determining the exact opcode byte indexes. (sop_idx)

(self)

Source from the content-addressed store, hash-verified

696 return super(CScript, cls).__new__(cls, b''.join(coerce_iterable(value)))
697
698 def raw_iter(self):
699 """Raw iteration
700
701 Yields tuples of (opcode, data, sop_idx) so that the different possible
702 PUSHDATA encodings can be accurately distinguished, as well as
703 determining the exact opcode byte indexes. (sop_idx)
704 """
705 i = 0
706 while i < len(self):
707 sop_idx = i
708 opcode = bord(self[i])
709 i += 1
710
711 if opcode > OP_PUSHDATA4:
712 yield (opcode, None, sop_idx)
713 else:
714 datasize = None
715 pushdata_type = None
716 if opcode < OP_PUSHDATA1:
717 pushdata_type = 'PUSHDATA(%d)' % opcode
718 datasize = opcode
719
720 elif opcode == OP_PUSHDATA1:
721 pushdata_type = 'PUSHDATA1'
722 if i >= len(self):
723 raise CScriptInvalidError('PUSHDATA1: missing data length')
724 datasize = bord(self[i])
725 i += 1
726
727 elif opcode == OP_PUSHDATA2:
728 pushdata_type = 'PUSHDATA2'
729 if i + 1 >= len(self):
730 raise CScriptInvalidError('PUSHDATA2: missing data length')
731 datasize = bord(self[i]) + (bord(self[i+1]) << 8)
732 i += 2
733
734 elif opcode == OP_PUSHDATA4:
735 pushdata_type = 'PUSHDATA4'
736 if i + 3 >= len(self):
737 raise CScriptInvalidError('PUSHDATA4: missing data length')
738 datasize = bord(self[i]) + (bord(self[i+1]) << 8) + (bord(self[i+2]) << 16) + (bord(self[i+3]) << 24)
739 i += 4
740
741 else:
742 assert False # shouldn't happen
743
744
745 data = bytes(self[i:i+datasize])
746
747 # Check for truncation
748 if len(data) < datasize:
749 raise CScriptTruncatedPushDataError('%s: truncated data' % pushdata_type, data)
750
751 i += datasize
752
753 yield (opcode, data, sop_idx)
754
755 def __iter__(self):

Callers 3

__iter__Method · 0.95
GetSigOpCountMethod · 0.95
FindAndDeleteFunction · 0.80

Calls 2

CScriptInvalidErrorClass · 0.85

Tested by

no test coverage detected