ui: Don't show bids on expired offers as available.
This commit is contained in:
parent
c322c9ae0c
commit
c2d6cdafdd
@ -733,7 +733,7 @@ class BasicSwap(BaseApp):
|
|||||||
nm += 1
|
nm += 1
|
||||||
self.log.info('Scanned %d unread messages.', nm)
|
self.log.info('Scanned %d unread messages.', nm)
|
||||||
|
|
||||||
def stopDaemon(self, coin):
|
def stopDaemon(self, coin) -> None:
|
||||||
if coin == Coins.XMR:
|
if coin == Coins.XMR:
|
||||||
return
|
return
|
||||||
num_tries = 10
|
num_tries = 10
|
||||||
@ -762,13 +762,13 @@ class BasicSwap(BaseApp):
|
|||||||
self.log.error(traceback.format_exc())
|
self.log.error(traceback.format_exc())
|
||||||
raise ValueError('Could not stop {}'.format(str(coin)))
|
raise ValueError('Could not stop {}'.format(str(coin)))
|
||||||
|
|
||||||
def stopDaemons(self):
|
def stopDaemons(self) -> None:
|
||||||
for c in self.activeCoins():
|
for c in self.activeCoins():
|
||||||
chain_client_settings = self.getChainClientSettings(c)
|
chain_client_settings = self.getChainClientSettings(c)
|
||||||
if chain_client_settings['manage_daemon'] is True:
|
if chain_client_settings['manage_daemon'] is True:
|
||||||
self.stopDaemon(c)
|
self.stopDaemon(c)
|
||||||
|
|
||||||
def waitForDaemonRPC(self, coin_type, with_wallet=True):
|
def waitForDaemonRPC(self, coin_type, with_wallet=True) -> None:
|
||||||
for i in range(self.startup_tries):
|
for i in range(self.startup_tries):
|
||||||
if not self.is_running:
|
if not self.is_running:
|
||||||
return
|
return
|
||||||
@ -781,7 +781,7 @@ class BasicSwap(BaseApp):
|
|||||||
self.log.error('Can\'t connect to %s RPC, exiting.', coin_type)
|
self.log.error('Can\'t connect to %s RPC, exiting.', coin_type)
|
||||||
self.stopRunning(1) # systemd will try to restart the process if fail_code != 0
|
self.stopRunning(1) # systemd will try to restart the process if fail_code != 0
|
||||||
|
|
||||||
def checkSynced(self, coin_from, coin_to):
|
def checkSynced(self, coin_from, coin_to) -> None:
|
||||||
check_coins = (coin_from, coin_to)
|
check_coins = (coin_from, coin_to)
|
||||||
for c in check_coins:
|
for c in check_coins:
|
||||||
if self.coin_clients[c]['connection_type'] != 'rpc':
|
if self.coin_clients[c]['connection_type'] != 'rpc':
|
||||||
@ -792,12 +792,12 @@ class BasicSwap(BaseApp):
|
|||||||
if synced < 1.0:
|
if synced < 1.0:
|
||||||
raise ValueError('{} chain is still syncing, currently at {}.'.format(self.coin_clients[c]['name'], synced))
|
raise ValueError('{} chain is still syncing, currently at {}.'.format(self.coin_clients[c]['name'], synced))
|
||||||
|
|
||||||
def isSystemUnlocked(self):
|
def isSystemUnlocked(self) -> bool:
|
||||||
# TODO - Check all active coins
|
# TODO - Check all active coins
|
||||||
ci = self.ci(Coins.PART)
|
ci = self.ci(Coins.PART)
|
||||||
return not ci.isWalletLocked()
|
return not ci.isWalletLocked()
|
||||||
|
|
||||||
def checkSystemStatus(self):
|
def checkSystemStatus(self) -> None:
|
||||||
ci = self.ci(Coins.PART)
|
ci = self.ci(Coins.PART)
|
||||||
if ci.isWalletLocked():
|
if ci.isWalletLocked():
|
||||||
raise LockedCoinError(Coins.PART)
|
raise LockedCoinError(Coins.PART)
|
||||||
@ -810,7 +810,7 @@ class BasicSwap(BaseApp):
|
|||||||
if self.coin_clients[c]['connection_type'] == 'rpc':
|
if self.coin_clients[c]['connection_type'] == 'rpc':
|
||||||
yield c
|
yield c
|
||||||
|
|
||||||
def changeWalletPasswords(self, old_password, new_password, coin=None):
|
def changeWalletPasswords(self, old_password, new_password, coin=None) -> None:
|
||||||
# Only the main wallet password is changed for monero, avoid issues by preventing until active swaps are complete
|
# Only the main wallet password is changed for monero, avoid issues by preventing until active swaps are complete
|
||||||
if len(self.swaps_in_progress) > 0:
|
if len(self.swaps_in_progress) > 0:
|
||||||
raise ValueError('Can\'t change passwords while swaps are in progress')
|
raise ValueError('Can\'t change passwords while swaps are in progress')
|
||||||
@ -840,7 +840,7 @@ class BasicSwap(BaseApp):
|
|||||||
if coin is None or coin == Coins.PART:
|
if coin is None or coin == Coins.PART:
|
||||||
self._is_encrypted, self._is_locked = self.ci(Coins.PART).isWalletEncryptedLocked()
|
self._is_encrypted, self._is_locked = self.ci(Coins.PART).isWalletEncryptedLocked()
|
||||||
|
|
||||||
def unlockWallets(self, password, coin=None):
|
def unlockWallets(self, password, coin=None) -> None:
|
||||||
self._read_zmq_queue = False
|
self._read_zmq_queue = False
|
||||||
for c in self.activeCoins():
|
for c in self.activeCoins():
|
||||||
if coin and c != coin:
|
if coin and c != coin:
|
||||||
@ -852,7 +852,7 @@ class BasicSwap(BaseApp):
|
|||||||
self.loadFromDB()
|
self.loadFromDB()
|
||||||
self._read_zmq_queue = True
|
self._read_zmq_queue = True
|
||||||
|
|
||||||
def lockWallets(self, coin=None):
|
def lockWallets(self, coin=None) -> None:
|
||||||
self._read_zmq_queue = False
|
self._read_zmq_queue = False
|
||||||
self.swaps_in_progress.clear()
|
self.swaps_in_progress.clear()
|
||||||
|
|
||||||
@ -864,7 +864,7 @@ class BasicSwap(BaseApp):
|
|||||||
self._is_locked = True
|
self._is_locked = True
|
||||||
self._read_zmq_queue = True
|
self._read_zmq_queue = True
|
||||||
|
|
||||||
def initialiseWallet(self, coin_type, raise_errors=False):
|
def initialiseWallet(self, coin_type, raise_errors=False) -> None:
|
||||||
if coin_type == Coins.PART:
|
if coin_type == Coins.PART:
|
||||||
return
|
return
|
||||||
ci = self.ci(coin_type)
|
ci = self.ci(coin_type)
|
||||||
@ -1544,7 +1544,7 @@ class BasicSwap(BaseApp):
|
|||||||
self.log.info('Sent OFFER %s', offer_id.hex())
|
self.log.info('Sent OFFER %s', offer_id.hex())
|
||||||
return offer_id
|
return offer_id
|
||||||
|
|
||||||
def revokeOffer(self, offer_id, security_token=None):
|
def revokeOffer(self, offer_id, security_token=None) -> None:
|
||||||
self.log.info('Revoking offer %s', offer_id.hex())
|
self.log.info('Revoking offer %s', offer_id.hex())
|
||||||
|
|
||||||
session = self.openSession()
|
session = self.openSession()
|
||||||
@ -1568,7 +1568,7 @@ class BasicSwap(BaseApp):
|
|||||||
finally:
|
finally:
|
||||||
self.closeSession(session, commit=False)
|
self.closeSession(session, commit=False)
|
||||||
|
|
||||||
def archiveOffer(self, offer_id):
|
def archiveOffer(self, offer_id) -> None:
|
||||||
self.log.info('Archiving offer %s', offer_id.hex())
|
self.log.info('Archiving offer %s', offer_id.hex())
|
||||||
session = self.openSession()
|
session = self.openSession()
|
||||||
try:
|
try:
|
||||||
@ -1582,7 +1582,7 @@ class BasicSwap(BaseApp):
|
|||||||
finally:
|
finally:
|
||||||
self.closeSession(session)
|
self.closeSession(session)
|
||||||
|
|
||||||
def grindForEd25519Key(self, coin_type, evkey, key_path_base):
|
def grindForEd25519Key(self, coin_type, evkey, key_path_base) -> bytes:
|
||||||
ci = self.ci(coin_type)
|
ci = self.ci(coin_type)
|
||||||
nonce = 1
|
nonce = 1
|
||||||
while True:
|
while True:
|
||||||
@ -1596,7 +1596,7 @@ class BasicSwap(BaseApp):
|
|||||||
if nonce > 1000:
|
if nonce > 1000:
|
||||||
raise ValueError('grindForEd25519Key failed')
|
raise ValueError('grindForEd25519Key failed')
|
||||||
|
|
||||||
def getWalletKey(self, coin_type, key_num, for_ed25519=False):
|
def getWalletKey(self, coin_type, key_num, for_ed25519=False) -> bytes:
|
||||||
evkey = self.callcoinrpc(Coins.PART, 'extkey', ['account', 'default', 'true'])['evkey']
|
evkey = self.callcoinrpc(Coins.PART, 'extkey', ['account', 'default', 'true'])['evkey']
|
||||||
|
|
||||||
key_path_base = '44445555h/1h/{}/{}'.format(int(coin_type), key_num)
|
key_path_base = '44445555h/1h/{}/{}'.format(int(coin_type), key_num)
|
||||||
@ -1607,7 +1607,7 @@ class BasicSwap(BaseApp):
|
|||||||
|
|
||||||
return self.grindForEd25519Key(coin_type, evkey, key_path_base)
|
return self.grindForEd25519Key(coin_type, evkey, key_path_base)
|
||||||
|
|
||||||
def getPathKey(self, coin_from, coin_to, offer_created_at, contract_count, key_no, for_ed25519=False):
|
def getPathKey(self, coin_from, coin_to, offer_created_at: int, contract_count: int, key_no: int, for_ed25519: bool = False) -> bytes:
|
||||||
evkey = self.callcoinrpc(Coins.PART, 'extkey', ['account', 'default', 'true'])['evkey']
|
evkey = self.callcoinrpc(Coins.PART, 'extkey', ['account', 'default', 'true'])['evkey']
|
||||||
ci = self.ci(coin_to)
|
ci = self.ci(coin_to)
|
||||||
|
|
||||||
@ -4250,7 +4250,7 @@ class BasicSwap(BaseApp):
|
|||||||
total_bids_value_multiplier = opts.get('total_bids_value_multiplier', 1.0)
|
total_bids_value_multiplier = opts.get('total_bids_value_multiplier', 1.0)
|
||||||
if total_bids_value_multiplier > 0.0:
|
if total_bids_value_multiplier > 0.0:
|
||||||
if total_bids_value + bid.amount > offer.amount_from * total_bids_value_multiplier:
|
if total_bids_value + bid.amount > offer.amount_from * total_bids_value_multiplier:
|
||||||
raise AutomationConstraint('Over remaining offer value {}'.format(offer.amount_from * total_bids_value_multiplie - total_bids_value))
|
raise AutomationConstraint('Over remaining offer value {}'.format(offer.amount_from * total_bids_value_multiplier - total_bids_value))
|
||||||
|
|
||||||
num_not_completed = 0
|
num_not_completed = 0
|
||||||
for active_bid in active_bids:
|
for active_bid in active_bids:
|
||||||
@ -5716,10 +5716,12 @@ class BasicSwap(BaseApp):
|
|||||||
|
|
||||||
now = int(time.time())
|
now = int(time.time())
|
||||||
q_str = '''SELECT
|
q_str = '''SELECT
|
||||||
COUNT(CASE WHEN was_sent THEN 1 ELSE NULL END) AS count_sent,
|
COUNT(CASE WHEN b.was_sent THEN 1 ELSE NULL END) AS count_sent,
|
||||||
COUNT(CASE WHEN was_received THEN 1 ELSE NULL END) AS count_received,
|
COUNT(CASE WHEN b.was_received THEN 1 ELSE NULL END) AS count_received,
|
||||||
COUNT(CASE WHEN was_received AND state = {} AND expire_at > {} THEN 1 ELSE NULL END) AS count_available
|
COUNT(CASE WHEN b.was_received AND b.state = {} AND b.expire_at > {} AND o.expire_at > {} THEN 1 ELSE NULL END) AS count_available
|
||||||
FROM bids WHERE active_ind = 1'''.format(BidStates.BID_RECEIVED, now)
|
FROM bids b
|
||||||
|
JOIN offers o ON b.offer_id = o.offer_id
|
||||||
|
WHERE b.active_ind = 1'''.format(BidStates.BID_RECEIVED, now, now)
|
||||||
q = self.engine.execute(q_str).first()
|
q = self.engine.execute(q_str).first()
|
||||||
bids_sent = q[0]
|
bids_sent = q[0]
|
||||||
bids_received = q[1]
|
bids_received = q[1]
|
||||||
@ -6028,10 +6030,10 @@ class BasicSwap(BaseApp):
|
|||||||
with_available_or_active = filters.get('with_available_or_active', False)
|
with_available_or_active = filters.get('with_available_or_active', False)
|
||||||
with_expired = filters.get('with_expired', True)
|
with_expired = filters.get('with_expired', True)
|
||||||
if with_available_or_active:
|
if with_available_or_active:
|
||||||
query_str += 'AND (bids.state NOT IN ({}, {}, {}, {}, {}) AND (bids.state > {} OR bids.expire_at > {})) '.format(BidStates.SWAP_COMPLETED, BidStates.BID_ERROR, BidStates.BID_REJECTED, BidStates.SWAP_TIMEDOUT, BidStates.BID_ABANDONED, BidStates.BID_RECEIVED, now)
|
query_str += 'AND (bids.state NOT IN ({}, {}, {}, {}, {}) AND (bids.state > {} OR (bids.expire_at > {} AND offers.expire_at > {}))) '.format(BidStates.SWAP_COMPLETED, BidStates.BID_ERROR, BidStates.BID_REJECTED, BidStates.SWAP_TIMEDOUT, BidStates.BID_ABANDONED, BidStates.BID_RECEIVED, now, now)
|
||||||
else:
|
else:
|
||||||
if with_expired is not True:
|
if with_expired is not True:
|
||||||
query_str += 'AND bids.expire_at > {} '.format(now)
|
query_str += 'AND bids.expire_at > {} AND offers.expire_at > {} '.format(now, now)
|
||||||
|
|
||||||
sort_dir = filters.get('sort_dir', 'DESC').upper()
|
sort_dir = filters.get('sort_dir', 'DESC').upper()
|
||||||
sort_by = filters.get('sort_by', 'created_at')
|
sort_by = filters.get('sort_by', 'created_at')
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
- api: Can abandon bids.
|
- api: Can abandon bids.
|
||||||
- If wallets are encrypted the system will only load in-progress bids when unlocked rather than at startup.
|
- If wallets are encrypted the system will only load in-progress bids when unlocked rather than at startup.
|
||||||
- Can set overrides for automation strategies per identity.
|
- Can set overrides for automation strategies per identity.
|
||||||
|
- ui: bids on expired offers won't show as available
|
||||||
|
|
||||||
|
|
||||||
0.0.54
|
0.0.54
|
||||||
|
Loading…
Reference in New Issue
Block a user