Example #1
0
 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
Example #2
0
 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