diff --git a/jmclient/jmclient/taker_utils.py b/jmclient/jmclient/taker_utils.py index 516d4e9..57b4e40 100644 --- a/jmclient/jmclient/taker_utils.py +++ b/jmclient/jmclient/taker_utils.py @@ -134,16 +134,28 @@ def get_tumble_log(logsdir): return tumble_log def restart_wait(txid): - """Here txid is of form txid:N for direct utxo query. - Returns true only if the utxo is reported to have at least 1 - confirm by the blockchain interface. + """ Returns true only if the transaction txid is seen in the wallet, + and confirmed (it must be an in-wallet transaction since it always + spends coins from the wallet). """ - res = jm_single().bc_interface.query_utxo_set(txid, includeconf=True) - if not res[0]: + try: + res = jm_single().bc_interface.rpc('gettransaction', [txid, True]) + except JsonRpcError as e: return False - if res[0]['confirms'] > 0: + if not res: + return False + if "confirmations" not in res: + log.debug("Malformed gettx result: " + str(res)) + return False + if res["confirmations"] == 0: + return False + if res["confirmations"] < 0: + log.warn("Tx: " + txid + " has a conflict, abandoning.") + sys.exit(0) + else: + log.debug("Tx: " + str(txid) + " has " + str( + res["confirmations"]) + " confirmations.") return True - return False def restart_waiter(txid): """Given a txid, wait for confirmation by polling the blockchain diff --git a/scripts/joinmarket-qt.py b/scripts/joinmarket-qt.py index 9676017..368d55c 100644 --- a/scripts/joinmarket-qt.py +++ b/scripts/joinmarket-qt.py @@ -582,7 +582,7 @@ class SpendTab(QWidget): #since we already updated state to running, user cannot #start another transactions while waiting. Also, use :0 because #it always exists - self.waitingtxid=txid+":0" + self.waitingtxid=txid self.restartTimer.timeout.connect(self.restartWaitWrap) self.restartTimer.start(5000) return diff --git a/scripts/tumbler.py b/scripts/tumbler.py index 04d3d3b..2c0d7ee 100644 --- a/scripts/tumbler.py +++ b/scripts/tumbler.py @@ -72,7 +72,7 @@ def main(): #ensure last transaction is confirmed before restart tumble_log.info("WAITING TO RESTART...") txid = schedule[0][5] - restart_waiter(txid + ":0") #add 0 index because all have it + restart_waiter(txid) #remove the already-done entry (this connects to the other TODO, #probably better *not* to truncate the done-already txs from file, #but simplest for now.