def tx_extract( payload, senders, inputs, outputs, block_id, vtxindex, txid ):
    """
    Extract and return a dict of fields from the underlying blockchain transaction data
    that are useful to this operation.

    Required:
    sender:  the script_pubkey (as a hex string) of the principal that sent the transfer transaction
    address:  the address from the sender script
    recipient:  the script_pubkey (as a hex string) of the principal that is meant to receive the name
    recipient_address:  the address from the recipient script

    Optional:
    sender_pubkey_hex: the public key of the sender
    """
  
    sender = None 
    sender_address = None 
    sender_pubkey_hex = None

    recipient = None 
    recipient_address = None 

    try:
       # first two outputs matter to us (op_return, new recipient)
       assert check_tx_output_types(outputs[:2], block_id)

       recipient = get_transfer_recipient_from_outputs( outputs )
       recipient_address = virtualchain.script_hex_to_address( recipient )

       assert recipient is not None 
       assert recipient_address is not None

       # 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 = str(senders[0]['script_pubkey'])
       sender_address = str(senders[0]['addresses'][0])

       assert sender 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, recipient )
    assert parsed_payload is not None 

    ret = {
       "sender": sender,
       "address": sender_address,
       "recipient": recipient,
       "recipient_address": recipient_address,
       "vtxindex": vtxindex,
       "txid": txid,
       "op": NAME_TRANSFER
    }

    ret.update( parsed_payload )

    if sender_pubkey_hex is not None:
        ret['sender_pubkey'] = sender_pubkey_hex
    else:
        ret['sender_pubkey'] = None

    return ret
def tx_extract ( payload , senders , inputs , outputs , block_id , vtxindex , txid ) : sender = None sender_address = None sender_pubkey_hex = None recipient = None recipient_address = None try : assert check_tx_output_types ( outputs [ : 2 ] , block_id ) recipient = get_transfer_recipient_from_outputs ( outputs ) recipient_address = virtualchain . script_hex_to_address ( recipient ) assert recipient is not None assert recipient_address is not None assert len ( senders ) > 0 assert 'script_pubkey' in senders [ 0 ] . keys ( ) assert 'addresses' in senders [ 0 ] . keys ( ) sender = str ( senders [ 0 ] [ 'script_pubkey' ] ) sender_address = str ( senders [ 0 ] [ 'addresses' ] [ 0 ] ) assert sender 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 , recipient ) assert parsed_payload is not None ret = { "sender" : sender , "address" : sender_address , "recipient" : recipient , "recipient_address" : recipient_address , "vtxindex" : vtxindex , "txid" : txid , "op" : NAME_TRANSFER } ret . update ( parsed_payload ) if sender_pubkey_hex is not None : ret [ 'sender_pubkey' ] = sender_pubkey_hex else : ret [ 'sender_pubkey' ] = None return ret
Extract and return a dict of fields from the underlying blockchain transaction data
    that are useful to this operation.

    Required:
    sender:  the script_pubkey (as a hex string) of the principal that sent the transfer transaction
    address:  the address from the sender script
    recipient:  the script_pubkey (as a hex string) of the principal that is meant to receive the name
    recipient_address:  the address from the recipient script

    Optional:
    sender_pubkey_hex: the public key of the sender