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
|
||||
self.log.info('Scanned %d unread messages.', nm)
|
||||
|
||||
def stopDaemon(self, coin):
|
||||
def stopDaemon(self, coin) -> None:
|
||||
if coin == Coins.XMR:
|
||||
return
|
||||
num_tries = 10
|
||||
@ -762,13 +762,13 @@ class BasicSwap(BaseApp):
|
||||
self.log.error(traceback.format_exc())
|
||||
raise ValueError('Could not stop {}'.format(str(coin)))
|
||||
|
||||
def stopDaemons(self):
|
||||
def stopDaemons(self) -> None:
|
||||
for c in self.activeCoins():
|
||||
chain_client_settings = self.getChainClientSettings(c)
|
||||
if chain_client_settings['manage_daemon'] is True:
|
||||
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):
|
||||
if not self.is_running:
|
||||
return
|
||||
@ -781,7 +781,7 @@ class BasicSwap(BaseApp):
|
||||
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
|
||||
|
||||
def checkSynced(self, coin_from, coin_to):
|
||||
def checkSynced(self, coin_from, coin_to) -> None:
|
||||
check_coins = (coin_from, coin_to)
|
||||
for c in check_coins:
|
||||
if self.coin_clients[c]['connection_type'] != 'rpc':
|
||||
@ -792,12 +792,12 @@ class BasicSwap(BaseApp):
|
||||
if synced < 1.0:
|
||||
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
|
||||
ci = self.ci(Coins.PART)
|
||||
return not ci.isWalletLocked()
|
||||
|
||||
def checkSystemStatus(self):
|
||||
def checkSystemStatus(self) -> None:
|
||||
ci = self.ci(Coins.PART)
|
||||
if ci.isWalletLocked():
|
||||
raise LockedCoinError(Coins.PART)
|
||||
@ -810,7 +810,7 @@ class BasicSwap(BaseApp):
|
||||
if self.coin_clients[c]['connection_type'] == 'rpc':
|
||||
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
|
||||
if len(self.swaps_in_progress) > 0:
|
||||
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:
|
||||
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
|
||||
for c in self.activeCoins():
|
||||
if coin and c != coin:
|
||||
@ -852,7 +852,7 @@ class BasicSwap(BaseApp):
|
||||
self.loadFromDB()
|
||||
self._read_zmq_queue = True
|
||||
|
||||
def lockWallets(self, coin=None):
|
||||
def lockWallets(self, coin=None) -> None:
|
||||
self._read_zmq_queue = False
|
||||
self.swaps_in_progress.clear()
|
||||
|
||||
@ -864,7 +864,7 @@ class BasicSwap(BaseApp):
|
||||
self._is_locked = 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:
|
||||
return
|
||||
ci = self.ci(coin_type)
|
||||
@ -1544,7 +1544,7 @@ class BasicSwap(BaseApp):
|
||||
self.log.info('Sent OFFER %s', offer_id.hex())
|
||||
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())
|
||||
|
||||
session = self.openSession()
|
||||
@ -1568,7 +1568,7 @@ class BasicSwap(BaseApp):
|
||||
finally:
|
||||
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())
|
||||
session = self.openSession()
|
||||
try:
|
||||
@ -1582,7 +1582,7 @@ class BasicSwap(BaseApp):
|
||||
finally:
|
||||
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)
|
||||
nonce = 1
|
||||
while True:
|
||||
@ -1596,7 +1596,7 @@ class BasicSwap(BaseApp):
|
||||
if nonce > 1000:
|
||||
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']
|
||||
|
||||
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)
|
||||
|
||||
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']
|
||||
ci = self.ci(coin_to)
|
||||
|
||||
@ -4250,7 +4250,7 @@ class BasicSwap(BaseApp):
|
||||
total_bids_value_multiplier = opts.get('total_bids_value_multiplier', 1.0)
|
||||
if total_bids_value_multiplier > 0.0:
|
||||
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
|
||||
for active_bid in active_bids:
|
||||
@ -5716,10 +5716,12 @@ class BasicSwap(BaseApp):
|
||||
|
||||
now = int(time.time())
|
||||
q_str = '''SELECT
|
||||
COUNT(CASE WHEN 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 was_received AND state = {} AND expire_at > {} THEN 1 ELSE NULL END) AS count_available
|
||||
FROM bids WHERE active_ind = 1'''.format(BidStates.BID_RECEIVED, now)
|
||||
COUNT(CASE WHEN b.was_sent THEN 1 ELSE NULL END) AS count_sent,
|
||||
COUNT(CASE WHEN b.was_received THEN 1 ELSE NULL END) AS count_received,
|
||||
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 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()
|
||||
bids_sent = q[0]
|
||||
bids_received = q[1]
|
||||
@ -6028,10 +6030,10 @@ class BasicSwap(BaseApp):
|
||||
with_available_or_active = filters.get('with_available_or_active', False)
|
||||
with_expired = filters.get('with_expired', True)
|
||||
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:
|
||||
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_by = filters.get('sort_by', 'created_at')
|
||||
|
@ -17,6 +17,7 @@
|
||||
- api: Can abandon bids.
|
||||
- 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.
|
||||
- ui: bids on expired offers won't show as available
|
||||
|
||||
|
||||
0.0.54
|
||||
|
Loading…
Reference in New Issue
Block a user