decode OP_PUSHDATA2/4 fix for broken opcodes script tx ebc9fa1196a59e192352d76c0f6e73167046b9d37b8302b6bb6968dfd279b767
This commit is contained in:
parent
c9c05385d3
commit
9958f7550f
@ -319,11 +319,20 @@ def parse_script(script, segwit=True):
|
||||
if m > 16:
|
||||
n, m = 0, 0
|
||||
elif script[s] == OPCODE["OP_PUSHDATA1"]:
|
||||
s += 1 + script[s + 1]
|
||||
try:
|
||||
s += 1 + script[s + 1]
|
||||
except:
|
||||
break
|
||||
elif script[s] == OPCODE["OP_PUSHDATA2"]:
|
||||
s += 2 + struct.unpack('<H', script[s: s + 2])[0]
|
||||
try:
|
||||
s += 2 + struct.unpack('<H', script[s: s + 2])[0]
|
||||
except:
|
||||
break
|
||||
elif script[s] == OPCODE["OP_PUSHDATA4"]:
|
||||
s += 4 + struct.unpack('<L', script[s: s + 4])[0]
|
||||
try:
|
||||
s += 4 + struct.unpack('<L', script[s: s + 4])[0]
|
||||
except:
|
||||
break
|
||||
else:
|
||||
if script[s] == OPCODE["OP_CHECKSIG"]:
|
||||
req_sigs += 1
|
||||
|
||||
@ -171,7 +171,7 @@ class Transaction(dict):
|
||||
raise TypeError
|
||||
return stream
|
||||
|
||||
def serialize(self, segwit = True, hex = False):
|
||||
def serialize(self, segwit=True, hex=False):
|
||||
chunks = []
|
||||
chunks.append(struct.pack('<L', self["version"]))
|
||||
if segwit and "segwit" in self:
|
||||
@ -187,7 +187,7 @@ class Transaction(dict):
|
||||
chunks.append(int_to_var_int(len(self["vIn"][i]['scriptSig'])))
|
||||
chunks.append(self["vIn"][i]['scriptSig'])
|
||||
else:
|
||||
chunks.append(int_to_var_int(int(len(self["vIn"][i]['scriptSig'])/ 2)) )
|
||||
chunks.append(int_to_var_int(int(len(self["vIn"][i]['scriptSig']) / 2)))
|
||||
chunks.append(unhexlify(self["vIn"][i]['scriptSig']))
|
||||
chunks.append(struct.pack('<L', self["vIn"][i]['sequence']))
|
||||
chunks.append(int_to_var_int(len(self["vOut"])))
|
||||
@ -197,7 +197,7 @@ class Transaction(dict):
|
||||
chunks.append(int_to_var_int(len(self["vOut"][i]['scriptPubKey'])))
|
||||
chunks.append(self["vOut"][i]['scriptPubKey'])
|
||||
else:
|
||||
chunks.append(int_to_var_int(int(len(self["vOut"][i]['scriptPubKey'])/ 2)) )
|
||||
chunks.append(int_to_var_int(int(len(self["vOut"][i]['scriptPubKey']) / 2)))
|
||||
chunks.append(unhexlify(self["vOut"][i]['scriptPubKey']))
|
||||
if segwit and "segwit" in self:
|
||||
for i in self["vIn"]:
|
||||
|
||||
@ -65,4 +65,6 @@ class TransactionDeserializeTests(unittest.TestCase):
|
||||
tx = "01000000014cee27ba570d2cca50bb9b3f7374c7eb24ec16ffec0a077c84c1cc23b0161804010000008b48304502200f1100f78596c8d46fb2f39c570ce6945956a3dd33c48fbdbe53af1c383182ed022100a85b528ea21ee7f39b2ec1568ac19f26f4dd4fb9d3dbf70587986de3c2c90fa801410426e4d0890ad5272b2b9a10ca3f518f7e025932caa62f13467e444df89ed25f24f4fc5075cad32f468c8f7f913e30057449d65623726e7102f5eaa326d486ebf7ffffffff020010000000000000006020e908000000001976a914947236437233a71cb033a53932008dbfe346388e88ac00000000"
|
||||
Transaction(tx)
|
||||
tx = "01000000011e6c87805dad469ed72b42668b858df90e6b007c6410a7bde65bb1cf687d8409000000006b48304502204f3353cf129bb805fb90315aeb6d5ab8e0937129c4b0f1422495e42b6bf0e928022100cbdd2811a4c94397aa731c224ee0c7290fea6bc17a9b3ce5957d9937c60f4f97012103e2a0e6a91fa985ce4dda7f048fca5ec8264292aed9290594321aa53d37fdea32ffffffff0160e3160000000000fdaf0563ff054effffffff4da30546726f6d2061336136316665663433333039623966623233323235646637393130623033616663353436356239204d6f6e205365702031372030303a30303a303020323030310a46726f6d3a205361746f736869204e616b616d6f746f203c7361746f7368696e40676d782e636f6d3e0a446174653a204d6f6e2c2031322041756720323031332030323a32383a3032202d303230300a5375626a6563743a205b50415443485d2052656d6f7665202853494e474c457c444f55424c4529425954450a0a492072656d6f76656420746869732066726f6d20426974636f696e20696e20663165316662346264656638373863386663313536346661343138643434653735343161376538330a696e2053657074203720323031302c20616c6d6f73742074687265652079656172732061676f2e204265207761726e6564207468617420492068617665206e6f740a61637475616c6c792074657374656420746869732070617463682e0a2d2d2d0a206261636b656e64732f626974636f696e642f646573657269616c697a652e7079207c2020202038202b2d2d2d2d2d2d2d0a20312066696c65206368616e6765642c203120696e73657274696f6e282b292c20372064656c6574696f6e73282d290a0a64696666202d2d67697420612f6261636b656e64732f626974636f696e642f646573657269616c697a652e707920622f6261636b656e64732f626974636f696e642f646573657269616c697a652e70790a696e64657820363632303538332e2e38396239623162203130303634340a2d2d2d20612f6261636b656e64732f626974636f696e642f646573657269616c697a652e70790a2b2b2b20622f6261636b656e64732f626974636f696e642f646573657269616c697a652e70790a4040202d3238302c3130202b3238302c38204040206f70636f646573203d20456e756d65726174696f6e28224f70636f646573222c205b0a2020202020224f505f57495448494e222c20224f505f524950454d44313630222c20224f505f53484131222c20224f505f534841323536222c20224f505f48415348313630222c0a2020202020224f505f48415348323536222c20224f505f434f4445534550415241544f52222c20224f505f434845434b534947222c20224f505f434845434b534947564552494659222c20224f505f434845434b4d554c5449534947222c0a2020202020224f505f434845434b4d554c5449534947564552494659222c0a2d2020202028224f505f53494e474c45425954455f454e44222c2030784630292c0a2d2020202028224f505f444f55424c45425954455f424547494e222c20307846303030292c0a2020202020224f505f5055424b4559222c20224f505f5055424b455948415348222c0a2d2020202028224f505f494e56414c49444f50434f4445222c20307846464646292c0a2b2020202028224f505f494e56414c49444f50434f4445222c2030784646292c0a205d290a200a200a4040202d3239332c3130202b3239312c3620404020646566207363726970745f4765744f70286279746573293a0a202020202020202020766368203d204e6f6e650a2020202020202020206f70636f6465203d206f72642862797465735b695d290a20202020202020202069202b3d20310a2d20202020202020206966206f70636f6465203e3d206f70636f6465732e4f505f53494e474c45425954455f454e4420616e642069203c206c656e286279746573293a0a2d2020202020202020202020206f70636f6465203c3c3d20380a2d2020202020202020202020206f70636f6465207c3d206f72642862797465735b695d290a2d20202020202020202020202069202b3d20310a200a2020202020202020206966206f70636f6465203c3d206f70636f6465732e4f505f5055534844415441343a0a202020202020202020202020206e53697a65203d206f70636f64650a2d2d200a312e372e392e340a0a6800000000"
|
||||
Transaction(tx)
|
||||
tx = "0100000001c86c4ddc01f59b748e6a55a6d09c5bce7574fbdec721ca468768b5d6d9e3fb00000000006b483045022076b5504ad7aff614e32159ac055362a1197c9a5e50de48cf4f05c7547b39c0b5022100ea67efb2585aae40a53363f48e3e38dfc7387b238f8716fa53a5f0ed51b7c314012102452928340bc618777d217a52f30d8e1440d98f561c523a31834a1614106f3c15ffffffff025cf5352f0d0000001976a9141855d5890b8aec536ffc3e59cb586e98b34b5b9288ac0bd32204000000001976a9146f3f6845da01e856a426c31dfeef188c06bf574d88ac00000000"
|
||||
Transaction(tx)
|
||||
Loading…
Reference in New Issue
Block a user