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
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
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
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