return d
-def parse_Transaction(vds, is_coinbase):
+def parse_Transaction(vds, is_coinbase, is_coinstake):
d = {}
start = vds.read_cursor
d['version'] = vds.read_int32()
+ d['timestamp'] = vds.read_int32()
n_vin = vds.read_compact_size()
d['inputs'] = []
for i in xrange(n_vin):
# print("skipping strange tx output with zero value")
# continue
# if o['address'] != "None":
- d['outputs'].append(o)
+ if not is_coinstake or i > 0: # first coinstake output
+ d['outputs'].append(o) # transaction doesn't make any sense
d['lockTime'] = vds.read_uint32()
return d
match2 = [ opcodes.OP_2, opcodes.OP_PUSHDATA4, opcodes.OP_PUSHDATA4, opcodes.OP_2, opcodes.OP_CHECKMULTISIG ]
if match_decoded(dec2, match2):
pubkeys = [ dec2[1][1].encode('hex'), dec2[2][1].encode('hex') ]
- return pubkeys, signatures, hash_160_to_bc_address(hash_160(redeemScript), 5)
+ return pubkeys, signatures, hash_160_to_bc_address(hash_160(redeemScript), 20)
# 2 of 3
match2 = [ opcodes.OP_2, opcodes.OP_PUSHDATA4, opcodes.OP_PUSHDATA4, opcodes.OP_PUSHDATA4, opcodes.OP_3, opcodes.OP_CHECKMULTISIG ]
if match_decoded(dec2, match2):
pubkeys = [ dec2[1][1].encode('hex'), dec2[2][1].encode('hex'), dec2[3][1].encode('hex') ]
- return pubkeys, signatures, hash_160_to_bc_address(hash_160(redeemScript), 5)
+ return pubkeys, signatures, hash_160_to_bc_address(hash_160(redeemScript), 20)
return [], [], None
def get_address_from_output_script(bytes):
- decoded = [ x for x in script_GetOp(bytes) ]
+ try:
+ decoded = [ x for x in script_GetOp(bytes) ]
+ except:
+ return None
# The Genesis Block, self-payments, and pay-by-IP-address payments look like:
# 65 BYTES:... CHECKSIG
# DUP HASH160 20 BYTES:... EQUALVERIFY CHECKSIG
match = [opcodes.OP_DUP, opcodes.OP_HASH160, opcodes.OP_0, opcodes.OP_EQUALVERIFY, opcodes.OP_CHECKSIG]
if match_decoded(decoded, match):
- return "None"
+ return None
# Pay-by-Bitcoin-address TxOuts look like:
# DUP HASH160 20 BYTES:... EQUALVERIFY CHECKSIG
# p2sh
match = [ opcodes.OP_HASH160, opcodes.OP_PUSHDATA4, opcodes.OP_EQUAL ]
if match_decoded(decoded, match):
- addr = hash_160_to_bc_address(decoded[1][1],5)
+ addr = hash_160_to_bc_address(decoded[1][1],20)
return addr
- return "None"
+ return None