code: def tx_extract( payload, senders, inputs, outputs, block_id, vtxindex, txid ):
      
    
      sender_script = None 
      sender_address = None 
      sender_pubkey_hex = None
  
      try:
  
         # by construction, the first input comes from the principal
         # who sent the registration transaction...
         assert len(senders) > 0
         assert 'script_pubkey' in senders[0].keys()
         assert 'addresses' in senders[0].keys()
  
         sender_script = str(senders[0]['script_pubkey'])
         sender_address = str(senders[0]['addresses'][0])
  
         assert sender_script is not None 
         assert sender_address is not None
  
         if str(senders[0]['script_type']) == 'pubkeyhash':
            sender_pubkey_hex = get_public_key_hex_from_tx( inputs, sender_address )
  
      except Exception, e:
         log.exception(e)
         raise Exception("Failed to extract")
  
      parsed_payload = parse( payload )
      assert parsed_payload is not None 
  
      ret = {
         "sender": sender_script,
         "address": sender_address,
         "block_number": block_id,
         "vtxindex": vtxindex,
         "txid": txid,
         "op": ANNOUNCE
      }
  
      ret.update( parsed_payload )
  
      if sender_pubkey_hex is not None:
          ret['sender_pubkey'] = sender_pubkey_hex
  
      return ret
docs: Extract and return a dict of fields from the underlying blockchain transaction data
      that are useful to this operation.
  
      Required (+ parse):
      sender:  the script_pubkey (as a hex string) of the principal that sent the name preorder transaction
      address:  the address from the sender script
  
      Optional:
      sender_pubkey_hex: the public key of the sender