tMerge pull request #4049 from SomberNight/cache_coin_price - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 646044b43122e6523253fabc2702b41101bfc5d7 DIR parent dc2bb7d81f0da8b290954ba11a27ebeb8f4a07e8 HTML Author: ThomasV <thomasv@electrum.org> Date: Tue, 6 Mar 2018 18:23:02 +0100 Merge pull request #4049 from SomberNight/cache_coin_price speed-up wallet.get_full_history: cache coin_price Diffstat: M lib/wallet.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) --- DIR diff --git a/lib/wallet.py b/lib/wallet.py t@@ -229,6 +229,8 @@ class Abstract_Wallet(PrintError): self.invoices = InvoiceStore(self.storage) self.contacts = Contacts(self.storage) + self.coin_price_cache = {} + def diagnostic_name(self): return self.basename() t@@ -1757,8 +1759,14 @@ class Abstract_Wallet(PrintError): Acquisition price of a coin. This assumes that either all inputs are mine, or no input is mine. """ + cache_key = "{}:{}:{}".format(str(txid), str(ccy), str(txin_value)) + result = self.coin_price_cache.get(cache_key, None) + if result is not None: + return result if self.txi.get(txid, {}) != {}: - return self.average_price(txid, price_func, ccy) * txin_value/Decimal(COIN) + result = self.average_price(txid, price_func, ccy) * txin_value/Decimal(COIN) + self.coin_price_cache[cache_key] = result + return result else: fiat_value = self.get_fiat_value(txid, ccy) if fiat_value is not None: t@@ -1767,6 +1775,7 @@ class Abstract_Wallet(PrintError): p = self.price_at_timestamp(txid, price_func) return p * txin_value/Decimal(COIN) + class Simple_Wallet(Abstract_Wallet): # wallet with a single keystore