def mint_kudos(kudos_contract, kudos, account, private_key, gas_price_gwei, mint_to=None, live=False, skip_sync=True, dont_wait_for_kudos_id_return_tx_hash_instead=False): image_path = kudos.get('artwork_url') if not image_path: image_name = urllib.parse.quote(kudos.get('image')) if image_name: # Support Open Sea if kudos_contract.network == 'rinkeby': image_path = f'https://ss.gitcoin.co/static/v2/images/kudos/{image_name}' elif kudos_contract.network == 'mainnet': image_path = f'https://s.gitcoin.co/static/v2/images/kudos/{image_name}' elif kudos_contract.network == 'localhost': image_path = f'v2/images/kudos/{image_name}' else: raise RuntimeError( 'Need to set the image path for that network') if kudos_contract.network == 'rinkeby': external_url = f'https://stage.gitcoin.co/kudos/{kudos_contract.address}/{kudos_contract.getLatestId() + 1}' elif kudos_contract.network == 'mainnet': external_url = f'https://gitcoin.co/kudos/{kudos_contract.address}/{kudos_contract.getLatestId() + 1}' elif kudos_contract.network == 'localhost': external_url = f'http://localhost:8000/kudos/{kudos_contract.address}/{kudos_contract.getLatestId() + 1}' else: raise RuntimeError('Need to set the external url for that network') attributes = [] # "trait_type": "investor_experience", # "value": 20, # "display_type": "boost_number", # "max_value": 100 rarity = { "trait_type": "rarity", "value": get_rarity_score(kudos['numClonesAllowed']), } attributes.append(rarity) artist = {"trait_type": "artist", "value": kudos.get('artist')} attributes.append(artist) platform = {"trait_type": "platform", "value": kudos.get('platform')} attributes.append(platform) tags = kudos['tags'] price_finney = kudos['priceFinney'] # append tags if price_finney < 2: tags.append('budget') if price_finney < 5: tags.append('affordable') if price_finney > 20: tags.append('premium') if price_finney > 200: tags.append('expensive') for tag in tags: attributes.append({"trait_type": "tag", "value": tag}) readable_name = humanize_name(kudos['name']) metadata = { 'name': readable_name, 'image': image_path, 'description': kudos['description'], 'external_url': external_url, 'background_color': 'fbfbfb', 'attributes': attributes } if kudos.get('to_address', None): mint_to = kudos_contract._w3.toChecksumAddress(kudos.get('to_address')) elif mint_to: mint_to = kudos_contract._w3.toChecksumAddress(mint_to) else: mint_to = kudos_contract._w3.toChecksumAddress( settings.KUDOS_OWNER_ACCOUNT) response = None is_live = live if is_live: try: token_uri_url = kudos_contract.create_token_uri_url(**metadata) args = (mint_to, kudos['priceFinney'], kudos['numClonesAllowed'], token_uri_url) response = kudos_contract.mint( *args, account=account, private_key=private_key, skip_sync=skip_sync, gas_price_gwei=gas_price_gwei, dont_wait_for_kudos_id_return_tx_hash_instead= dont_wait_for_kudos_id_return_tx_hash_instead, ) print('Live run - Name: ', readable_name, ' - Account: ', account, 'Minted!') except Exception as e: print(f'Error minting: {readable_name} - {e}') else: print('Dry run - Name: ', readable_name, ' - Account: ', account, 'Skipping!') return response
def ui_name(self): from kudos.utils import humanize_name return self.override_display_name if self.override_display_name else humanize_name(self.name)
def handle(self, *args, **options): # config if options['debug']: logging.basicConfig(level=logging.DEBUG) else: logging.basicConfig(level=logging.INFO) network = options['network'] gitcoin_account = options['gitcoin_account'] gas_price_gwei = options['gas_price_gwei'] kudos_filter = options['kudos_filter'] if gitcoin_account: account = settings.KUDOS_OWNER_ACCOUNT private_key = settings.KUDOS_PRIVATE_KEY else: account = options['account'] private_key = options['private_key'] skip_sync = options['skip_sync'] kudos_contract = KudosContract(network=network) yaml_file = options['yaml_file'] with open(yaml_file) as f: all_kudos = yaml.load(f) for __, kudos in enumerate(all_kudos): if kudos_filter not in kudos['name']: continue image_name = urllib.parse.quote(kudos.get('image')) if image_name: # Support Open Sea if kudos_contract.network == 'rinkeby': image_path = f'https://ss.gitcoin.co/static/v2/images/kudos/{image_name}' external_url = f'https://stage.gitcoin.co/kudos/{kudos_contract.address}/{kudos_contract.getLatestId() + 1}' elif kudos_contract.network == 'mainnet': image_path = f'https://s.gitcoin.co/static/v2/images/kudos/{image_name}' external_url = f'https://gitcoin.co/kudos/{kudos_contract.address}/{kudos_contract.getLatestId() + 1}' elif kudos_contract.network == 'localhost': image_path = f'v2/images/kudos/{image_name}' external_url = f'http://localhost:8000/kudos/{kudos_contract.address}/{kudos_contract.getLatestId() + 1}' else: raise RuntimeError( 'Need to set the image path for that network') else: image_path = '' attributes = [] # "trait_type": "investor_experience", # "value": 20, # "display_type": "boost_number", # "max_value": 100 rarity = { "trait_type": "rarity", "value": get_rarity_score(kudos['numClonesAllowed']), } attributes.append(rarity) artist = {"trait_type": "artist", "value": kudos.get('artist')} attributes.append(artist) platform = { "trait_type": "platform", "value": kudos.get('platform') } attributes.append(platform) tags = kudos['tags'] price_finney = kudos['priceFinney'] # append tags if price_finney < 2: tags.append('budget') if price_finney < 5: tags.append('affordable') if price_finney > 20: tags.append('premium') if price_finney > 200: tags.append('expensive') for tag in tags: attributes.append({"trait_type": "tag", "value": tag}) readable_name = humanize_name(kudos['name']) metadata = { 'name': readable_name, 'image': image_path, 'description': kudos['description'], 'external_url': external_url, 'background_color': 'fbfbfb', 'attributes': attributes } if not options['mint_to']: mint_to = kudos_contract._w3.toChecksumAddress( settings.KUDOS_OWNER_ACCOUNT) else: mint_to = kudos_contract._w3.toChecksumAddress( options['mint_to']) is_live = options['live'] if is_live: try: token_uri_url = kudos_contract.create_token_uri_url( **metadata) args = (mint_to, kudos['priceFinney'], kudos['numClonesAllowed'], token_uri_url) kudos_contract.mint( *args, account=account, private_key=private_key, skip_sync=skip_sync, gas_price_gwei=gas_price_gwei, ) print('Live run - Name: ', readable_name, ' - Account: ', account, 'Minted!') except Exception as e: print(f'Error minting: {readable_name} - {e}') else: print('Dry run - Name: ', readable_name, ' - Account: ', account, 'Skipping!')
def handle(self, *args, **options): # config network = options['network'] start_id = options['start_id'] kudos_contract = KudosContract(network) if options['end_id']: end_id = options['end_id'] else: end_id = kudos_contract._w3.functions.getLatestId().call() for kudos_id in range(start_id, end_id + 1): kudos = kudos_contract.getKudosById(kudos_id, to_dict=True) # Copied from mint_all_kudos image_name = kudos.get('image') if image_name: # Support Open Sea if kudos_contract.network == 'mainnet': image_path = 'http://kudosdemo.gitcoin.co/static/v2/images/kudos/' + image_name else: image_path = 'v2/images/kudos/' + image_name else: image_path = '' attributes = [] rarity = { "trait_type": "rarity", "value": get_rarity_score(kudos['numClonesAllowed']), } attributes.append(rarity) artist = {"trait_type": "artist", "value": kudos.get('artist')} attributes.append(artist) platform = { "trait_type": "platform", "value": kudos.get('platform') } attributes.append(platform) tags = kudos['tags'] # append tags if kudos['priceFinney'] < 2: tags.append('budget') if kudos['priceFinney'] < 5: tags.append('affordable') if kudos['priceFinney'] > 20: tags.append('premium') if kudos['priceFinney'] > 200: tags.append('expensive') for tag in tags: if tag: tag = {"trait_type": "tag", "value": tag} attributes.append(tag) metadata = { 'name': humanize_name(kudos['name']), 'image': image_path, 'description': kudos['description'], 'external_url': f'http://kudosdemo.gitcoin.co/kudos', 'background_color': '#fbfbfb', 'attributes': attributes } for __ in range(1, 4): try: kudos_contract.create_token_uri_url(**metadata) args = () except Exception as e: logger.error(e) logger.info("Trying the mint again...") time.sleep(2) continue else: break