def _parse_transaction(self, tx, blockcount=None): if not blockcount: blockcount = self.blockcount() confirmations = 0 block_height = None if 'block_height' in tx['status']: block_height = tx['status']['block_height'] confirmations = blockcount - block_height status = 'unconfirmed' if tx['status']['confirmed']: status = 'confirmed' fee = None if 'fee' not in tx else tx['fee'] t = Transaction(locktime=tx['locktime'], version=tx['version'], network=self.network, fee=fee, size=tx['size'], hash=tx['txid'], date=None if 'block_time' not in tx['status'] else datetime.utcfromtimestamp(tx['status']['block_time']), confirmations=confirmations, block_height=block_height, status=status, coinbase=tx['vin'][0]['is_coinbase']) index_n = 0 for ti in tx['vin']: if tx['vin'][0]['is_coinbase']: t.add_input(prev_hash=ti['txid'], output_n=ti['vout'], index_n=index_n, unlocking_script=ti['scriptsig'], value=0) else: t.add_input( prev_hash=ti['txid'], output_n=ti['vout'], index_n=index_n, unlocking_script=ti['scriptsig'], value=ti['prevout']['value'], address='' if 'scriptpubkey_address' not in ti['prevout'] else ti['prevout']['scriptpubkey_address'], unlocking_script_unsigned=ti['prevout']['scriptpubkey']) index_n += 1 index_n = 0 for to in tx['vout']: address = '' if 'scriptpubkey_address' in to: address = to['scriptpubkey_address'] spent = self.isspent(t.txid, index_n) t.add_output(value=to['value'], address=address, lock_script=to['scriptpubkey'], output_n=index_n, spent=spent) index_n += 1 if 'segwit' in [i.witness_type for i in t.inputs]: t.witness_type = 'segwit' t.update_totals() t.size = tx['size'] return t
def _parse_transaction(self, tx, blockcount=None): if not blockcount: blockcount = self.blockcount() confirmations = 0 block_height = None if 'block_height' in tx['status']: block_height = tx['status']['block_height'] confirmations = blockcount - block_height status = 'unconfirmed' if tx['status']['confirmed']: status = 'confirmed' fee = None if 'fee' not in tx else tx['fee'] t = Transaction(locktime=tx['locktime'], version=tx['version'], network=self.network, fee=fee, size=tx['size'], txid=tx['txid'], date=None if 'block_time' not in tx['status'] else datetime.utcfromtimestamp(tx['status']['block_time']), confirmations=confirmations, block_height=block_height, status=status, coinbase=tx['vin'][0]['is_coinbase']) index_n = 0 for ti in tx['vin']: if tx['vin'][0]['is_coinbase']: t.add_input(prev_txid=ti['txid'], output_n=ti['vout'], index_n=index_n, unlocking_script=ti['scriptsig'], value=0, sequence=ti['sequence']) else: witnesses = [] if 'witness' in ti: witnesses = [bytes.fromhex(w) for w in ti['witness']] t.add_input(prev_txid=ti['txid'], output_n=ti['vout'], index_n=index_n, unlocking_script=ti['scriptsig'], value=ti['prevout']['value'], address='' if 'scriptpubkey_address' not in ti['prevout'] else ti['prevout']['scriptpubkey_address'], sequence=ti['sequence'], unlocking_script_unsigned=ti['prevout']['scriptpubkey'], witnesses=witnesses) index_n += 1 index_n = 0 if len(tx['vout']) > 50: # Every output needs an extra query, stop execution if there are too many transaction outputs return False for to in tx['vout']: address = '' if 'scriptpubkey_address' in to: address = to['scriptpubkey_address'] spent = self.isspent(t.txid, index_n) t.add_output(value=to['value'], address=address, lock_script=to['scriptpubkey'], output_n=index_n, spent=spent) index_n += 1 if 'segwit' in [i.witness_type for i in t.inputs] or 'p2sh-segwit' in [i.witness_type for i in t.inputs]: t.witness_type = 'segwit' t.update_totals() t.size = tx['size'] return t