Exemple #1
0
def freeze_payments(amount, network):
    if network == 'EOS_MAINNET':
        #if currency in ('EOS', 'EOSISH'):
        value = amount * 0.15 * NET_DECIMALS['EOSISH'] / NET_DECIMALS['ETH']
        value *= rate('WISH', 'EOSISH').value
        #value = float(':.4f'.format(value)
        FreezeBalance.objects.select_for_update().filter(id=1).update(
            eosish=F('eosish') + value)
        print('FREEZE', value, 'EOSISH', flush=True)
    elif network == 'TRON_MAINNET':
        #elif currency in ('TRON', 'TRONISH'):
        value = amount * 0.10 * NET_DECIMALS['TRX'] / NET_DECIMALS['ETH']
        value *= rate('WISH', 'TRONISH').value
        FreezeBalance.objects.select_for_update().filter(id=1).update(
            tronish=F('tronish') + int(value))
        wish_value = amount * 0.10
        FreezeBalance.objects.select_for_update().filter(id=1).update(
            wish=F('wish') + wish_value)
        print('FREEZE', int(value), 'TRONISH', flush=True)
        #print('FREEZE', wish_value, 'WISH', flush=True)
    #elif currency in ('BNB', 'BWISH'):
    else:
        value = amount * 0.10
        FreezeBalance.objects.select_for_update().filter(id=1).update(
            bwish=F('bwish') + value)
        print('FREEZE', value, 'BWISH', flush=True)
Exemple #2
0
def calculate_cost_eos_account(request):
    '''
    calculate cost eos account with getting params
    cpu, net, ram
    :param request: contain cpu, net, ram
    :return: cost
    '''
    token = request.META['HTTP_TOKEN']
    if not token:
        raise ValidationError({'result': 'Token not found'}, code=404)
    get_user_for_token(token)
    log_userinfo('calculate_cost_eos_account', token)
    print('data in request', request.data, flush=True)
    ram = request.data['buy_ram_kbytes']
    net = request.data['stake_net_value']
    cpu = request.data['stake_cpu_value']
    eos_cost = calc_eos_cost(cpu, net, ram)
    print('eos cost', eos_cost, flush=True)

    return JsonResponse({
        'EOS': str(eos_cost),
        'EOSISH': str(eos_cost * rate('EOS', 'EOSISH').value),
        'ETH': str(eos_cost * rate('EOS', 'ETH').value),
        'WISH': str(eos_cost * rate('EOS', 'WISH').value),
        'BTC': str(eos_cost * rate('EOS', 'BTC').value),
    })
Exemple #3
0
def exc_rate(request):
    fsym = request.query_params['fsym']
    tsyms = request.query_params['tsyms'].split(',')
    response = {}
    for tsym in tsyms:
        response[tsym] = rate(fsym, tsym).value
    print(f'{fsym} -> {tsym} rate(s) is', response, flush=True)
    return Response(response)
Exemple #4
0
def calculate_cost_eos_account_contract(request):
    '''
    calculate cost eos account
    :param request: contain contract_id
    :return: cost
    '''
    token = request.META['HTTP_TOKEN']
    if not token:
        raise ValidationError({'result': 'Token not found'}, code=404)
    user = get_user_for_token(token)
    contract_id = int(request.data['contract_id'])
    log_action_name = 'calculate_cost_eos_account_contract'
    log_userinfo(log_action_name, token, user, contract_id)
    contract = Contract.objects.get(id=contract_id)
    if contract.state != 'CREATED':
        raise ValidationError({'result': 'Wrong status in contract'}, code=404)
    if contract.contract_type != 11:
        raise ValidationError({'result': 'Wrong contract_type'}, code=404)
    if contract.user != user:
        raise ValidationError({'result': 'Wrong token'}, code=404)
    if contract.invisible:
        raise ValidationError({'result': 'Contract is deleted'}, code=404)
    details = contract.get_details()
    log_additions(log_action_name, details)
    network = Network.objects.get(name='EOS_MAINNET')
    params = {
        'stake_net_value': details.stake_net_value,
        'stake_cpu_value': details.stake_cpu_value,
        'buy_ram_kbytes': details.buy_ram_kbytes
    }
    eos_cost = ContractDetailsEOSAccount.calc_cost_eos(params, network) / 10**4
    print('eos cost', eos_cost, flush=True)

    return JsonResponse({
        'EOS': str(eos_cost),
        'EOSISH': str(eos_cost * rate('EOS', 'EOSISH').value),
        'ETH': str(eos_cost * rate('EOS', 'ETH').value),
        'WISH': str(eos_cost * rate('EOS', 'WISH').value),
        'BTC': str(eos_cost * rate('EOS', 'BTC').value),
    })
Exemple #5
0
def advanced_rate_view(request):
    fsyms = request.query_params['fsyms'].split(',')
    tsyms = request.query_params['tsyms'].split(',')
    response = {}
    for fsym in fsyms:
        rates = {}
        for tsym in tsyms:
            rate_obj = rate(fsym, tsym)
            rates[tsym] = {
                'rate': rate_obj.value,
                'is_24h_up': rate_obj.is_up_24h,
            }
        response[fsym] = rates
    return JsonResponse(response)
Exemple #6
0
 def calc_cost(kwargs, network):
     if NETWORKS[network.name]['is_free']:
         return 0
     eos_cost_base = CONTRACT_PRICE_USDT['EOS_ACCOUNT'] * NET_DECIMALS[
         'USDT']
     eos_cost = ContractDetailsEOSAccount.calc_cost_eos(
         kwargs, network) / NET_DECIMALS['EOS']
     cost = eos_cost * rate('EOS', 'ETH').value
     print('convert eos cost', cost, flush=True)
     converted_cost = round(cost, 2) * NET_DECIMALS['USDT']
     if converted_cost < eos_cost_base:
         final_cost = eos_cost_base
     else:
         final_cost = converted_cost
     return final_cost
Exemple #7
0
def deploy_eos_account(request):
    '''
    view for deploy eos ac count
    :param request: contain contract id
    :return:
    '''
    token = request.META['HTTP_TOKEN']
    if not token:
        raise ValidationError({'result': 'Token not found'}, code=404)
    user = get_user_for_token(token)
    log_action_name = 'deploy_eos_account'
    contract_id = int(request.data.get('contract_id'))
    log_userinfo(log_action_name, token, user, contract_id)
    contract = Contract.objects.get(id=contract_id)
    if contract.user != user:
        raise ValidationError({'result': 'Wrong contract_id'}, code=404)
    if contract.invisible:
        raise ValidationError({'result': 'Contract is deleted'}, code=404)
    if contract.state != 'CREATED':
        raise ValidationError({'result': 'Wrong state'}, code=404)
    contract_details = contract.get_details()
    log_additions(log_action_name, request.data)
    check_account_name(contract_details.account_name, contract.network.id)
    contract_details.predeploy_validate()
    if contract.network.id == 10:
        network = Network.objects.get(name='EOS_MAINNET')
        params = {
            'stake_net_value': contract_details.stake_net_value,
            'stake_cpu_value': contract_details.stake_cpu_value,
            'buy_ram_kbytes': contract_details.buy_ram_kbytes
        }
        eosish_cost = contract_details.calc_cost_eos(params, network)
        eos_cost = (int(eosish_cost) * rate('EOS', 'EOSISH').value)
        if 'promo' in request.data:
            promo = request.data['promo'].upper()
            user_balance = UserSiteBalance.objects.get(
                user=user, subsite__site_name=EOSISH_URL).balance
            eos_cost = check_promocode_in_api(promo, 10, user, user_balance,
                                              contract.id, eos_cost)
        if not UserSiteBalance.objects.select_for_update().filter(
                user=user, subsite__site_name=EOSISH_URL,
                balance__gte=eos_cost).update(balance=F('balance') - eos_cost):
            raise ValidationError({'result': 'You have not money'}, code=400)
    contract.state = 'WAITING_FOR_DEPLOYMENT'
    contract.save()
    queue = NETWORKS[contract.network.name]['queue']
    send_in_queue(contract.id, 'launch', queue)
    return Response({'id': contract.id, 'state': contract.state})
Exemple #8
0
def get_discount(request):
    if request.user.is_anonymous:
        raise PermissionDenied()
    host = request.META['HTTP_HOST']
    user = request.user
    contract_type = request.query_params['contract_type']
    promo_str = request.query_params['promo']
    discount = check_and_get_discount(promo_str, contract_type, user)
    answer = {'discount': discount}
    if 'contract_id' in request.query_params:
        contract = Contract.objects.get(id=request.query_params['contract_id'])
        contract_details = contract.get_details()
        if host == EOSISH_URL:
            kwargs = ContractSerializer().get_details_serializer(
                contract.contract_type)().to_representation(contract_details)
            cost = contract_details.calc_cost_eos(
                kwargs, contract.network) * (100 - discount) / 100
            answer['discount_price'] = {
                'EOS': cost,
                'EOSISH': str(float(cost) * rate('EOS', 'EOSISH').value)
            }
        elif host == MY_WISH_URL:
            options_cost = 0
            if contract.contract_type in (5, 28) and contract_details.authio:
                options_cost += AUTHIO_PRICE_USDT * NET_DECIMALS['USDT']

            if contract.contract_type in VERIFICATION_CONTRACTS_IDS and contract_details.verification:
                options_cost += VERIFICATION_PRICE_USDT * NET_DECIMALS['USDT']

            cost = (contract.cost -
                    options_cost) * (100 - discount) / 100 + options_cost
            answer['discount_price'] = {
                'USDT':
                str(cost),
                'ETH':
                str(int(
                    int(cost) / 10**6 * rate('USDT', 'ETH').value * 10**18)),
                'WISH':
                str(
                    int(
                        int(cost) / 10**6 * rate('USDT', 'WISH').value *
                        10**18)),
                'BTC':
                str(int(int(cost) / 10**6 * rate('USDT', 'BTC').value *
                        10**8)),
                'TRX':
                str(int(int(cost) * rate('ETH', 'TRX').value)),
                'TRONISH':
                str(int(int(cost) * rate('ETH', 'TRX').value))
            }
        elif host == TRON_URL:
            kwargs = ContractSerializer().get_details_serializer(
                contract.contract_type)().to_representation(contract_details)
            cost = contract_details.calc_cost_tron(
                kwargs, contract.network) * (100 - discount) / 100

            answer['discount_price'] = {'TRX': int(cost), 'TRONISH': int(cost)}
        elif host == WAVES_URL:
            kwargs = ContractSerializer().get_details_serializer(
                contract.contract_type)().to_representation(contract_details)
            cost = contract_details.calc_cost(
                kwargs, contract.network) * (100 - discount) / 100
            answer['discount_price'] = {
                'USDT':
                str(cost),
                'ETH':
                str(int(
                    int(cost) / 10**6 * rate('USDT', 'ETH').value * 10**18)),
                'WISH':
                str(
                    int(
                        int(cost) / 10**6 * rate('USDT', 'WISH').value *
                        10**18)),
                'BTC':
                str(int(int(cost) / 10**6 * rate('USDT', 'BTC').value *
                        10**8)),
                'TRX':
                str(int(int(cost) * rate('ETH', 'TRX').value)),
                'TRONISH':
                str(int(int(cost) * rate('ETH', 'TRX').value))
            }
        else:
            kwargs = ContractSerializer().get_details_serializer(
                contract.contract_type)().to_representation(contract_details)
            cost = contract_details.calc_cost(
                kwargs, contract.network) * (100 - discount) / 100
            answer['discount_price'] = {
                'ETH':
                str(cost),
                'WISH':
                str(int(cost * rate('ETH', 'WISH').value)),
                'BTC':
                str(int(cost * rate('ETH', 'BTC').value)),
                'TRX':
                str(int(cost) / 10**18 * rate('ETH', 'TRX').value * 10**6),
                'TRONISH':
                str(int(cost) / 10**18 * rate('ETH', 'TRONISH').value * 10**6)
            }

    return Response(answer)
Exemple #9
0
def eth2rub(request):
    return Response({'RUB': rate('ETH', 'RUB').value})
Exemple #10
0
def profile_view(request):
    site_name = request.META['HTTP_HOST']
    print('site is', site_name, flush=True)
    if request.user.is_anonymous:
        print('anonymous', flush=True)
        raise PermissionDenied()
    if site_name.startswith('cn'):
        site_name = site_name[2:]
    if site_name.startswith('local'):
        print('cut local')
        site_name = site_name[5:]
    if site_name.startswith('trondev'):
        site_name = site_name.replace('trondev', 'dev')
    if site_name == WAVES_URL:
        site_name = MY_WISH_URL
    if site_name == RUBIC_EXC_URL:
        site_name = SWAPS_URL
    site = SubSite.objects.get(site_name=site_name)
    user_balance = UserSiteBalance.objects.get(subsite=site, user=request.user)

    if request.user.email:
        user_name = request.user.email
    elif request.user.first_name or request.user.last_name:
        user_name = '{} {}'.format(request.user.first_name, request.user.last_name)
    else:
        user_name = request.user.username

    swaps_notifications = None
    swaps_notification_email = None
    swaps_notification_telegram_name = None
    swaps_notification_type = None

    swaps_notification_set = request.user.swapsnotificationdefaults_set.all()
    if swaps_notification_set:
        swaps_notification_set = swaps_notification_set.first()
        swaps_notification_email = swaps_notification_set.email
        swaps_notification_telegram_name = swaps_notification_set.telegram_name
        swaps_notification_type = swaps_notification_set.notification

    swaps_notifications = {
            'email': swaps_notification_email,
            'telegram_name': swaps_notification_telegram_name,
            'notification': swaps_notification_type
        }

    answer = {
            'username': user_name,
            'contracts': Contract.objects.filter(user=request.user).count(),
            'balance': str(user_balance.balance),
            'internal_address': user_balance.eth_address,
            'internal_btc_address': user_balance.btc_address,
            'use_totp': request.user.profile.use_totp,
            'is_social': request.user.profile.is_social,
            'id': request.user.id,
            'lang': request.user.profile.lang,
            'memo': user_balance.memo,
            'eos_address': 'mywishcoming',
            'bnb_address': BINANCE_PAYMENT_ADDRESS,
            'tron_address': hex2tronwif(user_balance.tron_address) if user_balance.tron_address else '',
            'usdt_balance': str(int(int(user_balance.balance) / 10 ** 18 * rate('WISH', 'USDT').value * 10 ** 6)),
            'is_swaps_admin': request.user.profile.is_swaps_admin,
            'swaps_notifications': swaps_notifications
    }
    return Response(answer)
Exemple #11
0
def create_payment(uid, tx, currency, amount, site_id, network=None):
    amount = float(amount)
    if amount == 0.0:
        return
    print('create payment')
    if (SubSite.objects.get(id=site_id).site_name == MY_WISH_URL
            or SubSite.objects.get(id=site_id).site_name == TRON_URL):
        if currency in ['BWISH', 'BBNB', 'BSCWISH', 'WWISH']:
            amount = amount * 10**10
            if currency == 'BBNB':
                currency = 'BNB'
            else:
                amount *= 1.1

        value = amount if (currency in [
            'WISH', 'BWISH', 'BSCWISH', 'WWISH'
        ]) else amount * rate(currency, 'WISH').value
        if currency == 'BTC':
            value = value * NET_DECIMALS['ETH'] / NET_DECIMALS['BTC']
        if currency in ['TRON', 'TRX', 'TRONISH']:
            value = value * NET_DECIMALS['ETH'] / NET_DECIMALS['TRX']
        if currency in ['EOS', 'EOSISH']:
            value = value * NET_DECIMALS['ETH'] / NET_DECIMALS['EOS']
        if currency == 'USDT':
            value = value * NET_DECIMALS['ETH'] / NET_DECIMALS['USDT']
    elif SubSite.objects.get(id=site_id).site_name in [
            SWAPS_URL, RUBIC_EXC_URL, RUBIC_FIN_URL
    ]:
        value = amount if currency == 'USDT' else amount * float(
            rate(currency,
                 'USDT').value) / NET_DECIMALS[currency] * NET_DECIMALS['USDT']

    elif SubSite.objects.get(id=site_id).site_name == TOKEN_PROTECTOR_URL:
        value = amount if currency == 'USDT' else amount * float(
            rate(currency,
                 'USDT').value) / NET_DECIMALS[currency] * NET_DECIMALS['USDT']
    else:
        amount = calculate_decimals(currency, amount)
        value = amount if currency == 'EOSISH' else amount * rate(
            currency, 'EOSISH').value * NET_DECIMALS['EOSISH']
        amount = add_decimals(currency, amount)
    user = User.objects.get(id=uid)
    if amount < 0.0:
        if site_id == 4 or site_id == 5:
            try:
                negative_payment(user, -value, site_id, network)
            except:
                print('-5% payment', flush=True)
                value = value * 0.95
                negative_payment(user, -value, site_id, network)
        else:
            negative_payment(user, -value, site_id, network)
    else:
        positive_payment(user, value, site_id, currency, amount)
    site = SubSite.objects.get(id=site_id)
    InternalPayment(user_id=uid,
                    delta=value,
                    tx_hash=tx,
                    original_currency=currency,
                    original_delta=str(amount),
                    site=site).save()
    print('PAYMENT: Created', flush=True)
    print(
        'PAYMENT: Received {amount} {curr} ({wish_value} WISH) from user {email}, id {user_id} with TXID: {txid} at site: {sitename}'
        .format(amount=amount,
                curr=currency,
                wish_value=value,
                email=user,
                user_id=uid,
                txid=tx,
                sitename=site_id),
        flush=True)
Exemple #12
0
def create_payment(uid, tx, currency, amount, site_id, network=None):
    amount = float(amount)
    if amount == 0.0:
        return
    print('create payment')

    if tx and InternalPayment.objects.filter(
            tx_hash=tx).count():  # tx='' if payment received from frontend
        print(f'tx hash {tx} already processed')
        raise PaymentAlreadyRegistered

    if (SubSite.objects.get(id=site_id).site_name == MY_WISH_URL
            or SubSite.objects.get(id=site_id).site_name == TRON_URL):
        if currency in ['BWISH', 'BBNB', 'BSCWISH', 'WWISH']:
            amount = amount * 10**10
            if currency == 'BBNB':
                currency = 'BNB'
            else:
                amount *= 1.1

        value = amount if (currency in [
            'WISH', 'BWISH', 'BSCWISH', 'WWISH'
        ]) else amount * rate(currency, 'WISH').value
        if currency == 'BTC':
            value = value * NET_DECIMALS['ETH'] / NET_DECIMALS['BTC']
        if currency in ['TRON', 'TRX', 'TRONISH']:
            value = value * NET_DECIMALS['ETH'] / NET_DECIMALS['TRX']
        if currency in ['EOS', 'EOSISH']:
            value = value * NET_DECIMALS['ETH'] / NET_DECIMALS['EOS']
        if currency == 'USDT':
            value = value * NET_DECIMALS['ETH'] / NET_DECIMALS['USDT']
    elif SubSite.objects.get(id=site_id).site_name in [
            SWAPS_URL, RUBIC_EXC_URL, RUBIC_FIN_URL
    ]:
        value = amount if currency == 'USDT' else amount * float(
            rate(currency,
                 'USDT').value) / NET_DECIMALS[currency] * NET_DECIMALS['USDT']

    elif SubSite.objects.get(id=site_id).site_name == TOKEN_PROTECTOR_URL:
        value = amount if currency == 'USDT' else amount * float(
            rate(currency,
                 'USDT').value) / NET_DECIMALS[currency] * NET_DECIMALS['USDT']
    else:
        amount = calculate_decimals(currency, amount)
        value = amount if currency == 'EOSISH' else amount * rate(
            currency, 'EOSISH').value * NET_DECIMALS['EOSISH']
        amount = add_decimals(currency, amount)
    user = User.objects.get(id=uid)
    if amount < 0.0:
        if site_id == 4 or site_id == 5:
            try:
                negative_payment(user, -value, site_id, network)
            except:
                print('-5% payment', flush=True)
                value = value * 0.95
                negative_payment(user, -value, site_id, network)
        else:
            negative_payment(user, -value, site_id, network)
    else:
        positive_payment(user, value, site_id, currency, amount)

        link = NETWORKS.get(network, '').get('link_tx', '').format(tx=tx)
        text = tx if not link else 'hash'
        msg = '<a>[RECEIVED NEW PAYMENT]\n{amount} {curr}\n({wish_value} WISH)\nfrom user {email}, id {user_id}</a><a href="{url}">\n{text}</a>' \
            .format(amount=make_readable(amount, currency), wish_value=make_readable(value, 'WISH'),
                    curr=currency, email=user, user_id=uid, url=link, text=text)
        transaction.on_commit(lambda: send_message_to_subs.delay(msg, True))

    site = SubSite.objects.get(id=site_id)
    InternalPayment(user_id=uid,
                    delta=value,
                    tx_hash=tx,
                    original_currency=currency,
                    original_delta=str(amount),
                    site=site).save()
    print('PAYMENT: Created', flush=True)
    print(
        'PAYMENT: Received {amount} {curr} ({wish_value} WISH) from user {email}, id {user_id} with TXID: {txid} at site: {sitename}'
        .format(amount=amount,
                curr=currency,
                wish_value=value,
                email=user,
                user_id=uid,
                txid=tx,
                sitename=site_id),
        flush=True)