Browse Source

qewallet: minimally viable send_onchain()

patch-4
Sander van Grieken 3 years ago
parent
commit
3b66cf70ee
  1. 11
      electrum/gui/qml/components/Send.qml
  2. 48
      electrum/gui/qml/qewallet.py

11
electrum/gui/qml/components/Send.qml

@ -71,14 +71,13 @@ Pane {
Button {
text: qsTr('Pay')
enabled: false // TODO proper validation
enabled: amount.text != '' && address.text != ''// TODO proper validation
onClicked: {
var i_amount = parseInt(amount.text)
if (isNaN(i_amount))
var f_amount = parseFloat(amount.text)
if (isNaN(f_amount))
return
var result = Daemon.currentWallet.send_onchain(address.text, i_amount, undefined, false)
if (result)
app.stack.pop()
var sats = Config.unitsToSats(f_amount)
var result = Daemon.currentWallet.send_onchain(address.text, sats, undefined, false)
}
}

48
electrum/gui/qml/qewallet.py

@ -5,7 +5,7 @@ import time
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, QUrl, QTimer
from electrum.i18n import _
from electrum.util import register_callback, Satoshis, format_time
from electrum.util import register_callback, Satoshis, format_time, parse_max_spend
from electrum.logging import get_logger
from electrum.wallet import Wallet, Abstract_Wallet
from electrum import bitcoin
@ -200,15 +200,55 @@ class QEWallet(QObject):
@pyqtSlot('QString', int, int, bool)
def send_onchain(self, address, amount, fee=None, rbf=False):
self._logger.info('send_onchain: ' + address + ' ' + str(amount))
self._logger.info('send_onchain: %s %d' % (address,amount))
coins = self.wallet.get_spendable_coins(None)
if not bitcoin.is_address(address):
self._logger.warning('Invalid Bitcoin Address: ' + address)
return False
outputs = [PartialTxOutput.from_address_and_value(address, amount)]
tx = self.wallet.make_unsigned_transaction(coins=coins,outputs=outputs)
return True
self._logger.info(str(outputs))
output_values = [x.value for x in outputs]
if any(parse_max_spend(outval) for outval in output_values):
output_value = '!'
else:
output_value = sum(output_values)
self._logger.info(str(output_value))
# see qt/confirm_tx_dialog qt/main_window
tx = self.wallet.make_unsigned_transaction(coins=coins,outputs=outputs, fee=None)
self._logger.info(str(tx.to_json()))
if len(tx.to_json()['outputs']) < 2:
self._logger.info('no change output??? : %s' % str(tx.to_json()['outputs']))
return
from .qeapp import ElectrumQmlApplication
self.config = ElectrumQmlApplication._config
use_rbf = bool(self.config.get('use_rbf', True))
tx.set_rbf(use_rbf)
def cb(result):
self._logger.info('signing was succesful? %s' % str(result))
tx = self.wallet.sign_transaction(tx, None)
if not tx.is_complete():
self._logger.info('tx not complete')
return
self.network = ElectrumQmlApplication._daemon.network
try:
self._logger.info('running broadcast in thread')
self.network.run_from_another_thread(self.network.broadcast_transaction(tx))
self._logger.info('broadcast submit done')
except TxBroadcastError as e:
self._logger.info(e)
return
except BestEffortRequestFailed as e:
self._logger.info(e)
return
return
def create_bitcoin_request(self, amount: int, message: str, expiration: int, ignore_gap: bool) -> Optional[str]:
addr = self.wallet.get_unused_address()

Loading…
Cancel
Save