def masternode_image_upload_request_mn0(data, *args, **kwargs):
    # parse inputs
    upload_code = data['upload_code']
    image_data = data['image_data']
    mn_ticket_logger.info(
        'Masternode image upload received, upload_code: {}'.format(
            upload_code))
    sender_id = kwargs.get('sender_id')
    MASTERNODE_DB.connect(reuse_if_open=True)
    try:
        regticket_db = Regticket.get(upload_code=upload_code)
        regticket = RegistrationTicket(serialized=regticket_db.regticket)
        if regticket.author != sender_id:
            raise Exception(
                'Given upload code was created by other public key')
        mn_ticket_logger.info(
            'Given upload code exists with required public key')
    except DoesNotExist:
        mn_ticket_logger.exception(
            'Given upload code DOES NOT exists with required public key')
        raise
    result = get_blockchain_connection().getlocalfee()
    fee = result['localfee']
    regticket_db.image_data = image_data
    regticket_db.localfee = fee
    regticket_db.save()
    return fee
async def masternode_validate_txid_upload_code_image(data, *args, **kwargs):
    burn_10_txid, upload_code = data
    try:
        regticket_db = Regticket.get(upload_code=upload_code)
    except DoesNotExist:
        mn_ticket_logger.exception(
            'Upload code {} not found in DB'.format(upload_code))
        raise ValueError('Given upload code was issued by someone else...')
    is_valid, errors = await is_burn_tx_valid(regticket_db, burn_10_txid)
    if not is_valid:
        raise ValueError(errors)
    regticket = RegistrationTicket(serialized=regticket_db.regticket)
    # TODO: perform duplication check
    if get_nsfw_detector().is_nsfw(regticket_db.image_data):
        raise ValueError(
            "Image is NSFW, score: %s" %
            get_nsfw_detector().get_score(regticket_db.image_data))

    # if we're on mn1 or mn2:
    if regticket_db.localfee is None:
        mn0 = get_masternode_ordering(regticket.blocknum)[0]
        # Send confirmation to MN0
        mn_signed_regticket = generate_signed_ticket(regticket)
        # TODO: run task and return without waiting for result (as if it was in Celery)
        # TODO: handle errors/exceptions
        response = await mn0.call_masternode(
            "REGTICKET_MN1_CONFIRM_REQ", "REGTICKET_MN1_CONFIRM_RESP", [
                regticket.author, regticket.imagedata_hash,
                mn_signed_regticket.serialize()
            ])
        # We return success status cause validation on this node has passed. However exception may happen when
        # calling mn0 - need to handle it somehow (or better - schedule async task).
        return response
    else:
        return 'Validation passed'
def regticket_status(data, *args, **kwargs):
    # verify identity - return status only to regticket creator
    sender_id = kwargs.get('sender_id')
    upload_code = data.get('upload_code')
    MASTERNODE_DB.connect(reuse_if_open=True)
    try:
        regticket_db = Regticket.get(artist_pk=sender_id,
                                     upload_code=upload_code)
    except DoesNotExist:
        raise Exception(
            'Given upload code DOES NOT exists with required public key')
    return {'status': regticket_db.status, 'error': regticket_db.error}
Ejemplo n.º 4
0
 def masternode_image_upload_request(self, data, *args, **kwargs):
     # parse inputs
     upload_code = data['upload_code']
     image_data = data['image_data']
     mn_ticket_logger.info(
         'Masternode image upload received, upload_code: {}'.format(
             upload_code))
     sender_id = kwargs.get('sender_id')
     db.connect(reuse_if_open=True)
     try:
         regticket_db = Regticket.get(upload_code=upload_code)
         regticket = RegistrationTicket(serialized=regticket_db.regticket)
         if regticket.author != sender_id:
             raise Exception(
                 'Given upload code was created by other public key')
         mn_ticket_logger.info(
             'Given upload code exists with required public key')
     except DoesNotExist:
         mn_ticket_logger.warn(
             'Given upload code DOES NOT exists with required public key')
         raise
     regticket_db.image_data = image_data
     regticket_db.save()