From 7c57dff1a97e33338879d4325741da66bf0c9778 Mon Sep 17 00:00:00 2001 From: tecnovert Date: Sat, 20 Jul 2019 19:29:48 +0200 Subject: [PATCH] Set last chain height for itx. Raise timeout to 20m. display ticker by txids in bid page. --- basicswap/basicswap.py | 36 +++++++++++++++++++++++------------- basicswap/http_server.py | 4 ++-- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/basicswap/basicswap.py b/basicswap/basicswap.py index f24315e..63cf0fa 100644 --- a/basicswap/basicswap.py +++ b/basicswap/basicswap.py @@ -121,7 +121,7 @@ SEQUENCE_LOCK_TIME = 2 SEQUENCE_LOCKTIME_GRANULARITY = 9 # 512 seconds SEQUENCE_LOCKTIME_TYPE_FLAG = (1 << 22) SEQUENCE_LOCKTIME_MASK = 0x0000ffff -INITIATE_TX_TIMEOUT = 10 * 60 +INITIATE_TX_TIMEOUT = 20 * 60 def getOfferState(state): @@ -1418,6 +1418,19 @@ class BasicSwap(): # bid saved in checkBidState + def setLastHeightChecked(self, coin_type, tx_height): + chain_name = chainparams[coin_type]['name'] + if tx_height < 1: + tx_height = self.lookupChainHeight(coin_type) + + if len(self.coin_clients[coin_type]['watched_outputs']) == 0: + self.coin_clients[coin_type]['last_height_checked'] = tx_height + self.log.debug('Start checking %s chain at height %d', chain_name, tx_height) + + if self.coin_clients[coin_type]['last_height_checked'] > tx_height: + self.coin_clients[coin_type]['last_height_checked'] = tx_height + self.log.debug('Rewind checking of %s chain to height %d', chain_name, tx_height) + def addParticipateTxn(self, bid_id, bid, coin_type, txid_hex, vout, tx_height): bid.participate_txid = bytes.fromhex(txid_hex) bid.participate_txn_n = vout @@ -1427,13 +1440,7 @@ class BasicSwap(): self.log.debug('Watching %s chain for spend of output %s %d', chain_name, txid_hex, vout) # TODO: Check connection type - if len(self.coin_clients[coin_type]['watched_outputs']) == 0: - self.coin_clients[coin_type]['last_height_checked'] = tx_height - self.log.debug('Start checking %s chain at height %d', chain_name, tx_height) - - if self.coin_clients[coin_type]['last_height_checked'] > tx_height: - self.coin_clients[coin_type]['last_height_checked'] = tx_height - self.log.debug('Rewind checking of %s chain to height %d', chain_name, tx_height) + self.setLastHeightChecked(coin_type, tx_height) self.log.debug('Adding watched output %s bid %s tx %s type %s', coin_type, bid_id.hex(), txid_hex, BidStates.SWAP_PARTICIPATING) self.coin_clients[coin_type]['watched_outputs'].append((bid_id, txid_hex, vout, BidStates.SWAP_PARTICIPATING)) @@ -1505,6 +1512,7 @@ class BasicSwap(): initiate_txnid_hex = bid.initiate_txid.hex() p2sh = self.getScriptAddress(coin_from, bid.initiate_script) index = None + tx_height = None last_initiate_txn_conf = bid.initiate_txn_conf if coin_from == Coins.PART: # Has txindex try: @@ -1514,6 +1522,10 @@ class BasicSwap(): assert(initiate_txn['vout'][vout]['value'] * COIN == bid.amount), 'Incorrect output amount in initiate txn.' bid.initiate_txn_conf = initiate_txn['confirmations'] + try: + tx_height = initiate_txn['height'] + except Exception: + tx_height = -1 index = vout except Exception: pass @@ -1526,6 +1538,7 @@ class BasicSwap(): if found: bid.initiate_txn_conf = found['n_conf'] index = found['index'] + tx_height = found['height'] if bid.initiate_txn_conf != last_initiate_txn_conf: save_bid = True @@ -1536,6 +1549,7 @@ class BasicSwap(): if bid.initiate_txn_n is None: bid.initiate_txn_n = index # Start checking for spends of initiate_txn before fully confirmed + self.setLastHeightChecked(coin_from, tx_height) self.log.debug('Adding watched output %s bid %s tx %s type %s', coin_from, bid_id.hex(), initiate_txnid_hex, BidStates.SWAP_INITIATED) self.coin_clients[coin_from]['watched_outputs'].append((bid_id, initiate_txnid_hex, bid.initiate_txn_n, BidStates.SWAP_INITIATED)) if bid.initiate_txn_state is None or bid.initiate_txn_state < TxStates.TX_SENT: @@ -1567,11 +1581,7 @@ class BasicSwap(): index = found['index'] if bid.participate_txid is None: self.log.debug('Found bid %s participate txn %s in chain %s', bid_id.hex(), found['txid'], coin_to) - if found['height'] > 1: - tx_height = found['height'] - else: - tx_height = self.lookupChainHeight(coin_to) - self.addParticipateTxn(bid_id, bid, coin_to, found['txid'], found['index'], tx_height) + self.addParticipateTxn(bid_id, bid, coin_to, found['txid'], found['index'], found['height']) bid.setPTXState(TxStates.TX_SENT) save_bid = True diff --git a/basicswap/http_server.py b/basicswap/http_server.py index ff874c5..aa4fba6 100644 --- a/basicswap/http_server.py +++ b/basicswap/http_server.py @@ -338,9 +338,9 @@ class HttpHandler(BaseHTTPRequestHandler): content += tr.format('Expired At', time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(bid.expire_at))) content += tr.format('Sent', 'True' if bid.was_sent else 'False') content += tr.format('Received', 'True' if bid.was_received else 'False') - content += tr.format('Initiate Tx', 'None' if not bid.initiate_txid else bid.initiate_txid.hex()) + content += tr.format('Initiate Tx', 'None' if not bid.initiate_txid else (bid.initiate_txid.hex() + ' ' + ticker_from)) content += tr.format('Initiate Conf', 'None' if not bid.initiate_txn_conf else bid.initiate_txn_conf) - content += tr.format('Participate Tx', 'None' if not bid.participate_txid else bid.participate_txid.hex()) + content += tr.format('Participate Tx', 'None' if not bid.participate_txid else (bid.participate_txid.hex() + ' ' + ticker_to)) content += tr.format('Participate Conf', 'None' if not bid.participate_txn_conf else bid.participate_txn_conf) if show_txns: content += tr.format('Initiate Tx Refund', 'None' if not bid.initiate_txn_refund else bid.initiate_txn_refund.hex())