Check available balance before sending xmr bid
This commit is contained in:
parent
65951220b8
commit
1476ad3cec
@ -1667,17 +1667,16 @@ class BasicSwap(BaseApp):
|
|||||||
|
|
||||||
self.checkSynced(coin_from, coin_to)
|
self.checkSynced(coin_from, coin_to)
|
||||||
|
|
||||||
contract_count = self.getNewContractId()
|
amount_to = int((msg_buf.amount * bid_rate) // ci_from.COIN())
|
||||||
|
|
||||||
amount_to = int((msg_buf.amount * bid_rate) // self.ci(coin_from).COIN())
|
|
||||||
|
|
||||||
now = int(time.time())
|
now = int(time.time())
|
||||||
if offer.swap_type == SwapTypes.SELLER_FIRST:
|
if offer.swap_type == SwapTypes.SELLER_FIRST:
|
||||||
msg_buf.pkhash_buyer = getKeyID(self.getContractPubkey(dt.datetime.fromtimestamp(now).date(), contract_count))
|
|
||||||
|
|
||||||
proof_addr, proof_sig = self.getProofOfFunds(coin_to, amount_to, offer_id)
|
proof_addr, proof_sig = self.getProofOfFunds(coin_to, amount_to, offer_id)
|
||||||
msg_buf.proof_address = proof_addr
|
msg_buf.proof_address = proof_addr
|
||||||
msg_buf.proof_signature = proof_sig
|
msg_buf.proof_signature = proof_sig
|
||||||
|
|
||||||
|
contract_count = self.getNewContractId()
|
||||||
|
msg_buf.pkhash_buyer = getKeyID(self.getContractPubkey(dt.datetime.fromtimestamp(now).date(), contract_count))
|
||||||
else:
|
else:
|
||||||
raise ValueError('TODO')
|
raise ValueError('TODO')
|
||||||
|
|
||||||
@ -2011,6 +2010,11 @@ class BasicSwap(BaseApp):
|
|||||||
|
|
||||||
self.checkSynced(coin_from, coin_to)
|
self.checkSynced(coin_from, coin_to)
|
||||||
|
|
||||||
|
amount_to = int((int(amount) * bid_rate) // ci_from.COIN())
|
||||||
|
|
||||||
|
balance_to = ci_to.getSpendableBalance()
|
||||||
|
ensure(balance_to > amount_to, '{} spendable balance is too low: {}'.format(ci_to.coin_name(), ci_to.format_amount(balance_to)))
|
||||||
|
|
||||||
msg_buf = XmrBidMessage()
|
msg_buf = XmrBidMessage()
|
||||||
msg_buf.protocol_version = 1
|
msg_buf.protocol_version = 1
|
||||||
msg_buf.offer_msg_id = offer_id
|
msg_buf.offer_msg_id = offer_id
|
||||||
|
@ -1096,6 +1096,9 @@ class BTCInterface(CoinInterface):
|
|||||||
def describeTx(self, tx_hex):
|
def describeTx(self, tx_hex):
|
||||||
return self.rpc_callback('decoderawtransaction', [tx_hex])
|
return self.rpc_callback('decoderawtransaction', [tx_hex])
|
||||||
|
|
||||||
|
def getSpendableBalance(self):
|
||||||
|
return self.make_int(self.rpc_callback('getbalances')['mine']['trusted'])
|
||||||
|
|
||||||
|
|
||||||
def testBTCInterface():
|
def testBTCInterface():
|
||||||
print('testBTCInterface')
|
print('testBTCInterface')
|
||||||
|
@ -601,6 +601,9 @@ class PARTInterfaceBlind(PARTInterface):
|
|||||||
|
|
||||||
return bytes.fromhex(lock_refund_swipe_tx_hex)
|
return bytes.fromhex(lock_refund_swipe_tx_hex)
|
||||||
|
|
||||||
|
def getSpendableBalance(self):
|
||||||
|
return self.make_int(self.rpc_callback('getbalances')['mine']['blind_trusted'])
|
||||||
|
|
||||||
|
|
||||||
class PARTInterfaceAnon(PARTInterface):
|
class PARTInterfaceAnon(PARTInterface):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@ -712,3 +715,6 @@ class PARTInterfaceAnon(PARTInterface):
|
|||||||
return {'txid': txid_hex, 'amount': 0, 'height': rv['height']}
|
return {'txid': txid_hex, 'amount': 0, 'height': rv['height']}
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def getSpendableBalance(self):
|
||||||
|
return self.make_int(self.rpc_callback('getbalances')['mine']['anon_trusted'])
|
||||||
|
@ -26,7 +26,6 @@ from .util import (
|
|||||||
ensure,
|
ensure,
|
||||||
dumpj,
|
dumpj,
|
||||||
make_int,
|
make_int,
|
||||||
format_amount,
|
|
||||||
TemporaryError)
|
TemporaryError)
|
||||||
from .rpc_xmr import (
|
from .rpc_xmr import (
|
||||||
make_xmr_rpc_func,
|
make_xmr_rpc_func,
|
||||||
@ -142,8 +141,8 @@ class XMRInterface(CoinInterface):
|
|||||||
rv = {}
|
rv = {}
|
||||||
self.rpc_wallet_cb('refresh')
|
self.rpc_wallet_cb('refresh')
|
||||||
balance_info = self.rpc_wallet_cb('get_balance')
|
balance_info = self.rpc_wallet_cb('get_balance')
|
||||||
rv['balance'] = format_amount(balance_info['unlocked_balance'], XMRInterface.exp())
|
rv['balance'] = self.format_amount(balance_info['unlocked_balance'])
|
||||||
rv['unconfirmed_balance'] = format_amount(balance_info['balance'] - balance_info['unlocked_balance'], XMRInterface.exp())
|
rv['unconfirmed_balance'] = self.format_amount(balance_info['balance'] - balance_info['unlocked_balance'])
|
||||||
return rv
|
return rv
|
||||||
|
|
||||||
def walletRestoreHeight(self):
|
def walletRestoreHeight(self):
|
||||||
@ -477,3 +476,11 @@ class XMRInterface(CoinInterface):
|
|||||||
return rv
|
return rv
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return {'error': str(e)}
|
return {'error': str(e)}
|
||||||
|
|
||||||
|
def getSpendableBalance(self):
|
||||||
|
with self._mx_wallet:
|
||||||
|
self.rpc_wallet_cb('open_wallet', {'filename': self._wallet_filename})
|
||||||
|
|
||||||
|
self.rpc_wallet_cb('refresh')
|
||||||
|
balance_info = self.rpc_wallet_cb('get_balance')
|
||||||
|
return balance_info['unlocked_balance']
|
||||||
|
@ -107,7 +107,7 @@ def callrpc(rpc_port, auth, method, params=[], wallet=None, host='127.0.0.1'):
|
|||||||
r = json.loads(v.decode('utf-8'))
|
r = json.loads(v.decode('utf-8'))
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
raise ValueError('RPC Server Error')
|
raise ValueError('RPC Server Error ' + str(ex))
|
||||||
|
|
||||||
if 'error' in r and r['error'] is not None:
|
if 'error' in r and r['error'] is not None:
|
||||||
raise ValueError('RPC error ' + str(r['error']))
|
raise ValueError('RPC error ' + str(r['error']))
|
||||||
|
Loading…
Reference in New Issue
Block a user