Esempio n. 1
0
    def handle(self, *args, **options):
        # config
        network = options['network']
        _filter = options['kudos_filter']
        live = options['live']
        multiplier = options['multiplier']

        tokens = Token.objects.filter(owner_address=settings.KUDOS_OWNER_ACCOUNT, contract__network=network)
        if _filter:
            tokens = tokens.filter(name__contains=_filter)
        kudos_contract = KudosContract(network=network)._get_contract()
        w3 = get_web3(network)

        for token in tokens:
            if token.gen != 1:
                continue
            print(token)
            if live:
                _tokenId = token.token_id
                _newPriceFinney = token.price_finney * multiplier
                tx = kudos_contract.functions.setPrice(_tokenId, _newPriceFinney).buildTransaction({
                    'nonce': get_nonce(network, settings.KUDOS_OWNER_ACCOUNT),
                    'gas': 47000,
                    'gasPrice': int(recommend_min_gas_price_to_confirm_in_time(5) * 10**9),
                    'value': 0,
                })
                signed = w3.eth.account.signTransaction(tx, settings.KUDOS_PRIVATE_KEY)
                txid = w3.eth.sendRawTransaction(signed.rawTransaction).hex()
                print(txid)
Esempio n. 2
0
 def helper_tx_dict(self, minutes_to_confirm_within=1):
     """returns a dict like this: {'to': '0xd3cda913deb6f67967b99d67acdfa1712c293601', 'from': web3.eth.coinbase, 'value': 12345}"""
     from dashboard.utils import get_nonce
     return {
         'from': settings.GRANTS_OWNER_ACCOUNT,
         'nonce': get_nonce(self.grant.network, settings.GRANTS_OWNER_ACCOUNT),
         'value': 0,
         'gasPrice': int(recommend_min_gas_price_to_confirm_in_time(minutes_to_confirm_within) * 10**9),
         'gas': 204066,
     }
Esempio n. 3
0
def receive_bulk(request, secret):

    coupons = BulkTransferCoupon.objects.filter(secret=secret)
    if not coupons.exists():
        raise Http404

    coupon = coupons.first()

    if coupon.num_uses_remaining <= 0:
        messages.info(
            request,
            f'Sorry but the coupon for a free kudos has has expired.  Contact the person who sent you the coupon link, or you can still purchase one on this page.'
        )
        return redirect(coupon.token.url)

    kudos_transfer = None
    if request.user.is_authenticated:
        redemptions = BulkTransferRedemption.objects.filter(
            redeemed_by=request.user.profile, coupon=coupon)
        if redemptions.exists():
            kudos_transfer = redemptions.first().kudostransfer

    if request.POST:
        address = Web3.toChecksumAddress(
            request.POST.get('forwarding_address'))
        user = request.user
        profile = user.profile
        save_addr = request.POST.get('save_addr')
        ip_address = get_ip(request)

        # handle form submission
        if save_addr:
            profile.preferred_payout_address = address
            profile.save()

        kudos_contract_address = Web3.toChecksumAddress(
            settings.KUDOS_CONTRACT_MAINNET)
        kudos_owner_address = Web3.toChecksumAddress(
            settings.KUDOS_OWNER_ACCOUNT)
        w3 = get_web3(coupon.token.contract.network)
        contract = w3.eth.contract(
            Web3.toChecksumAddress(kudos_contract_address), abi=kudos_abi())
        tx = contract.functions.clone(
            address, coupon.token.token_id, 1).buildTransaction({
                'nonce':
                get_nonce(coupon.token.contract.network, kudos_owner_address),
                'gas':
                500000,
                'gasPrice':
                int(recommend_min_gas_price_to_confirm_in_time(5) * 10**9),
                'value':
                int(coupon.token.price_finney / 1000.0 * 10**18),
            })

        if not profile.trust_profile and profile.github_created_on > (
                timezone.now() - timezone.timedelta(days=7)):
            messages.error(
                request,
                f'Your github profile is too new.  Cannot receive kudos.')
        else:

            signed = w3.eth.account.signTransaction(tx,
                                                    settings.KUDOS_PRIVATE_KEY)
            txid = w3.eth.sendRawTransaction(signed.rawTransaction).hex()

            with transaction.atomic():
                kudos_transfer = KudosTransfer.objects.create(
                    emails=[request.user.email],
                    # For kudos, `token` is a kudos.models.Token instance.
                    kudos_token_cloned_from=coupon.token,
                    amount=0,
                    comments_public=coupon.comments_to_put_in_kudos_transfer,
                    ip=ip_address,
                    github_url='',
                    from_name=coupon.sender_profile.handle,
                    from_email='',
                    from_username=coupon.sender_profile.handle,
                    username=profile.handle,
                    network=coupon.token.contract.network,
                    from_address=settings.KUDOS_OWNER_ACCOUNT,
                    is_for_bounty_fulfiller=False,
                    metadata={'coupon_redemption': True},
                    recipient_profile=profile,
                    sender_profile=coupon.sender_profile,
                    txid=txid,
                    receive_txid=txid,
                    tx_status='pending',
                    receive_tx_status='pending',
                )

                # save to DB
                BulkTransferRedemption.objects.create(
                    coupon=coupon,
                    redeemed_by=profile,
                    ip_address=ip_address,
                    kudostransfer=kudos_transfer,
                )

                coupon.num_uses_remaining -= 1
                coupon.current_uses += 1
                coupon.save()

    title = f"Redeem AirDropped *{coupon.token.humanized_name}* Kudos"
    desc = f"This Kudos has been AirDropped to you.  About this Kudos: {coupon.token.description}"
    params = {
        'title': title,
        'card_title': title,
        'card_desc': desc,
        'avatar_url': coupon.token.img_url,
        'coupon': coupon,
        'user': request.user,
        'is_authed': request.user.is_authenticated,
        'kudos_transfer': kudos_transfer,
    }
    return TemplateResponse(request, 'transaction/receive_bulk.html', params)