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)
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, }
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)