diff --git a/lbry/wallet/ledger.py b/lbry/wallet/ledger.py index c29c835c9..c68ad3407 100644 --- a/lbry/wallet/ledger.py +++ b/lbry/wallet/ledger.py @@ -937,6 +937,11 @@ class Ledger(metaclass=LedgerRegistry): return self.db.get_purchase_count(**constraints) async def _resolve_for_local_results(self, accounts, txos): + txos = await self._resolve_for_local_claim_results(accounts, txos) + txos = await self._resolve_for_local_support_results(accounts, txos) + return txos + + async def _resolve_for_local_claim_results(self, accounts, txos): results = [] response = await self.resolve( accounts, [txo.permanent_url for txo in txos if txo.can_decode_claim] @@ -952,6 +957,23 @@ class Ledger(metaclass=LedgerRegistry): results.append(txo) return results + async def _resolve_for_local_support_results(self, accounts, txos): + channel_ids = set() + signed_support_txos = [] + for txo in txos: + support = txo.can_decode_support + if support and support.signing_channel_id: + channel_ids.add(support.signing_channel_id) + signed_support_txos.append(txo) + if channel_ids: + channels = { + channel.claim_id: channel for channel in + (await self.claim_search(accounts, claim_ids=list(channel_ids)))[0] + } + for txo in signed_support_txos: + txo.channel = channels.get(txo.support.signing_channel_id) + return txos + async def get_claims(self, resolve=False, **constraints): claims = await self.db.get_claims(**constraints) if resolve: diff --git a/tests/integration/blockchain/test_claim_commands.py b/tests/integration/blockchain/test_claim_commands.py index 5ec878947..1c08beb0d 100644 --- a/tests/integration/blockchain/test_claim_commands.py +++ b/tests/integration/blockchain/test_claim_commands.py @@ -461,6 +461,17 @@ class TransactionCommands(ClaimTestCase): class TransactionOutputCommands(ClaimTestCase): + async def test_txo_list_resolve_supports(self): + channel = self.get_claim_id(await self.channel_create('@identity')) + stream = self.get_claim_id(await self.stream_create()) + support = await self.support_create(stream, channel_id=channel) + r, = await self.txo_list(type='support') + self.assertEqual(r['txid'], support['txid']) + self.assertNotIn('name', r['signing_channel']) + r, = await self.txo_list(type='support', resolve=True) + self.assertIn('name', r['signing_channel']) + self.assertEqual(r['signing_channel']['name'], '@identity') + async def test_txo_list_by_channel_filtering(self): channel_foo = self.get_claim_id(await self.channel_create('@foo')) channel_bar = self.get_claim_id(await self.channel_create('@bar'))