diff --git a/lbry/wallet/server/leveldb.py b/lbry/wallet/server/leveldb.py index 51a397c84..f39b5ceda 100644 --- a/lbry/wallet/server/leveldb.py +++ b/lbry/wallet/server/leveldb.py @@ -667,8 +667,8 @@ class LevelDB: 'tx_num': claim.tx_num, 'tx_nout': claim.position, 'amount': claim.amount, - 'timestamp': 0, # TODO: fix - 'creation_timestamp': 0, # TODO: fix + 'timestamp': self.estimate_timestamp(claim.height), + 'creation_timestamp': self.estimate_timestamp(claim.creation_height), 'height': claim.height, 'creation_height': claim.creation_height, 'activation_height': claim.activation_height, @@ -713,8 +713,10 @@ class LevelDB: value['duration'] = reposted_duration elif metadata.is_stream and (metadata.stream.video.duration or metadata.stream.audio.duration): value['duration'] = metadata.stream.video.duration or metadata.stream.audio.duration - if metadata.is_stream and metadata.stream.release_time: - value['release_time'] = metadata.stream.release_time + if metadata.is_stream: + value['release_time'] = metadata.stream.release_time or value['creation_timestamp'] + elif metadata.is_repost or metadata.is_collection: + value['release_time'] = value['creation_timestamp'] return value async def all_claims_producer(self, batch_size=500_000): @@ -871,6 +873,11 @@ class LevelDB: assert len(headers) - 1 == self.db_height, f"{len(headers)} vs {self.db_height}" self.headers = headers + def estimate_timestamp(self, height: int) -> int: + if height < len(self.headers): + return struct.unpack('<I', self.headers[height][100:104])[0] + return int(160.6855883050695 * height) + async def open_dbs(self): if self.db: return diff --git a/tests/integration/blockchain/test_claim_commands.py b/tests/integration/blockchain/test_claim_commands.py index f60fcb455..448c6c721 100644 --- a/tests/integration/blockchain/test_claim_commands.py +++ b/tests/integration/blockchain/test_claim_commands.py @@ -1764,6 +1764,15 @@ class StreamCommands(ClaimTestCase): self.assertItemCount(await self.daemon.jsonrpc_claim_list(account_id=self.account.id), 3) self.assertItemCount(await self.daemon.jsonrpc_claim_list(account_id=account2_id), 1) + self.assertEqual(3, len(await self.claim_search(release_time='>0', order_by=['release_time']))) + self.assertEqual(3, len(await self.claim_search(release_time='>=0', order_by=['release_time']))) + self.assertEqual(4, len(await self.claim_search(order_by=['release_time']))) + self.assertEqual(3, len(await self.claim_search(claim_type='stream', order_by=['release_time']))) + self.assertEqual(1, len(await self.claim_search(claim_type='channel', order_by=['release_time']))) + self.assertEqual(1, len(await self.claim_search(release_time='>=123456', order_by=['release_time']))) + self.assertEqual(1, len(await self.claim_search(release_time='>123456', order_by=['release_time']))) + self.assertEqual(2, len(await self.claim_search(release_time='<123457', order_by=['release_time']))) + async def test_setting_fee_fields(self): tx = await self.out(self.stream_create('paid-stream')) txo = tx['outputs'][0]