Example #1
0
 async def get_sub_epoch_challenge_segments(
     self,
     ses_block_hash: bytes32,
 ) -> Optional[List[SubEpochChallengeSegment]]:
     cursor = await self.db.execute(
         "SELECT challenge_segments from sub_epoch_segments_v3 WHERE ses_block_hash=?", (ses_block_hash.hex(),)
     )
     row = await cursor.fetchone()
     await cursor.close()
     if row is not None:
         return SubEpochSegments.from_bytes(row[0]).challenge_segments
     return None
 async def get_sub_epoch_challenge_segments(
     self,
     sub_epoch_summary_height: uint32,
 ) -> Optional[List[SubEpochChallengeSegment]]:
     cursor = await self.db.execute(
         "SELECT challenge_segments from sub_epoch_segments_v2 WHERE ses_height=?",
         (sub_epoch_summary_height, ))
     row = await cursor.fetchone()
     await cursor.close()
     if row is not None:
         return SubEpochSegments.from_bytes(row[0]).challenge_segments
     return None
Example #3
0
    async def get_sub_epoch_challenge_segments(
        self,
        ses_block_hash: bytes32,
    ) -> Optional[List[SubEpochChallengeSegment]]:
        cached = self.ses_challenge_cache.get(ses_block_hash)
        if cached is not None:
            return cached

        async with self.db.execute(
            "SELECT challenge_segments from sub_epoch_segments_v3 WHERE ses_block_hash=?",
            (self.maybe_to_hex(ses_block_hash),),
        ) as cursor:
            row = await cursor.fetchone()

        if row is not None:
            challenge_segments = SubEpochSegments.from_bytes(row[0]).challenge_segments
            self.ses_challenge_cache.put(ses_block_hash, challenge_segments)
            return challenge_segments
        return None