예제 #1
0
    def issue_bounty(self, bounty_id, inputs, event_timestamp):
        data_hash = inputs.get('data', 'invalid')
        event_date = datetime.datetime.fromtimestamp(int(event_timestamp))
        ipfs_data = map_bounty_data(data_hash, bounty_id)
        token_data = map_token_data(inputs.get('paysTokens'),
                                    inputs.get('tokenContract'),
                                    inputs.get('fulfillmentAmount'))

        plucked_inputs = {
            key: inputs.get(key)
            for key in issue_bounty_input_keys
        }

        bounty_data = {
            'id': bounty_id,
            'bounty_id': bounty_id,
            'issuer': inputs.get('issuer', '').lower(),
            'deadline': getDateTimeFromTimestamp(inputs.get('deadline', None)),
            'bountyStage': DRAFT_STAGE,
            'bounty_created': event_date,
        }

        bounty_serializer = BountySerializer(data={
            **bounty_data,
            **plucked_inputs,
            **ipfs_data,
            **token_data
        })
        bounty_serializer.is_valid(raise_exception=True)
        saved_bounty = bounty_serializer.save()
        saved_bounty.save_and_clear_categories(
            ipfs_data.get('data_categories'))
        saved_bounty.record_bounty_state(event_date)
        return saved_bounty
 def update(self, instance, validated_data):
     super(DraftBountyWriteSerializer, self).update(instance,
                                                    validated_data)
     token_data = map_token_data(str(instance.token_version),
                                 validated_data.get('token_contract'),
                                 validated_data.get('fulfillment_amount'))
     instance.token_symbol = token_data.get('token_symbol')
     instance.token_decimals = token_data.get('token_decimals')
     instance.token_contract = token_data.get('token_contract')
     instance.usd_price = token_data.get('usd_price')
     instance.save()
     return instance
예제 #3
0
 def update(self, instance, validated_data):
     super(
         DraftBountyWriteSerializer,
         self).update(
         instance,
         validated_data)
     token_data = map_token_data(
         instance.paysTokens,
         instance.tokenContract,
         instance.fulfillmentAmount)
     instance.tokenSymbol = token_data.get('tokenSymbol')
     instance.tokenDecimals = token_data.get('tokenDecimals')
     instance.token_id = token_data.get('token')
     instance.usd_price = token_data.get('usd_price')
     instance.save()
     return instance
 def create(self, validated_data):
     instance = super(DraftBountyWriteSerializer,
                      self).create(validated_data)
     request = self.context.get('request')
     user = request.current_user
     instance.user = user
     token_data = map_token_data(str(instance.token_version),
                                 validated_data.get('token_contract'),
                                 validated_data.get('fulfillment_amount'))
     instance.token_symbol = token_data.get('token_symbol')
     instance.token_decimals = token_data.get('token_decimals')
     instance.token_contract = token_data.get('token_contract')
     instance.usd_price = token_data.get('usd_price')
     instance.issuer = user.public_address
     # instance.attached_url = validated_data.get('attached_url')
     instance.save()
     return instance
예제 #5
0
 def create(self, validated_data):
     instance = super(
         DraftBountyWriteSerializer,
         self).create(validated_data)
     request = self.context.get('request')
     user = request.current_user
     instance.user = user
     token_data = map_token_data(
         validated_data.get('paysTokens'),
         validated_data.get('tokenContract'),
         validated_data.get('fulfillmentAmount'))
     instance.tokenSymbol = token_data.get('tokenSymbol')
     instance.tokenDecimals = token_data.get('tokenDecimals')
     instance.token_id = token_data.get('token')
     instance.usd_price = token_data.get('usd_price')
     instance.issuer = user.public_address
     instance.save()
     return instance
예제 #6
0
    def issue_bounty(self, bounty_id, contract_version, **kwargs):
        event_date = datetime.datetime.fromtimestamp(
            int(kwargs.get('event_timestamp')))

        ipfs_data = map_bounty_data(kwargs.get('data', ''), bounty_id)
        token_data = map_token_data(kwargs.get('token_version'),
                                    kwargs.get('token'), 0)

        # TODO what happens if issuers or approvers is actually blank?
        contract_state = {'issuers': {}, 'approvers': {}}
        issuers = []
        for index, issuer in enumerate(kwargs.get('issuers', [])):
            user = User.objects.get_or_create(public_address=issuer.lower())[0]
            issuers.append(user.pk)
            contract_state['issuers'].update({issuer.lower(): index})

        approvers = []
        for index, approver in enumerate(kwargs.get('approvers', [])):
            user = User.objects.get_or_create(
                public_address=approver.lower())[0]
            approvers.append(user.pk)
            contract_state['approvers'].update({approver.lower(): index})

        bounty_data = {
            'bounty_id': bounty_id,
            'contract_version': contract_version,

            # legacy for stb 1.0
            'user': issuers[0],
            'issuer': kwargs.get('issuers')[0].lower(),
            ###
            'issuers': issuers,
            'approvers': approvers,
            'contract_state': json.dumps(contract_state),
            'deadline': getDateTimeFromTimestamp(kwargs.get('deadline', None)),
            'bounty_stage': DEAD_STAGE,
            'bounty_created': event_date,
        }
        print('contract version')
        print(contract_version)
        print('fulfillment amount')
        print(ipfs_data.get('fulfillmentAmount'))

        if contract_version == STANDARD_BOUNTIES_V1:
            bounty_data.update(
                {'fulfillment_amount': kwargs.get('fulfillment_amount')})
        else:
            bounty_data.update(
                {'fulfillment_amount': ipfs_data.get('fulfillmentAmount')})

        bounty_serializer = BountySerializer(data={
            **bounty_data,
            **ipfs_data,
            **token_data
        })

        bounty_serializer.is_valid(raise_exception=True)

        saved_bounty = bounty_serializer.save()
        saved_bounty.save_and_clear_categories(
            ipfs_data.get('data_categories'))
        saved_bounty.bounty_stage = ACTIVE_STAGE
        saved_bounty.record_bounty_state(event_date)

        uid = saved_bounty.uid

        if uid:
            DraftBounty.objects.filter(uid=uid).update(on_chain=True)

        return saved_bounty