match = [ opcodes.OP_PUSHDATA4, opcodes.OP_PUSHDATA4 ]
if match_decoded(decoded, match):
sig = decoded[0][1].encode('hex')
- assert sig[-2:] == '01'
- sig = sig[:-2]
pubkey = decoded[1][1].encode('hex')
- return [pubkey], {pubkey:sig}, public_key_to_bc_address(pubkey.decode('hex'))
+ if sig[-2:] == '01':
+ sig = sig[:-2]
+ return [pubkey], {pubkey:sig}, public_key_to_bc_address(pubkey.decode('hex'))
+ else:
+ print_error("cannot find address in input script", bytes.encode('hex'))
+ return [], {}, "(None)"
+
# p2sh transaction, 2 of n
match = [ opcodes.OP_0 ]
def parse_input(self, vds):
d = {}
- d['prevout_hash'] = hash_encode(vds.read_bytes(32))
- d['prevout_n'] = vds.read_uint32()
+ prevout_hash = hash_encode(vds.read_bytes(32))
+ prevout_n = vds.read_uint32()
scriptSig = vds.read_bytes(vds.read_compact_size())
- d['sequence'] = vds.read_uint32()
+ sequence = vds.read_uint32()
- if scriptSig:
- pubkeys, signatures, address = get_address_from_input_script(scriptSig)
+ if prevout_hash == '00'*32:
+ d['is_coinbase'] = True
else:
- pubkeys = []
- signatures = {}
- address = None
-
- d['address'] = address
- d['pubkeys'] = pubkeys
- d['signatures'] = signatures
+ d['is_coinbase'] = False
+ d['prevout_hash'] = prevout_hash
+ d['prevout_n'] = prevout_n
+ d['sequence'] = sequence
+ if scriptSig:
+ pubkeys, signatures, address = get_address_from_input_script(scriptSig)
+ else:
+ pubkeys = []
+ signatures = {}
+ address = None
+ d['address'] = address
+ d['pubkeys'] = pubkeys
+ d['signatures'] = signatures
return d
def get_input_info(self):
+ keys = ['prevout_hash', 'prevout_n', 'address', 'KeyID', 'scriptPubKey', 'redeemScript', 'redeemPubkey', 'pubkeys', 'signatures', 'is_coinbase']
info = []
for i in self.inputs:
- item = {
- 'prevout_hash':i['prevout_hash'],
- 'prevout_n':i['prevout_n'],
- 'address':i.get('address'),
- 'KeyID':i.get('KeyID'),
- 'scriptPubKey':i.get('scriptPubKey'),
- 'redeemScript':i.get('redeemScript'),
- 'redeemPubkey':i.get('redeemPubkey'),
- 'pubkeys':i.get('pubkeys'),
- 'signatures':i.get('signatures',{}),
- }
+ item = {}
+ for k in keys:
+ v = i.get(k)
+ if v is not None:
+ item[k] = v
info.append(item)
return info