This is meant for NAME_IMPORT operations, which 
    have five outputs:  the OP_RETURN, the sender (i.e.
    the namespace owner), the name's recipient, the
    name's update hash, and the burn output.
    This method extracts the name update hash from
    the list of outputs.
    
    By construction, the update hash address is the 3rd output.

def get_import_update_hash_from_outputs( outputs ):
    """
    This is meant for NAME_IMPORT operations, which 
    have five outputs:  the OP_RETURN, the sender (i.e.
    the namespace owner), the name's recipient, the
    name's update hash, and the burn output.
    This method extracts the name update hash from
    the list of outputs.
    
    By construction, the update hash address is the 3rd output. 
    """
    
    if len(outputs) < 3:
        raise Exception("No update hash found")

    update_addr = None
    try:
        update_addr = virtualchain.script_hex_to_address(outputs[2]['script'])
        assert update_addr
    except:
        log.warning("Invalid update output: {}".format(outputs[2]['script']))
        raise Exception("No update hash found")

    return hexlify(keylib.b58check.b58check_decode(update_addr))