From 455b4043b8ec9aef89c956b73495b69dd26f88d5 Mon Sep 17 00:00:00 2001 From: Lex Berezhny Date: Tue, 4 Aug 2020 11:33:39 -0400 Subject: [PATCH] new resolve --- lbry/extras/daemon/daemon.py | 2 ++ lbry/wallet/ledger.py | 5 ++++- lbry/wallet/network.py | 12 ++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lbry/extras/daemon/daemon.py b/lbry/extras/daemon/daemon.py index 2796719e2..4d7fcc3f6 100644 --- a/lbry/extras/daemon/daemon.py +++ b/lbry/extras/daemon/daemon.py @@ -986,10 +986,12 @@ class Daemon(metaclass=JSONRPCServerType): [--include_sent_supports] [--include_sent_tips] [--include_received_tips] + [--new_sdk_server=] Options: --urls= : (str, list) one or more urls to resolve --wallet_id= : (str) wallet to check for claim purchase reciepts + --new_sdk_server= : (str) use the new SDK server (EXPERIMENTAL) --include_purchase_receipt : (bool) lookup and include a receipt if this wallet has purchased the claim being resolved --include_is_my_output : (bool) lookup and include a boolean indicating diff --git a/lbry/wallet/ledger.py b/lbry/wallet/ledger.py index 50d68b2ac..3cae9b845 100644 --- a/lbry/wallet/ledger.py +++ b/lbry/wallet/ledger.py @@ -923,7 +923,10 @@ class Ledger(metaclass=LedgerRegistry): return txos, blocked, outputs.offset, outputs.total async def resolve(self, accounts, urls, **kwargs): - resolve = partial(self.network.retriable_call, self.network.resolve) + if 'new_sdk_server' in kwargs: + resolve = partial(self.network.new_resolve, kwargs.pop('new_sdk_server')) + else: + resolve = partial(self.network.retriable_call, self.network.resolve) urls_copy = list(urls) txos = [] while urls_copy: diff --git a/lbry/wallet/network.py b/lbry/wallet/network.py index 262f46579..29f630c10 100644 --- a/lbry/wallet/network.py +++ b/lbry/wallet/network.py @@ -5,6 +5,8 @@ from time import perf_counter from operator import itemgetter from typing import Dict, Optional, Tuple +import aiohttp + from lbry import __version__ from lbry.error import IncompatibleWalletServerError from lbry.wallet.rpc import RPCSession as BaseClientSession, Connector, RPCError, ProtocolError @@ -181,6 +183,8 @@ class Network: 'blockchain.address.subscribe': self._on_status_controller, } + self.aiohttp_session: Optional[aiohttp.ClientSession] = None + @property def config(self): return self.ledger.config @@ -207,6 +211,7 @@ class Network: async def start(self): self.running = True + self.aiohttp_session = aiohttp.ClientSession() self._switch_task = asyncio.ensure_future(self.switch_forever()) # this may become unnecessary when there are no more bugs found, # but for now it helps understanding log reports @@ -217,6 +222,7 @@ class Network: async def stop(self): if self.running: self.running = False + await self.aiohttp_session.close() self._switch_task.cancel() self.session_pool.stop() @@ -316,6 +322,12 @@ class Network: def claim_search(self, **kwargs): return self.rpc('blockchain.claimtrie.search', kwargs) + async def new_resolve(self, server, urls): + message = {"method": "resolve", "params": {"urls": urls, "protobuf": True}} + async with self.aiohttp_session.post(server, json=message) as r: + result = await r.json() + return result['result'] + class SessionPool: