예제 #1
0
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
예제 #2
0
파일: models.py 프로젝트: vikasvmads/web
 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)
예제 #3
0
    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!')
예제 #4
0
    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