use rbf flag, show tx outputs, actually send tx in confirmpaymentdialog
This commit is contained in:
@@ -153,8 +153,34 @@ Dialog {
|
||||
|
||||
CheckBox {
|
||||
id: final_cb
|
||||
text: qsTr('Final')
|
||||
text: qsTr('Replace-by-Fee')
|
||||
Layout.columnSpan: 2
|
||||
checked: finalizer.rbf
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
height: 1
|
||||
Layout.fillWidth: true
|
||||
Layout.columnSpan: 2
|
||||
color: Material.accentColor
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr('Outputs')
|
||||
Layout.columnSpan: 2
|
||||
}
|
||||
|
||||
Repeater {
|
||||
model: finalizer.outputs
|
||||
delegate: RowLayout {
|
||||
Layout.columnSpan: 2
|
||||
Label {
|
||||
text: modelData.address
|
||||
}
|
||||
Label {
|
||||
text: modelData.value_sats
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
@@ -179,10 +205,7 @@ Dialog {
|
||||
text: qsTr('Pay')
|
||||
enabled: finalizer.valid
|
||||
onClicked: {
|
||||
var f_amount = parseFloat(dialog.satoshis)
|
||||
if (isNaN(f_amount))
|
||||
return
|
||||
var result = Daemon.currentWallet.send_onchain(dialog.address, dialog.satoshis, undefined, false)
|
||||
finalizer.send_onchain()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ from .qetypes import QEAmount
|
||||
class QETxFinalizer(QObject):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self._tx = None
|
||||
|
||||
_logger = get_logger(__name__)
|
||||
|
||||
@@ -27,6 +28,8 @@ class QETxFinalizer(QObject):
|
||||
_method = -1
|
||||
_warning = ''
|
||||
_target = ''
|
||||
_rbf = False
|
||||
_outputs = []
|
||||
config = None
|
||||
|
||||
validChanged = pyqtSignal()
|
||||
@@ -103,6 +106,29 @@ class QETxFinalizer(QObject):
|
||||
self._target = target
|
||||
self.targetChanged.emit()
|
||||
|
||||
rbfChanged = pyqtSignal()
|
||||
@pyqtProperty(bool, notify=rbfChanged)
|
||||
def rbf(self):
|
||||
return self._rbf
|
||||
|
||||
@rbf.setter
|
||||
def rbf(self, rbf):
|
||||
if self._rbf != rbf:
|
||||
self._rbf = rbf
|
||||
self.update()
|
||||
self.rbfChanged.emit()
|
||||
|
||||
outputsChanged = pyqtSignal()
|
||||
@pyqtProperty('QVariantList', notify=outputsChanged)
|
||||
def outputs(self):
|
||||
return self._outputs
|
||||
|
||||
@outputs.setter
|
||||
def outputs(self, outputs):
|
||||
if self._outputs != outputs:
|
||||
self._outputs = outputs
|
||||
self.outputsChanged.emit()
|
||||
|
||||
warningChanged = pyqtSignal()
|
||||
@pyqtProperty(str, notify=warningChanged)
|
||||
def warning(self):
|
||||
@@ -163,7 +189,7 @@ class QETxFinalizer(QObject):
|
||||
self._method = (2 if mempool else 1) if dynfees else 0
|
||||
self.update_slider()
|
||||
self.methodChanged.emit()
|
||||
self.update(False)
|
||||
self.update()
|
||||
|
||||
def save_config(self):
|
||||
value = int(self._sliderPos)
|
||||
@@ -177,22 +203,26 @@ class QETxFinalizer(QObject):
|
||||
self.config.set_key('fee_level', value, True)
|
||||
else:
|
||||
self.config.set_key('fee_per_kb', self.config.static_fee(value), True)
|
||||
self.update(False)
|
||||
self.update()
|
||||
|
||||
@profiler
|
||||
def make_tx(self, rbf: bool):
|
||||
def make_tx(self):
|
||||
coins = self._wallet.wallet.get_spendable_coins(None)
|
||||
outputs = [PartialTxOutput.from_address_and_value(self.address, self._amount.satsInt)]
|
||||
tx = self._wallet.wallet.make_unsigned_transaction(coins=coins,outputs=outputs, fee=None)
|
||||
tx = self._wallet.wallet.make_unsigned_transaction(coins=coins,outputs=outputs, fee=None,rbf=self._rbf)
|
||||
self._logger.debug('fee: %d, inputs: %d, outputs: %d' % (tx.get_fee(), len(tx.inputs()), len(tx.outputs())))
|
||||
self._logger.debug(repr(tx.outputs()))
|
||||
outputs = []
|
||||
for o in tx.outputs():
|
||||
outputs.append(o.to_json())
|
||||
self.outputs = outputs
|
||||
return tx
|
||||
|
||||
@pyqtSlot(bool)
|
||||
def update(self, rbf):
|
||||
#rbf = not bool(self.ids.final_cb.active) if self.show_final else False
|
||||
@pyqtSlot()
|
||||
def update(self):
|
||||
try:
|
||||
# make unsigned transaction
|
||||
tx = self.make_tx(rbf)
|
||||
tx = self.make_tx()
|
||||
except NotEnoughFunds:
|
||||
self.warning = _("Not enough funds")
|
||||
self._valid = False
|
||||
@@ -205,6 +235,8 @@ class QETxFinalizer(QObject):
|
||||
self.validChanged.emit()
|
||||
return
|
||||
|
||||
self._tx = tx
|
||||
|
||||
amount = self._amount.satsInt if not self._amount.isMax else tx.output_value()
|
||||
|
||||
tx_size = tx.estimated_size()
|
||||
@@ -229,3 +261,11 @@ class QETxFinalizer(QObject):
|
||||
|
||||
self._valid = True
|
||||
self.validChanged.emit()
|
||||
|
||||
@pyqtSlot()
|
||||
def send_onchain(self):
|
||||
if not self._valid or not self._tx:
|
||||
self._logger.debug('no valid tx')
|
||||
return
|
||||
|
||||
self._wallet.sign_and_broadcast(self._tx)
|
||||
|
||||
@@ -264,7 +264,9 @@ class QEWallet(QObject):
|
||||
|
||||
use_rbf = bool(self.wallet.config.get('use_rbf', True))
|
||||
tx.set_rbf(use_rbf)
|
||||
self.sign_and_broadcast(tx)
|
||||
|
||||
def sign_and_broadcast(self, tx):
|
||||
def cb(result):
|
||||
self._logger.info('signing was succesful? %s' % str(result))
|
||||
tx = self.wallet.sign_transaction(tx, None)
|
||||
|
||||
Reference in New Issue
Block a user