commit 1e518e7b640adaa0d504f1c8f52c1ace93ff91ce
parent d12661a385defc50b6c8f8a870d6366b302fe3dc
Author: ThomasV <thomasv@electrum.org>
Date: Mon, 10 Oct 2016 19:13:34 +0200
add number of confirmations in payment request status. fixes #1757
Diffstat:
1 file changed, 28 insertions(+), 3 deletions(-)
diff --git a/lib/wallet.py b/lib/wallet.py
@@ -1071,6 +1071,27 @@ class Abstract_Wallet(PrintError):
if addrs:
return addrs[0]
+ def get_payment_status(self, address, amount):
+ local_height = self.get_local_height()
+ received, sent = self.get_addr_io(address)
+ l = []
+ for txo, x in received.items():
+ h, v, is_cb = x
+ txid, n = txo.split(':')
+ info = self.verified_tx.get(txid)
+ if info:
+ tx_height, timestamp, pos = info
+ conf = local_height - tx_height
+ else:
+ conf = 0
+ l.append((conf, v))
+ vsum = 0
+ for conf, v in reversed(sorted(l)):
+ vsum += v
+ if vsum >= amount:
+ return True, conf
+ return False, None
+
def get_payment_request(self, addr, config):
import util
r = self.receive_requests.get(addr)
@@ -1078,7 +1099,10 @@ class Abstract_Wallet(PrintError):
return
out = copy.copy(r)
out['URI'] = 'bitcoin:' + addr + '?amount=' + util.format_satoshis(out.get('amount'))
- out['status'] = self.get_request_status(addr)
+ status, conf = self.get_request_status(addr)
+ out['status'] = status
+ if conf is not None:
+ out['confirmations'] = conf
# check if bip70 file exists
rdir = config.get('requests_dir')
if rdir:
@@ -1117,9 +1141,10 @@ class Abstract_Wallet(PrintError):
expiration = r.get('exp')
if expiration and type(expiration) != int:
expiration = 0
+ conf = None
if amount:
if self.up_to_date:
- paid = amount <= self.get_addr_received(address)
+ paid, conf = self.get_payment_status(address, amount)
status = PR_PAID if paid else PR_UNPAID
if status == PR_UNPAID and expiration is not None and time.time() > timestamp + expiration:
status = PR_EXPIRED
@@ -1127,7 +1152,7 @@ class Abstract_Wallet(PrintError):
status = PR_UNKNOWN
else:
status = PR_UNKNOWN
- return status
+ return status, conf
def make_payment_request(self, addr, amount, message, expiration):
timestamp = int(time.time())