fix tx.get_value()
authorecdsa <ecdsa@github>
Sat, 16 Mar 2013 21:04:28 +0000 (22:04 +0100)
committerecdsa <ecdsa@github>
Sat, 16 Mar 2013 21:04:28 +0000 (22:04 +0100)
lib/bitcoin.py

index 1d297ba..6a8c486 100644 (file)
@@ -805,6 +805,7 @@ class Transaction:
         # return the balance for that tx
         is_send = False
         is_pruned = False
+        is_partial = False
         v_in = v_out = v_out_mine = 0
 
         for item in self.inputs:
@@ -818,7 +819,9 @@ class Transaction:
                 else:
                     v_in += value
             else:
-                is_pruned = True
+                is_partial = True
+
+        if not is_send: is_partial = False
                     
         for item in self.outputs:
             addr, value = item
@@ -826,11 +829,7 @@ class Transaction:
             if addr in addresses:
                 v_out_mine += value
 
-        if not is_pruned:
-            # all inputs are mine:
-            fee = v_out - v_in
-            v = v_out_mine - v_in
-        else:
+        if is_pruned:
             # some inputs are mine:
             fee = None
             if is_send:
@@ -838,7 +837,18 @@ class Transaction:
             else:
                 # no input is mine
                 v = v_out_mine
-            
+
+        else:
+            v = v_out_mine - v_in
+
+            if is_partial:
+                # some inputs are mine, but not all
+                fee = None
+                is_send = v < 0
+            else:
+                # all inputs are mine
+                fee = v_out - v_in
+
         return is_send, v, fee
 
     def as_dict(self):