Repository: spesmilo/electrum

Issue:
Newly mined coins should be shown as immature
The checkmark goes green after 6 confirmations, but that's only accurate for normal transactions and not for newly mined coins which require 100. When a deposit to the wallet is made via newly mined coins, could the status symbol update based on 100 instead of 6, and the green checkmark not appear until the 100 confirmations are up?

Took me a while to figure out why I couldn't send coins this evening since I was mistakenly thinking the checkbox meant the funds were ready for spending.



Discussion:

Resolving patch:
diff --git a/lib/wallet.py b/lib/wallet.py
--- a/lib/wallet.py
+++ b/lib/wallet.py
@@ -712,42 +712,38 @@ def get_history(self, domain=None):
         if domain is None:
             domain = self.get_account_addresses(None)
 
-        hh = []
-        # 1. Get the history of each address in the domain
+        # 1. Get the history of each address in the domain, maintain the
+        #    delta of a tx as the sum of its deltas on domain addresses
+        tx_deltas = defaultdict(int)
         for addr in domain:
             h = self.get_address_history(addr)
             for tx_hash, height in h:
                 delta = self.get_tx_delta(tx_hash, addr)
-                hh.append([addr, tx_hash, height, delta])
-
-        # 2. merge: the delta of a tx on the domain is the sum of its deltas on addresses
-        merged = {}
-        for addr, tx_hash, height, delta in hh:
-            if tx_hash not in merged:
-                merged[tx_hash] = (height, delta)
-            else:
-                h, d = merged.get(tx_hash)
-                merged[tx_hash] = (h, d + delta if (d is not None and delta is not None) else None)
+                if delta is None or tx_deltas[tx_hash] is None:
+                    tx_deltas[tx_hash] = None
+                else:
+                    tx_deltas[tx_hash] += delta
 
-        # 3. create sorted list
+        # 2. create sorted history
         history = []
-        for tx_hash, v in merged.items():
-            height, value = v
+        for tx_hash, delta in tx_deltas.items():
             conf, timestamp = self.verifier.get_confirmations(tx_hash) if self.verifier else (None, None)
-            history.append((tx_hash, conf, value, timestamp))
+            history.append((tx_hash, conf, delta, timestamp))
         history.sort(key = lambda x: self.verifier.get_txpos(x[0]))
+        history.reverse()
 
-        # 4. add balance
+        # 3. add balance
         c, u = self.get_balance(domain)
         balance = c + u
         h2 = []
-        for item in history[::-1]:
-            tx_hash, conf, value, timestamp = item
-            h2.insert(0, (tx_hash, conf, value, timestamp, balance))
-            if balance is not None and value is not None:
-                balance -= value
-            else:
+        for item in history:
+            tx_hash, conf, delta, timestamp = item
+            h2.append((tx_hash, conf, delta, timestamp, balance))
+            if balance is None or delta is None:
                 balance = None
+            else:
+                balance -= delta
+        h2.reverse()
 
         # fixme: this may happen if history is incomplete
         if balance not in [None, 0]:


Test patch: