Skip to content
Snippets Groups Projects
Commit bc3e23a4 authored by inso's avatar inso
Browse files

Added the ability to send again a transaction without enough sources

parent f7a86436
No related branches found
No related tags found
No related merge requests found
...@@ -28,14 +28,12 @@ class Transfer(object): ...@@ -28,14 +28,12 @@ class Transfer(object):
self.metadata = metadata self.metadata = metadata
@classmethod @classmethod
def initiate(cls, txdoc, block, time, amount): def initiate(cls, txdoc, block, time, amount, issuer, receiver):
receivers = [o.pubkey for o in txdoc.outputs
if o.pubkey != txdoc.issuers[0]]
return cls(txdoc, Transfer.TO_SEND, {'block': block, return cls(txdoc, Transfer.TO_SEND, {'block': block,
'time': time, 'time': time,
'amount': amount, 'amount': amount,
'issuer': txdoc.issuers[0], 'issuer': issuer,
'receiver': receivers[0]}) 'receiver': receiver})
@classmethod @classmethod
def create_validated(cls, txdoc, metadata): def create_validated(cls, txdoc, metadata):
...@@ -43,11 +41,18 @@ class Transfer(object): ...@@ -43,11 +41,18 @@ class Transfer(object):
@classmethod @classmethod
def load(cls, data): def load(cls, data):
if data['state'] is Transfer.TO_SEND:
txdoc = None
else:
txdoc = Transaction.from_signed_raw(data['txdoc']) txdoc = Transaction.from_signed_raw(data['txdoc'])
return cls(txdoc, data['state'], data['metadata']) return cls(txdoc, data['state'], data['metadata'])
def jsonify(self): def jsonify(self):
return {'txdoc': self.txdoc.signed_raw(), if self.txdoc:
txraw = self.txdoc.signed_raw()
else:
txraw = None
return {'txdoc': txraw,
'state': self.state, 'state': self.state,
'metadata': self.metadata} 'metadata': self.metadata}
......
...@@ -238,7 +238,17 @@ class Wallet(object): ...@@ -238,7 +238,17 @@ class Wallet(object):
def send_money(self, salt, password, community, def send_money(self, salt, password, community,
recipient, amount, message): recipient, amount, message):
time = community.get_block().time
block_number = community.current_blockid()['number']
key = None
logging.debug("Key : {0} : {1}".format(salt, password))
if self.walletid == 0:
key = SigningKey(salt, password)
else:
key = SigningKey("{0}{1}".format(salt, self.walletid), password)
logging.debug("Sender pubkey:{0}".format(key.pubkey))
try:
result = self.tx_inputs(int(amount), community) result = self.tx_inputs(int(amount), community)
inputs = result[0] inputs = result[0]
self.caches[community.currency].available_sources = result[1] self.caches[community.currency].available_sources = result[1]
...@@ -250,23 +260,19 @@ class Wallet(object): ...@@ -250,23 +260,19 @@ class Wallet(object):
[self.pubkey], inputs, [self.pubkey], inputs,
outputs, message, None) outputs, message, None)
logging.debug("TX : {0}".format(tx.raw())) logging.debug("TX : {0}".format(tx.raw()))
key = None
logging.debug("Key : {0} : {1}".format(salt, password))
if self.walletid == 0:
key = SigningKey(salt, password)
else:
key = SigningKey("{0}{1}".format(salt, self.walletid), password)
logging.debug("Sender pubkey:{0}".format(key.pubkey))
tx.sign([key]) tx.sign([key])
logging.debug("Transaction : {0}".format(tx.signed_raw())) logging.debug("Transaction : {0}".format(tx.signed_raw()))
block_number = community.current_blockid()['number'] transfer = Transfer.initiate(tx, block_number, time, amount,
key.pubkey, recipient)
time = community.get_block().time
transfer = Transfer.initiate(tx, block_number, time, amount)
transfer.send(community) transfer.send(community)
self.caches[community.currency]._transfers.append(transfer) self.caches[community.currency]._transfers.append(transfer)
except NotEnoughMoneyError:
transfer = Transfer.initiate(None, block_number, time, amount,
key.pubkey, recipient)
self.caches[community.currency]._transfers.append(transfer)
raise
def sources(self, community): def sources(self, community):
data = community.request(bma.tx.Sources, data = community.request(bma.tx.Sources,
......
...@@ -213,7 +213,7 @@ class CurrencyTabWidget(QWidget, Ui_CurrencyTabWidget): ...@@ -213,7 +213,7 @@ class CurrencyTabWidget(QWidget, Ui_CurrencyTabWidget):
pubkey_col) pubkey_col)
person = model.sourceModel().data(person_index, Qt.DisplayRole) person = model.sourceModel().data(person_index, Qt.DisplayRole)
transfer = model.sourceModel().transfers[source_index.row()] transfer = model.sourceModel().transfers[source_index.row()]
if state_data == Transfer.REFUSED: if state_data == Transfer.REFUSED or state_data == Transfer.TO_SEND:
send_back = QAction("Send again", self) send_back = QAction("Send again", self)
send_back.triggered.connect(self.send_again) send_back.triggered.connect(self.send_again)
send_back.setData(transfer) send_back.setData(transfer)
......
...@@ -72,10 +72,9 @@ class TransferMoneyDialog(QDialog, Ui_TransferMoneyDialog): ...@@ -72,10 +72,9 @@ class TransferMoneyDialog(QDialog, Ui_TransferMoneyDialog):
QMessageBox.Ok) QMessageBox.Ok)
return return
except NotEnoughMoneyError as e: except NotEnoughMoneyError as e:
QMessageBox.critical(self, "Money transfer", QMessageBox.warning(self, "Money transfer",
"You don't have enough money available in this block : \n{0}" """This transaction could not be sent on this block
.format(e.message)) Please try again later""")
return
except NoPeerAvailable as e: except NoPeerAvailable as e:
QMessageBox.critical(self, "Money transfer", QMessageBox.critical(self, "Money transfer",
"Couldn't connect to network : {0}".format(e), "Couldn't connect to network : {0}".format(e),
......
...@@ -87,6 +87,8 @@ class TxFilterProxyModel(QSortFilterProxyModel): ...@@ -87,6 +87,8 @@ class TxFilterProxyModel(QSortFilterProxyModel):
font.setItalic(True) font.setItalic(True)
elif state_data == Transfer.REFUSED: elif state_data == Transfer.REFUSED:
font.setItalic(True) font.setItalic(True)
elif state_data == Transfer.TO_SEND:
font.setBold(True)
else: else:
font.setItalic(False) font.setItalic(False)
return font return font
...@@ -94,6 +96,8 @@ class TxFilterProxyModel(QSortFilterProxyModel): ...@@ -94,6 +96,8 @@ class TxFilterProxyModel(QSortFilterProxyModel):
if role == Qt.ForegroundRole: if role == Qt.ForegroundRole:
if state_data == Transfer.REFUSED: if state_data == Transfer.REFUSED:
return QColor(Qt.red) return QColor(Qt.red)
elif state_data == Transfer.TO_SEND:
return QColor(Qt.blue)
return source_data return source_data
...@@ -129,6 +133,8 @@ class HistoryTableModel(QAbstractTableModel): ...@@ -129,6 +133,8 @@ class HistoryTableModel(QAbstractTableModel):
def data_received(self, transfer): def data_received(self, transfer):
amount = transfer.metadata['amount'] amount = transfer.metadata['amount']
comment = ""
if transfer.txdoc:
comment = transfer.txdoc.comment comment = transfer.txdoc.comment
pubkey = transfer.metadata['issuer'] pubkey = transfer.metadata['issuer']
try: try:
...@@ -148,7 +154,8 @@ class HistoryTableModel(QAbstractTableModel): ...@@ -148,7 +154,8 @@ class HistoryTableModel(QAbstractTableModel):
def data_sent(self, transfer): def data_sent(self, transfer):
amount = transfer.metadata['amount'] amount = transfer.metadata['amount']
comment = ""
if transfer.txdoc:
comment = transfer.txdoc.comment comment = transfer.txdoc.comment
pubkey = transfer.metadata['receiver'] pubkey = transfer.metadata['receiver']
try: try:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment