示例#1
0
 async def get_transfer_count(request: RetrieveTransactionCountRequest,
                              startDate: Optional[datetime.datetime] = None,
                              endDate: Optional[datetime.datetime] = None):
     startDate = request.startDate.replace(
         tzinfo=None) if request.startDate else date_util.start_of_day()
     endDate = request.endDate.replace(
         tzinfo=None) if request.endDate else date_util.start_of_day(
             dt=date_util.datetime_from_datetime(dt=startDate, days=1))
     count = await notdManager.get_transfer_count(startDate=startDate,
                                                  endDate=endDate)
     return RetrieveTransactionCountResponse(count=count)
示例#2
0
 async def get_collection_daily_activities(
         self, address: str) -> List[CollectionDailyActivity]:
     address = chain_util.normalize_address(address)
     endDate = date_util.datetime_from_now()
     startDate = date_util.datetime_from_datetime(dt=endDate, days=-90)
     collectionActivities = await self.retriever.list_collections_activity(
         fieldFilters=[
             StringFieldFilter(
                 fieldName=CollectionHourlyActivityTable.c.address.key,
                 eq=address),
             DateFieldFilter(
                 fieldName=CollectionHourlyActivityTable.c.date.key,
                 gte=startDate),
             DateFieldFilter(
                 fieldName=CollectionHourlyActivityTable.c.date.key,
                 lt=endDate),
         ])
     delta = datetime.timedelta(days=1)
     collectionActivitiesPerDay = []
     currentDate = startDate
     while date_util.start_of_day(currentDate) <= date_util.start_of_day(
             endDate):
         saleCount = 0
         totalValue = 0
         transferCount = 0
         minimumValue = 0
         maximumValue = 0
         for collectionActivity in collectionActivities:
             if date_util.start_of_day(
                     currentDate) == date_util.start_of_day(
                         collectionActivity.date):
                 if collectionActivity.saleCount > 0:
                     saleCount += collectionActivity.saleCount
                     totalValue += collectionActivity.totalValue
                     minimumValue = min(
                         minimumValue, collectionActivity.minimumValue
                     ) if minimumValue > 0 else collectionActivity.minimumValue
                     maximumValue = max(maximumValue,
                                        collectionActivity.maximumValue)
                 transferCount += collectionActivity.transferCount
         averageValue = totalValue / saleCount if saleCount > 0 else 0
         collectionActivitiesPerDay.append(
             CollectionDailyActivity(date=currentDate,
                                     transferCount=transferCount,
                                     saleCount=saleCount,
                                     totalValue=totalValue,
                                     minimumValue=minimumValue,
                                     maximumValue=maximumValue,
                                     averageValue=averageValue))
         currentDate += delta
     return collectionActivitiesPerDay
示例#3
0
 async def retrieve_random_transfer(
         request: RetrieveRandomTransferRequest,
         startDate: Optional[datetime.datetime] = None,
         endDate: Optional[datetime.datetime] = None):
     startDate = request.startDate.replace(
         tzinfo=None) if request.startDate else date_util.start_of_day()
     endDate = request.endDate.replace(
         tzinfo=None) if request.endDate else date_util.start_of_day(
             dt=date_util.datetime_from_datetime(dt=startDate, days=1))
     randomTokenTransfer = await notdManager.retrieve_random_transfer(
         startDate=startDate, endDate=endDate)
     return RetrieveRandomTransferResponse(
         transfer=(await responseBuilder.token_transfer_from_model(
             tokenTransfer=randomTokenTransfer)))
示例#4
0
 async def retrieve_most_traded_token_transfer(
         request: RetrieveMostTradedRequest,
         startDate: Optional[datetime.datetime] = None,
         endDate: Optional[datetime.datetime] = None):
     startDate = request.startDate.replace(
         tzinfo=None) if request.startDate else date_util.start_of_day()
     endDate = request.endDate.replace(
         tzinfo=None) if request.endDate else date_util.start_of_day(
             dt=date_util.datetime_from_datetime(dt=startDate, days=1))
     mostTradedToken = await notdManager.retrieve_most_traded_token_transfer(
         startDate=startDate, endDate=endDate)
     return RetrieveMostTradedResponse(
         tradedToken=(await responseBuilder.traded_token_from_model(
             tradedToken=mostTradedToken)))
示例#5
0
 async def calculate_collection_hourly_activity(
         self, address: str,
         startDate: datetime.datetime) -> RetrievedCollectionHourlyActivity:
     address = chain_util.normalize_address(address)
     startDate = date_hour_from_datetime(startDate)
     tokenTransfers = await self.retriever.list_token_transfers(
         fieldFilters=[
             StringFieldFilter(TokenTransfersTable.c.registryAddress.key,
                               eq=address),
             DateFieldFilter(BlocksTable.c.blockDate.key, gte=startDate),
             DateFieldFilter(BlocksTable.c.blockDate.key,
                             lt=date_util.datetime_from_datetime(
                                 dt=startDate, hours=1)),
         ], )
     saleCount = 0
     transferCount = 0
     totalValue = 0
     averageValue = 0
     minimumValue = 0
     maximumValue = 0
     for tokenTransfer in tokenTransfers:
         if tokenTransfer.value > 0:
             saleCount += tokenTransfer.amount
             totalValue += tokenTransfer.value
             minimumValue = min(
                 minimumValue, tokenTransfer.value
             ) if minimumValue > 0 else tokenTransfer.value
             maximumValue = max(maximumValue, tokenTransfer.value)
         transferCount += tokenTransfer.amount
     averageValue = totalValue / saleCount if saleCount > 0 else 0
     return RetrievedCollectionHourlyActivity(address=address,
                                              date=startDate,
                                              transferCount=transferCount,
                                              saleCount=saleCount,
                                              totalValue=totalValue,
                                              minimumValue=minimumValue,
                                              maximumValue=maximumValue,
                                              averageValue=averageValue)
示例#6
0
 async def get_collection_statistics(self,
                                     address: str) -> CollectionStatistics:
     address = chain_util.normalize_address(value=address)
     startDate = date_util.start_of_day()
     endDate = date_util.start_of_day(
         dt=date_util.datetime_from_datetime(dt=startDate, days=1))
     itemCount = len(
         await self.retriever.list_token_metadatas(fieldFilters=[
             StringFieldFilter(
                 fieldName=TokenMetadatasTable.c.registryAddress.key,
                 eq=address),
         ]))
     holderCount = len(
         await self.retriever.list_token_ownerships(fieldFilters=[
             StringFieldFilter(
                 fieldName=TokenOwnershipsTable.c.registryAddress.key,
                 eq=address)
         ]))
     allCollectionActivities = await self.retriever.list_collections_activity(
         fieldFilters=[
             StringFieldFilter(
                 fieldName=CollectionHourlyActivityTable.c.address.key,
                 eq=address)
         ])
     totalTradeVolume = sum([
         collectionActivity.totalValue
         for collectionActivity in allCollectionActivities
     ])
     dayCollectionActivities = await self.retriever.list_collections_activity(
         fieldFilters=[
             StringFieldFilter(
                 fieldName=CollectionHourlyActivityTable.c.address.key,
                 eq=address),
             DateFieldFilter(
                 fieldName=CollectionHourlyActivityTable.c.date.key,
                 gte=startDate,
                 lt=endDate),
         ])
     saleCount = 0
     transferCount = 0
     tradeVolume24Hours = 0
     lowestSaleLast24Hours = 0
     highestSaleLast24Hours = 0
     for collectionActivity in dayCollectionActivities:
         saleCount += collectionActivity.saleCount
         tradeVolume24Hours += collectionActivity.totalValue
         lowestSaleLast24Hours = min(
             lowestSaleLast24Hours, collectionActivity.minimumValue
         ) if lowestSaleLast24Hours > 0 else collectionActivity.minimumValue
         highestSaleLast24Hours = max(highestSaleLast24Hours,
                                      collectionActivity.maximumValue)
         transferCount += collectionActivity.transferCount
     return CollectionStatistics(
         itemCount=itemCount,
         holderCount=holderCount,
         saleCount=saleCount,
         transferCount=transferCount,
         totalTradeVolume=totalTradeVolume,
         lowestSaleLast24Hours=lowestSaleLast24Hours,
         highestSaleLast24Hours=highestSaleLast24Hours,
         tradeVolume24Hours=tradeVolume24Hours,
     )