Compare commits
2 Commits
5e9325296f
...
fe226c4bf5
| Author | SHA1 | Date | |
|---|---|---|---|
| fe226c4bf5 | |||
| bb0c1f2bc9 |
@@ -132,9 +132,9 @@ info "Installing build dependencies."
|
||||
# and I am not quite sure how to break the circular dependence there (I guess we could introduce
|
||||
# "requirements-build-base-base.txt" with just wheel in it...)
|
||||
"$python" -m pip install --no-build-isolation --no-dependencies --no-warn-script-location \
|
||||
--cache-dir "$PIP_CACHE_DIR" -r "$CONTRIB/deterministic-build/requirements-build-base.txt"
|
||||
--timeout 120 --cache-dir "$PIP_CACHE_DIR" -r "$CONTRIB/deterministic-build/requirements-build-base.txt"
|
||||
"$python" -m pip install --no-build-isolation --no-dependencies --no-binary :all: --no-warn-script-location \
|
||||
--cache-dir "$PIP_CACHE_DIR" -r "$CONTRIB/deterministic-build/requirements-build-appimage.txt"
|
||||
--timeout 120 --cache-dir "$PIP_CACHE_DIR" -r "$CONTRIB/deterministic-build/requirements-build-appimage.txt"
|
||||
|
||||
|
||||
# opt out of compiling C extensions
|
||||
@@ -145,14 +145,14 @@ export ELECTRUM_ECC_DONT_COMPILE=1
|
||||
|
||||
info "installing electrum and its dependencies."
|
||||
"$python" -m pip install --no-build-isolation --no-dependencies --no-binary :all: --no-warn-script-location \
|
||||
--cache-dir "$PIP_CACHE_DIR" -r "$CONTRIB/deterministic-build/requirements.txt"
|
||||
--timeout 120 --cache-dir "$PIP_CACHE_DIR" -r "$CONTRIB/deterministic-build/requirements.txt"
|
||||
"$python" -m pip install --no-build-isolation --no-dependencies --no-binary :all: --only-binary PyQt6,PyQt6-Qt6,cryptography --no-warn-script-location \
|
||||
--cache-dir "$PIP_CACHE_DIR" -r "$CONTRIB/deterministic-build/requirements-binaries.txt"
|
||||
--timeout 120 --cache-dir "$PIP_CACHE_DIR" -r "$CONTRIB/deterministic-build/requirements-binaries.txt"
|
||||
"$python" -m pip install --no-build-isolation --no-dependencies --no-binary :all: --no-warn-script-location \
|
||||
--cache-dir "$PIP_CACHE_DIR" -r "$CONTRIB/deterministic-build/requirements-hw.txt"
|
||||
--timeout 120 --cache-dir "$PIP_CACHE_DIR" -r "$CONTRIB/deterministic-build/requirements-hw.txt"
|
||||
|
||||
"$python" -m pip install --no-build-isolation --no-dependencies --no-warn-script-location \
|
||||
--cache-dir "$PIP_CACHE_DIR" "$PROJECT_ROOT"
|
||||
--timeout 120 --cache-dir "$PIP_CACHE_DIR" "$PROJECT_ROOT"
|
||||
|
||||
# was only needed during build time, not runtime
|
||||
"$python" -m pip uninstall -y Cython
|
||||
|
||||
@@ -37,15 +37,15 @@ export ELECTRUM_ECC_DONT_COMPILE=1
|
||||
|
||||
info "Installing requirements..."
|
||||
$WINE_PYTHON -m pip install --no-build-isolation --no-dependencies --no-binary :all: --no-warn-script-location \
|
||||
--cache-dir "$WINE_PIP_CACHE_DIR" -r "$CONTRIB"/deterministic-build/requirements.txt
|
||||
--timeout 120 --cache-dir "$WINE_PIP_CACHE_DIR" -r "$CONTRIB"/deterministic-build/requirements.txt
|
||||
info "Installing dependencies specific to binaries..."
|
||||
# TODO tighten "--no-binary :all:" (but we don't have a C compiler...)
|
||||
$WINE_PYTHON -m pip install --no-build-isolation --no-dependencies --no-warn-script-location \
|
||||
--no-binary :all: --only-binary cffi,cryptography,PyQt6,PyQt6-Qt6,PyQt6-sip \
|
||||
--timeout 120 --no-binary :all: --only-binary cffi,cryptography,PyQt6,PyQt6-Qt6,PyQt6-sip \
|
||||
--cache-dir "$WINE_PIP_CACHE_DIR" -r "$CONTRIB"/deterministic-build/requirements-binaries.txt
|
||||
info "Installing hardware wallet requirements..."
|
||||
$WINE_PYTHON -m pip install --no-build-isolation --no-dependencies --no-warn-script-location \
|
||||
--no-binary :all: --only-binary cffi,cryptography,hidapi \
|
||||
--timeout 120 --no-binary :all: --only-binary cffi,cryptography,hidapi \
|
||||
--cache-dir "$WINE_PIP_CACHE_DIR" -r "$CONTRIB"/deterministic-build/requirements-hw.txt
|
||||
|
||||
pushd "$PROJECT_ROOT"
|
||||
|
||||
@@ -6,7 +6,7 @@ import QtQuick.Controls.Material
|
||||
Pane {
|
||||
objectName: 'About'
|
||||
|
||||
property string title: qsTr("About Electrum")
|
||||
property string title: qsTr("About Electrum Purple")
|
||||
|
||||
Flickable {
|
||||
anchors.fill: parent
|
||||
@@ -72,7 +72,7 @@ Pane {
|
||||
Layout.alignment: Qt.AlignRight
|
||||
}
|
||||
Label {
|
||||
text: '<a href="https://electrum.org">https://electrum.org</a>'
|
||||
text: '<a href="https://bitcoinpurpleblockchain.com/">https://bitcoinpurpleblockchain.com/</a>'
|
||||
textFormat: Text.RichText
|
||||
onLinkActivated: Qt.openUrlExternally(link)
|
||||
}
|
||||
@@ -88,11 +88,6 @@ Pane {
|
||||
height: constants.paddingXLarge
|
||||
Layout.columnSpan: 2
|
||||
}
|
||||
Label {
|
||||
text: qsTr('Distributed by Electrum Technologies GmbH')
|
||||
Layout.columnSpan: 2
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ Pane {
|
||||
visible: Daemon.currentWallet.synchronizing || !Network.isConnected
|
||||
text: Daemon.currentWallet.synchronizing
|
||||
? qsTr('Your wallet is not synchronized. The displayed balance may be inaccurate.')
|
||||
: qsTr('Your wallet is not connected to an Electrum server. The displayed balance may be outdated.')
|
||||
: qsTr('Your wallet is not connected to an Electrum Purple server. The displayed balance may be outdated.')
|
||||
iconStyle: InfoTextArea.IconStyle.Warn
|
||||
}
|
||||
|
||||
|
||||
@@ -122,7 +122,7 @@ ElDialog {
|
||||
text_qr: dialog.channelBackup,
|
||||
text_help: qsTr('The channel you created is not recoverable from seed.')
|
||||
+ ' ' + qsTr('To prevent fund losses, please save this backup on another device.')
|
||||
+ ' ' + qsTr('It may be imported in another Electrum wallet with the same seed.')
|
||||
+ ' ' + qsTr('It may be imported in another Electrum Purple wallet with the same seed.')
|
||||
})
|
||||
sharedialog.open()
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ ElDialog
|
||||
|
||||
Label {
|
||||
Layout.fillWidth: true
|
||||
text: qsTr('Something went wrong while executing Electrum.')
|
||||
text: qsTr('Something went wrong while executing Electrum Purple.')
|
||||
}
|
||||
Label {
|
||||
Layout.fillWidth: true
|
||||
|
||||
@@ -45,7 +45,7 @@ ElDialog {
|
||||
visible: !Daemon.currentWallet.lightningHasDeterministicNodeId
|
||||
iconStyle: InfoTextArea.IconStyle.Warn
|
||||
text: Daemon.currentWallet.seedType == 'segwit'
|
||||
? [ qsTr('Your channels cannot be recovered from seed, because they were created with an old version of Electrum.'), ' ',
|
||||
? [ qsTr('Your channels cannot be recovered from seed, because they were created with an old version of Electrum Purple.'), ' ',
|
||||
qsTr('This means that you must save a backup of your wallet every time you create a new channel.'),
|
||||
'\n\n',
|
||||
qsTr('If you want this wallet to have recoverable channels, you must close your existing channels and restore this wallet from seed.')
|
||||
@@ -53,7 +53,7 @@ ElDialog {
|
||||
: [ qsTr('Your channels cannot be recovered from seed.'), ' ',
|
||||
qsTr('This means that you must save a backup of your wallet every time you create a new channel.'),
|
||||
'\n\n',
|
||||
qsTr('If you want to have recoverable channels, you must create a new wallet with an Electrum seed')
|
||||
qsTr('If you want to have recoverable channels, you must create a new wallet with an Electrum Purple seed')
|
||||
].join('')
|
||||
backgroundColor: constants.darkerDialogBackground
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ Pane {
|
||||
if (Config.language != currentValue) {
|
||||
Config.language = currentValue
|
||||
var dialog = app.messageDialog.createObject(app, {
|
||||
text: qsTr('Please restart Electrum to activate the new GUI settings')
|
||||
text: qsTr('Please restart Electrum Purple to activate the new GUI settings')
|
||||
})
|
||||
dialog.open()
|
||||
}
|
||||
@@ -407,7 +407,7 @@ Pane {
|
||||
if (!checked) {
|
||||
var dialog = app.messageDialog.createObject(app, {
|
||||
title: qsTr('Are you sure?'),
|
||||
text: qsTr('Electrum will have to download the Lightning Network graph, which is not recommended on mobile.'),
|
||||
text: qsTr('Electrum Purple will have to download the Lightning Network graph, which is not recommended on mobile.'),
|
||||
yesno: true
|
||||
})
|
||||
dialog.accepted.connect(function() {
|
||||
|
||||
@@ -71,7 +71,7 @@ ElDialog {
|
||||
HelpButton {
|
||||
heading: qsTr('Sweep private keys')
|
||||
helptext: qsTr('This will create a transaction sending all funds associated with the private keys to the current wallet') +
|
||||
'<br/><br/>' + qsTr('WIF keys are typed in Electrum, based on script type.') + '<br/><br/>' +
|
||||
'<br/><br/>' + qsTr('WIF keys are typed in Electrum Purple, based on script type.') + '<br/><br/>' +
|
||||
qsTr('A few examples') + ':<br/>' +
|
||||
'<tt><b>p2pkh</b>:KxZcY47uGp9a... \t-> 1DckmggQM...<br/>' +
|
||||
'<b>p2wpkh-p2sh</b>:KxZcY47uGp9a... \t-> 3NhNeZQXF...<br/>' +
|
||||
|
||||
@@ -616,7 +616,7 @@ ApplicationWindow
|
||||
stack.pop()
|
||||
} else {
|
||||
var dialog = app.messageDialog.createObject(app, {
|
||||
title: qsTr('Close Electrum?'),
|
||||
title: qsTr('Close Electrum Purple?'),
|
||||
yesno: true
|
||||
})
|
||||
dialog.accepted.connect(function() {
|
||||
|
||||
@@ -50,15 +50,15 @@ WizardComponent {
|
||||
var t = {
|
||||
'electrum': [
|
||||
// not shown as electrum is the default seed type anyways and the name is self-explanatory
|
||||
qsTr('Electrum seeds are the default seed type.'),
|
||||
qsTr('If you are restoring from a seed previously created by Electrum, choose this option')
|
||||
qsTr('Electrum Purple seeds are the default seed type.'),
|
||||
qsTr('If you are restoring from a seed previously created by Electrum Purple, choose this option')
|
||||
].join(' '),
|
||||
'bip39': [
|
||||
qsTr('BIP39 seeds can be imported in Electrum, so that users can access funds locked in other wallets.'),
|
||||
qsTr('BIP39 seeds can be imported in Electrum Purple, so that users can access funds locked in other wallets.'),
|
||||
qsTr('BIP39 seeds do not include a version number, which compromises compatibility with future software.'),
|
||||
].join(' '),
|
||||
'slip39': [
|
||||
qsTr('SLIP39 seeds can be imported in Electrum, so that users can access funds locked in other wallets.'),
|
||||
qsTr('SLIP39 seeds can be imported in Electrum Purple, so that users can access funds locked in other wallets.'),
|
||||
].join(' ')
|
||||
}
|
||||
infotext.text = t[seed_variant_cb.currentValue]
|
||||
|
||||
@@ -31,7 +31,7 @@ WizardComponent {
|
||||
InfoTextArea {
|
||||
Layout.preferredWidth: parent.width
|
||||
backgroundColor: constants.darkerDialogBackground
|
||||
text: qsTr('Enter a list of Bitcoin addresses (this will create a watching-only wallet), or a list of private keys.')
|
||||
text: qsTr('Enter a list of Bitcoin Purple addresses (this will create a watching-only wallet), or a list of private keys.')
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
|
||||
@@ -55,7 +55,7 @@ WizardComponent {
|
||||
Layout.fillWidth: true
|
||||
ButtonGroup.group: wallettypegroup
|
||||
property string wallettype: 'imported'
|
||||
text: qsTr('Import Bitcoin addresses or private keys')
|
||||
text: qsTr('Import Bitcoin Purple addresses or private keys')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ WizardComponent {
|
||||
Label {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
Layout.preferredWidth: parent.width
|
||||
text: qsTr("If you are unsure what this is, leave them unchecked and Electrum will automatically select servers.")
|
||||
text: qsTr("If you are unsure what this is, leave them unchecked and Electrum Purple will automatically select servers.")
|
||||
wrapMode: Text.WordWrap
|
||||
horizontalAlignment: Text.AlignHLeft
|
||||
font.pixelSize: constants.fontSizeMedium
|
||||
|
||||
@@ -1207,7 +1207,7 @@ class ConfirmTxDialog(TxEditor):
|
||||
grid.addWidget(HelpLabel(_("Amount to be sent") + ": ", msg), 0, 0)
|
||||
grid.addWidget(self.amount_label, 0, 1)
|
||||
|
||||
msg = _('Bitcoin transactions are in general not free. A transaction fee is paid by the sender of the funds.') + '\n\n'\
|
||||
msg = _('Bitcoin Purple transactions are in general not free. A transaction fee is paid by the sender of the funds.') + '\n\n'\
|
||||
+ _('The amount of fee can be decided freely by the sender. However, transactions with low fees take more time to be processed.') + '\n\n'\
|
||||
+ _('A suggested fee is automatically added to this field. You may override it. The suggested fee increases with the size of the transaction.')
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ class Exception_Window(BaseCrashReporter, QWidget, MessageBoxMixin, Logger):
|
||||
self.config = config
|
||||
|
||||
QWidget.__init__(self)
|
||||
self.setWindowTitle('Electrum - ' + _('An Error Occurred'))
|
||||
self.setWindowTitle('Electrum Purple - ' + _('An Error Occurred'))
|
||||
self.setMinimumSize(600, 300)
|
||||
|
||||
Logger.__init__(self)
|
||||
|
||||
@@ -636,11 +636,11 @@ class HistoryList(MyTreeView, AcceptFileDragDrop):
|
||||
grid.addWidget(QLabel(self.format_date(start_date)), 1, 1)
|
||||
grid.addWidget(QLabel(self.format_date(end_date)), 1, 2)
|
||||
#
|
||||
grid.addWidget(QLabel(_("BTC balance")), 2, 0)
|
||||
grid.addWidget(QLabel(_("BTCP balance")), 2, 0)
|
||||
grid.addWidget(QLabel(format_amount(start['BTC_balance'])), 2, 1)
|
||||
grid.addWidget(QLabel(format_amount(end['BTC_balance'])), 2, 2)
|
||||
#
|
||||
grid.addWidget(QLabel(_("BTC Fiat price")), 3, 0)
|
||||
grid.addWidget(QLabel(_("BTCP Fiat price")), 3, 0)
|
||||
grid.addWidget(QLabel(format_fiat(start.get('BTC_fiat_price'))), 3, 1)
|
||||
grid.addWidget(QLabel(format_fiat(end.get('BTC_fiat_price'))), 3, 2)
|
||||
#
|
||||
@@ -657,11 +657,11 @@ class HistoryList(MyTreeView, AcceptFileDragDrop):
|
||||
grid.addWidget(QLabel(format_fiat(end.get('unrealized_gains', ''))), 6, 2)
|
||||
#
|
||||
grid2 = QGridLayout()
|
||||
grid2.addWidget(QLabel(_("BTC incoming")), 0, 0)
|
||||
grid2.addWidget(QLabel(_("BTCP incoming")), 0, 0)
|
||||
grid2.addWidget(QLabel(format_amount(flow['BTC_incoming'])), 0, 1)
|
||||
grid2.addWidget(QLabel(_("Fiat incoming")), 1, 0)
|
||||
grid2.addWidget(QLabel(format_fiat(flow.get('fiat_incoming'))), 1, 1)
|
||||
grid2.addWidget(QLabel(_("BTC outgoing")), 2, 0)
|
||||
grid2.addWidget(QLabel(_("BTCP outgoing")), 2, 0)
|
||||
grid2.addWidget(QLabel(format_amount(flow['BTC_outgoing'])), 2, 1)
|
||||
grid2.addWidget(QLabel(_("Fiat outgoing")), 3, 0)
|
||||
grid2.addWidget(QLabel(format_fiat(flow.get('fiat_outgoing'))), 3, 1)
|
||||
@@ -682,8 +682,8 @@ class HistoryList(MyTreeView, AcceptFileDragDrop):
|
||||
_logger.error(f"could not import electrum.plot. This feature needs matplotlib to be installed. exc={e!r}")
|
||||
self.main_window.show_message("\n\n".join([
|
||||
_("This feature requires the 'matplotlib' Python library which is not "
|
||||
"included in Electrum by default."),
|
||||
_("If you run Electrum from source you can install matplotlib to use this feature."),
|
||||
"included in Electrum Purple by default."),
|
||||
_("If you run Electrum Purple from source you can install matplotlib to use this feature."),
|
||||
_("It is not possible to install matplotlib inside the binary executables "
|
||||
"(e.g. AppImage or Windows installation).")
|
||||
]))
|
||||
|
||||
@@ -179,7 +179,7 @@ class InvoiceList(MyTreeView):
|
||||
copy_menu = self.add_copy_menu(menu, idx)
|
||||
address = invoice.get_address()
|
||||
if address:
|
||||
copy_menu.addAction(_("Address"), lambda: self.main_window.do_copy(invoice.get_address(), title='Bitcoin Address'))
|
||||
copy_menu.addAction(_("Address"), lambda: self.main_window.do_copy(invoice.get_address(), title='Bitcoin Purple Address'))
|
||||
status = wallet.get_invoice_status(invoice)
|
||||
if status == PR_UNPAID:
|
||||
if bool(invoice.get_amount_sat()):
|
||||
|
||||
@@ -708,7 +708,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger, QtEventListener):
|
||||
try:
|
||||
new_path = self.wallet.save_backup(backup_dir)
|
||||
except BaseException as reason:
|
||||
self.show_critical(_("Electrum was unable to copy your wallet file to the specified location.") + "\n" + str(reason), title=_("Unable to create backup"))
|
||||
self.show_critical(_("Electrum Purple was unable to copy your wallet file to the specified location.") + "\n" + str(reason), title=_("Unable to create backup"))
|
||||
return
|
||||
msg = _("A copy of your wallet file was created in")+" '%s'" % str(new_path)
|
||||
self.show_message(msg, title=_("Wallet backup created"))
|
||||
@@ -827,11 +827,11 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger, QtEventListener):
|
||||
about_action.setMenuRole(QAction.MenuRole.AboutRole) # make sure OS recognizes it as "About"
|
||||
self.help_menu.addAction(about_action)
|
||||
self.help_menu.addAction(_("&Changelog"), lambda: webopen(constants.RELEASE_NOTES_URL))
|
||||
self.help_menu.addAction(_("&Official website"), lambda: webopen("https://electrum.org"))
|
||||
self.help_menu.addAction(_("&Official website"), lambda: webopen("https://bitcoinpurpleblockchain.com/"))
|
||||
self.help_menu.addSeparator()
|
||||
self.help_menu.addAction(_("&Documentation"), lambda: webopen("http://docs.electrum.org/")).setShortcut(QKeySequence.StandardKey.HelpContents)
|
||||
if not constants.net.TESTNET:
|
||||
self.help_menu.addAction(_("&Bitcoin Paper"), self.show_bitcoin_paper)
|
||||
self.help_menu.addAction(_("&Bitcoin Purple Whitepaper"), lambda: webopen("https://github.com/BitcoinPurpleBlockchain/purple-whitepaper/blob/main/whitepaper.pdf"))
|
||||
self.help_menu.addAction(_("&Report Bug"), self.show_report_bug)
|
||||
self.help_menu.addSeparator()
|
||||
if self.network:
|
||||
@@ -850,44 +850,24 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger, QtEventListener):
|
||||
self.show_error(_('No donation address for this server'))
|
||||
|
||||
def show_about(self):
|
||||
QMessageBox.about(self, "Electrum",
|
||||
QMessageBox.about(self, "Electrum Purple",
|
||||
(_("Version")+" %s" % ELECTRUM_VERSION + "\n\n" +
|
||||
_("Electrum's focus is speed, with low resource usage and simplifying Bitcoin.") + " " +
|
||||
_("Electrum Purple's focus is speed, with low resource usage and simplifying Bitcoin Purple.") + " " +
|
||||
_("You do not need to perform regular backups, because your wallet can be "
|
||||
"recovered from a secret phrase that you can memorize or write on paper.") + " " +
|
||||
_("Startup times are instant because it operates in conjunction with high-performance "
|
||||
"servers that handle the most complicated parts of the Bitcoin system.") + "\n\n" +
|
||||
"servers that handle the most complicated parts of the Bitcoin Purple system.") + "\n\n" +
|
||||
_("Uses icons from the Icons8 icon pack (icons8.com).")))
|
||||
|
||||
def show_bitcoin_paper(self):
|
||||
filename = os.path.join(self.config.path, 'bitcoin.pdf')
|
||||
if not os.path.exists(filename):
|
||||
def fetch_bitcoin_paper():
|
||||
s = self._fetch_tx_from_network("54e48e5f5c656b26c3bca14a8c95aa583d07ebe84dde3b7dd4a78f4e4186e713")
|
||||
if not s:
|
||||
raise concurrent.futures.CancelledError
|
||||
s = s.split("0100000000000000")[1:-1]
|
||||
out = ''.join(x[6:136] + x[138:268] + x[270:400] if len(x) > 136 else x[6:] for x in s)[16:-20]
|
||||
with open(filename, 'wb') as f:
|
||||
f.write(bytes.fromhex(out))
|
||||
WaitingDialog(
|
||||
self,
|
||||
_("Fetching Bitcoin Paper..."),
|
||||
fetch_bitcoin_paper,
|
||||
on_success=lambda _: webopen('file:///' + filename),
|
||||
on_error=self.on_error,
|
||||
)
|
||||
return
|
||||
webopen('file:///' + filename)
|
||||
|
||||
def show_report_bug(self):
|
||||
msg = ' '.join([
|
||||
_("Please report any bugs as issues on github:<br/>"),
|
||||
f'''<a href="{constants.GIT_REPO_ISSUES_URL}">{constants.GIT_REPO_ISSUES_URL}</a><br/><br/>''',
|
||||
_("Before reporting a bug, upgrade to the most recent version of Electrum (latest release or git HEAD), and include the version number in your report."),
|
||||
_("Before reporting a bug, upgrade to the most recent version of Electrum Purple (latest release or git HEAD), and include the version number in your report."),
|
||||
_("Try to explain not only what the bug is, but how it occurs.")
|
||||
])
|
||||
self.show_message(msg, title="Electrum - " + _("Reporting Bugs"), rich_text=True)
|
||||
self.show_message(msg, title="Electrum Purple - " + _("Reporting Bugs"), rich_text=True)
|
||||
|
||||
def notify_transactions(self):
|
||||
if self.tx_notification_queue.qsize() == 0:
|
||||
@@ -912,7 +892,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger, QtEventListener):
|
||||
|
||||
def notify(self, message):
|
||||
if self.tray:
|
||||
self.tray.showMessage("Electrum", message, read_QIcon("electrum_dark_icon"), 20000)
|
||||
self.tray.showMessage("Electrum Purple", message, read_QIcon("electrum_dark_icon"), 20000)
|
||||
|
||||
def timer_actions(self):
|
||||
# refresh invoices and requests because they show ETA
|
||||
@@ -1276,7 +1256,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger, QtEventListener):
|
||||
|
||||
if not self.config.SWAPSERVER_URL and not self.config.SWAPSERVER_NPUB:
|
||||
if not self.question('\n'.join([
|
||||
_('Electrum uses Nostr in order to find liquidity providers.'),
|
||||
_('Electrum Purple uses Nostr in order to find liquidity providers.'),
|
||||
_('Do you want to enable Nostr?'),
|
||||
])):
|
||||
return None
|
||||
@@ -1975,7 +1955,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger, QtEventListener):
|
||||
line2 = QLineEdit()
|
||||
line2.setFixedWidth(32 * char_width_in_lineedit())
|
||||
address_label = QLabel(_("Address"))
|
||||
address_label.setToolTip(_("Bitcoin- or Lightning address"))
|
||||
address_label.setToolTip(_("Bitcoin Purple- or Lightning address"))
|
||||
grid.addWidget(address_label, 1, 0)
|
||||
grid.addWidget(line1, 1, 1)
|
||||
grid.addWidget(QLabel(_("Name")), 2, 0)
|
||||
@@ -1989,7 +1969,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger, QtEventListener):
|
||||
assert not self.wallet.has_lightning()
|
||||
if self.wallet.can_have_deterministic_lightning():
|
||||
msg = _(
|
||||
"Lightning is not enabled because this wallet was created with an old version of Electrum. "
|
||||
"Lightning is not enabled because this wallet was created with an old version of Electrum Purple. "
|
||||
"Create lightning keys?")
|
||||
else:
|
||||
msg = _(
|
||||
@@ -2096,7 +2076,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger, QtEventListener):
|
||||
"private key, and verifying with the corresponding public key. The "
|
||||
"address you have entered does not have a unique public key, so these "
|
||||
"operations cannot be performed.") + '\n\n' + \
|
||||
_('The operation is undefined. Not just in Electrum, but in general.')
|
||||
_('The operation is undefined. Not just in Electrum Purple, but in general.')
|
||||
|
||||
@protected
|
||||
def do_sign(self, address, message, signature, password):
|
||||
@@ -2258,7 +2238,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger, QtEventListener):
|
||||
try:
|
||||
return tx_from_any(data)
|
||||
except BaseException as e:
|
||||
self.show_critical(_("Electrum was unable to parse your transaction") + ":\n" + repr(e))
|
||||
self.show_critical(_("Electrum Purple was unable to parse your transaction") + ":\n" + repr(e))
|
||||
return
|
||||
|
||||
def import_channel_backup(self, encrypted: str):
|
||||
@@ -2321,7 +2301,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger, QtEventListener):
|
||||
with open(fileName, "rb") as f:
|
||||
file_content = f.read() # type: bytes
|
||||
except (ValueError, IOError, os.error) as reason:
|
||||
self.show_critical(_("Electrum was unable to open your transaction file") + "\n" + str(reason),
|
||||
self.show_critical(_("Electrum Purple was unable to open your transaction file") + "\n" + str(reason),
|
||||
title=_("Unable to read file or no transaction found"))
|
||||
if file_content is None:
|
||||
return None
|
||||
@@ -2480,7 +2460,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger, QtEventListener):
|
||||
self.do_export_privkeys(filename, private_keys, csv_button.isChecked())
|
||||
except (IOError, os.error) as reason:
|
||||
txt = "\n".join([
|
||||
_("Electrum was unable to produce a private key-export."),
|
||||
_("Electrum Purple was unable to produce a private key-export."),
|
||||
str(reason)
|
||||
])
|
||||
self.show_critical(txt, title=_("Unable to create csv"))
|
||||
@@ -2669,7 +2649,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger, QtEventListener):
|
||||
self.fx.trigger_update()
|
||||
run_hook('close_settings_dialog')
|
||||
if d.need_restart:
|
||||
self.show_warning(_('Please restart Electrum to activate the new GUI settings'), title=_('Success'))
|
||||
self.show_warning(_('Please restart Electrum Purple to activate the new GUI settings'), title=_('Success'))
|
||||
else:
|
||||
# Some values might need to be updated if settings have changed.
|
||||
# For example 'Can send' in the lightning tab will change if the fees config is changed.
|
||||
@@ -2685,7 +2665,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger, QtEventListener):
|
||||
|
||||
for warning in list(warnings)[:3]:
|
||||
warning = ''.join([
|
||||
_("Are you sure you want to close Electrum?"),
|
||||
_("Are you sure you want to close Electrum Purple?"),
|
||||
'\n\n',
|
||||
_("An ongoing operation requires you to stay online."),
|
||||
'\n',
|
||||
@@ -2930,7 +2910,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger, QtEventListener):
|
||||
self.showing_cert_mismatch_error = True
|
||||
self.show_critical(title=_("Certificate mismatch"),
|
||||
msg=_("The SSL certificate provided by the main server did not match the fingerprint passed in with the --serverfingerprint option.") + "\n\n" +
|
||||
_("Electrum will now exit."))
|
||||
_("Electrum Purple will now exit."))
|
||||
self.showing_cert_mismatch_error = False
|
||||
self.close()
|
||||
|
||||
|
||||
@@ -243,7 +243,7 @@ class ProxyWidget(QWidget):
|
||||
|
||||
grid.addWidget(self.proxy_cb, 0, 0, 1, 4)
|
||||
proxy_helpbutton = HelpButton(
|
||||
_('Proxy settings apply to all connections: with Electrum servers, but also with third-party services.'))
|
||||
_('Proxy settings apply to all connections: with Electrum Purple servers, but also with third-party services.'))
|
||||
grid.addWidget(proxy_helpbutton, 0, 4, alignment=Qt.AlignmentFlag.AlignRight)
|
||||
grid.addWidget(self.proxy_mode, 1, 0, 1, 1)
|
||||
grid.addWidget(self.proxy_host, 1, 1, 1, 3)
|
||||
|
||||
@@ -243,7 +243,7 @@ class ChangePasswordDialogForSW(ChangePasswordDialogBase):
|
||||
msg += ' ' + _('Use this dialog to add a password to your wallet.')
|
||||
else:
|
||||
if not is_encrypted:
|
||||
msg = _('Your bitcoins are password protected. However, your wallet file is not encrypted.')
|
||||
msg = _('Your Bitcoin Purple coins are password protected. However, your wallet file is not encrypted.')
|
||||
else:
|
||||
msg = _('Your wallet is password protected and encrypted.')
|
||||
msg += ' ' + _('Use this dialog to change your password.')
|
||||
|
||||
@@ -100,7 +100,7 @@ class PluginDialog(WindowModalDialog):
|
||||
if not self.plugins.is_available(self.name):
|
||||
msg = "\n".join([
|
||||
_('This plugin requires installation of additional dependencies.'),
|
||||
_('For Electrum to recognize external packages, you need to run it from source.')
|
||||
_('For Electrum Purple to recognize external packages, you need to run it from source.')
|
||||
])
|
||||
self.window.show_message(msg)
|
||||
return
|
||||
@@ -161,7 +161,7 @@ class PluginsDialog(WindowModalDialog, MessageBoxMixin):
|
||||
_logger = get_logger(__name__)
|
||||
|
||||
def __init__(self, config: 'SimpleConfig', plugins: 'Plugins', *, gui_object: Optional['ElectrumGui'] = None):
|
||||
WindowModalDialog.__init__(self, None, _('Electrum Plugins'))
|
||||
WindowModalDialog.__init__(self, None, _('Electrum Purple Plugins'))
|
||||
self.gui_object = gui_object
|
||||
self.config = config
|
||||
self.plugins = plugins
|
||||
|
||||
@@ -36,7 +36,7 @@ class QR_Window(QWidget):
|
||||
def __init__(self, win):
|
||||
QWidget.__init__(self)
|
||||
self.main_window = win
|
||||
self.setWindowTitle('Electrum - '+_('Payment Request'))
|
||||
self.setWindowTitle('Electrum Purple - '+_('Payment Request'))
|
||||
self.setMinimumSize(800, 800)
|
||||
self.setFocusPolicy(Qt.FocusPolicy.NoFocus)
|
||||
main_box = QHBoxLayout()
|
||||
|
||||
@@ -193,8 +193,8 @@ class ReceiveTab(QWidget, MessageBoxMixin, Logger):
|
||||
_('This information is seen by the recipient if you send them a signed payment request.'),
|
||||
'\n\n',
|
||||
_('For on-chain requests, the address gets reserved until expiration. After that, it might get reused.'), ' ',
|
||||
_('The bitcoin address never expires and will always be part of this electrum wallet.'), ' ',
|
||||
_('You can reuse a bitcoin address any number of times but it is not good for your privacy.'),
|
||||
_('The Bitcoin Purple address never expires and will always be part of this Electrum Purple wallet.'), ' ',
|
||||
_('You can reuse a Bitcoin Purple address any number of times but it is not good for your privacy.'),
|
||||
'\n\n',
|
||||
_('For Lightning requests, payments will not be accepted after the expiration.'),
|
||||
])
|
||||
@@ -284,7 +284,7 @@ class ReceiveTab(QWidget, MessageBoxMixin, Logger):
|
||||
|
||||
def get_tab_data(self):
|
||||
if self.URI:
|
||||
out = self.URI, self.URI, self.URI_help, _('Bitcoin URI')
|
||||
out = self.URI, self.URI, self.URI_help, _('Bitcoin Purple URI')
|
||||
elif self.addr:
|
||||
out = self.addr, self.addr, self.address_help, _('Address')
|
||||
else:
|
||||
|
||||
@@ -200,9 +200,9 @@ class RequestList(MyTreeView):
|
||||
menu = QMenu(self)
|
||||
copy_menu = self.add_copy_menu(menu, idx)
|
||||
if req.get_address():
|
||||
copy_menu.addAction(_("Address"), lambda: self.main_window.do_copy(req.get_address(), title='Bitcoin Address'))
|
||||
copy_menu.addAction(_("Address"), lambda: self.main_window.do_copy(req.get_address(), title='Bitcoin Purple Address'))
|
||||
if URI := self.wallet.get_request_URI(req):
|
||||
copy_menu.addAction(_("Bitcoin URI"), lambda: self.main_window.do_copy(URI, title='Bitcoin URI'))
|
||||
copy_menu.addAction(_("Bitcoin Purple URI"), lambda: self.main_window.do_copy(URI, title='Bitcoin Purple URI'))
|
||||
if req.is_lightning():
|
||||
copy_menu.addAction(_("Lightning Request"), lambda: self.main_window.do_copy(self.wallet.get_bolt11_invoice(req), title='Lightning Request'))
|
||||
#if 'view_url' in req:
|
||||
|
||||
@@ -52,7 +52,7 @@ MSG_PASSPHRASE_WARN_ISSUE4566 = _("Warning") + ": "\
|
||||
+ _("You have multiple consecutive whitespaces or leading/trailing "
|
||||
"whitespaces in your passphrase.") + " " \
|
||||
+ _("This is discouraged.") + " " \
|
||||
+ _("Due to a bug, old versions of Electrum will NOT be creating the "
|
||||
+ _("Due to a bug, old versions of Electrum Purple will NOT be creating the "
|
||||
"same wallet as newer versions or other software.")
|
||||
|
||||
|
||||
@@ -233,15 +233,15 @@ class SeedWidget(QWidget):
|
||||
if self.seed_type == 'bip39':
|
||||
message = ' '.join([
|
||||
'<b>' + _('Warning') + ':</b> ',
|
||||
_('BIP39 seeds can be imported in Electrum, so that users can access funds locked in other wallets.'),
|
||||
_('BIP39 seeds can be imported in Electrum Purple, so that users can access funds locked in other wallets.'),
|
||||
_('However, we do not generate BIP39 seeds, because they do not meet our safety standard.'),
|
||||
_('BIP39 seeds do not include a version number, which compromises compatibility with future software.'),
|
||||
_('We do not guarantee that BIP39 imports will always be supported in Electrum.'),
|
||||
_('We do not guarantee that BIP39 imports will always be supported in Electrum Purple.'),
|
||||
])
|
||||
elif self.seed_type == 'slip39':
|
||||
message = ' '.join([
|
||||
'<b>' + _('Warning') + ':</b> ',
|
||||
_('SLIP39 seeds can be imported in Electrum, so that users can access funds locked in other wallets.'),
|
||||
_('SLIP39 seeds can be imported in Electrum Purple, so that users can access funds locked in other wallets.'),
|
||||
_('However, we do not generate SLIP39 seeds.'),
|
||||
])
|
||||
else:
|
||||
@@ -420,7 +420,7 @@ class KeysWidget(QWidget):
|
||||
class SeedDialog(WindowModalDialog):
|
||||
|
||||
def __init__(self, parent, seed, passphrase, *, config: 'SimpleConfig'):
|
||||
WindowModalDialog.__init__(self, parent, ('Electrum - ' + _('Seed')))
|
||||
WindowModalDialog.__init__(self, parent, ('Electrum Purple - ' + _('Seed')))
|
||||
self.setMinimumWidth(400)
|
||||
vbox = QVBoxLayout(self)
|
||||
title = _("Your wallet generation seed is:")
|
||||
|
||||
@@ -73,7 +73,7 @@ class SendTab(QWidget, MessageBoxMixin, Logger):
|
||||
msg = (_("Recipient of the funds.")
|
||||
+ "\n\n"
|
||||
+ _("This field can contain:") + "\n"
|
||||
+ _("- a Bitcoin address or BIP21 URI") + "\n"
|
||||
+ _("- a Bitcoin Purple address or BIP21 URI") + "\n"
|
||||
+ _("- a Lightning invoice") + "\n"
|
||||
+ _("- a label from your list of contacts") + "\n"
|
||||
+ _("- an openalias") + "\n"
|
||||
@@ -620,7 +620,7 @@ class SendTab(QWidget, MessageBoxMixin, Logger):
|
||||
|
||||
for o in outputs:
|
||||
if o.scriptpubkey is None:
|
||||
self.show_error(_('Bitcoin Address is None'))
|
||||
self.show_error(_('Bitcoin Purple Address is None'))
|
||||
return True
|
||||
if o.value is None:
|
||||
self.show_error(_('Invalid Amount'))
|
||||
|
||||
@@ -122,7 +122,7 @@ class SettingsDialog(QDialog, QtEventListener):
|
||||
if not use_trampoline:
|
||||
if not window.question('\n'.join([
|
||||
_("Are you sure you want to disable trampoline?"),
|
||||
_("Without this option, Electrum will need to sync with the Lightning network on every start."),
|
||||
_("Without this option, Electrum Purple will need to sync with the Lightning network on every start."),
|
||||
_("This may impact the reliability of your payments."),
|
||||
]), parent=self):
|
||||
trampoline_cb.setCheckState(Qt.CheckState.Checked)
|
||||
|
||||
@@ -449,7 +449,7 @@ def show_transaction(
|
||||
d.broadcast_button.setVisible(False)
|
||||
except SerializationError as e:
|
||||
_logger.exception('unable to deserialize the transaction')
|
||||
parent.show_critical(_("Electrum was unable to deserialize the transaction:") + "\n" + str(e))
|
||||
parent.show_critical(_("Electrum Purple was unable to deserialize the transaction:") + "\n" + str(e))
|
||||
except UserCancelled:
|
||||
return
|
||||
else:
|
||||
|
||||
@@ -30,7 +30,7 @@ class UpdateCheck(QDialog, Logger):
|
||||
|
||||
def __init__(self, *, latest_version=None):
|
||||
QDialog.__init__(self)
|
||||
self.setWindowTitle('Electrum - ' + _('Update Check'))
|
||||
self.setWindowTitle('Electrum Purple - ' + _('Update Check'))
|
||||
self.content = QVBoxLayout()
|
||||
self.content.setContentsMargins(*[10]*4)
|
||||
|
||||
@@ -88,10 +88,10 @@ class UpdateCheck(QDialog, Logger):
|
||||
self.detail_label.setText(_("You can download the new version from {}.").format(url))
|
||||
else:
|
||||
self.heading_label.setText('<h2>' + _("Already up to date") + '</h2>')
|
||||
self.detail_label.setText(_("You are already on the latest version of Electrum."))
|
||||
self.detail_label.setText(_("You are already on the latest version of Electrum Purple."))
|
||||
else:
|
||||
self.heading_label.setText('<h2>' + _("Checking for updates...") + '</h2>')
|
||||
self.detail_label.setText(_("Please wait while Electrum checks for available updates."))
|
||||
self.detail_label.setText(_("Please wait while Electrum Purple checks for available updates."))
|
||||
|
||||
|
||||
class UpdateCheckThread(QThread, Logger):
|
||||
|
||||
@@ -82,13 +82,13 @@ class WalletInfoDialog(WindowModalDialog):
|
||||
label.setIcon(read_QIcon('cloud_no'))
|
||||
grid.addWidget(label, cur_row, 1)
|
||||
if wallet.get_seed_type() == 'segwit':
|
||||
msg = _("Your channels cannot be recovered from seed, because they were created with an old version of Electrum. "
|
||||
msg = _("Your channels cannot be recovered from seed, because they were created with an old version of Electrum Purple. "
|
||||
"This means that you must save a backup of your wallet every time you create a new channel.\n\n"
|
||||
"If you want this wallet to have recoverable channels, you must close your existing channels and restore this wallet from seed")
|
||||
else:
|
||||
msg = _("Your channels cannot be recovered from seed. "
|
||||
"This means that you must save a backup of your wallet every time you create a new channel.\n\n"
|
||||
"If you want to have recoverable channels, you must create a new wallet with an Electrum seed")
|
||||
"If you want to have recoverable channels, you must create a new wallet with an Electrum Purple seed")
|
||||
grid.addWidget(HelpButton(msg), cur_row, 3)
|
||||
cur_row += 1
|
||||
grid.addWidget(WWLabel(_('Lightning Node ID:')), cur_row, 0)
|
||||
|
||||
@@ -36,7 +36,7 @@ class QEServerConnectWizard(ServerConnectWizard, QEAbstractWizard):
|
||||
class WCWelcome(WizardComponent):
|
||||
def __init__(self, parent, wizard):
|
||||
WizardComponent.__init__(self, parent, wizard, title='Network Configuration')
|
||||
self.wizard_title = _('Electrum Bitcoin Wallet')
|
||||
self.wizard_title = _('Electrum Purple Wallet')
|
||||
|
||||
self.first_help_label = QLabel()
|
||||
self.first_help_label.setText(_("Optional settings to customize your network connection") + ":")
|
||||
@@ -45,7 +45,7 @@ class WCWelcome(WizardComponent):
|
||||
self.config_proxy_w = QCheckBox(_('Use Proxy'))
|
||||
self.config_proxy_w.setChecked(False)
|
||||
self.config_proxy_w.stateChanged.connect(self.on_updated)
|
||||
self.config_server_w = QCheckBox(_('Select Electrum Server'))
|
||||
self.config_server_w = QCheckBox(_('Select Electrum Purple Server'))
|
||||
self.config_server_w.setChecked(False)
|
||||
self.config_server_w.stateChanged.connect(self.on_updated)
|
||||
options_w = QWidget()
|
||||
|
||||
@@ -33,7 +33,7 @@ class QETermsOfUseWizard(TermsOfUseWizard, QEAbstractWizard):
|
||||
class WCTermsOfUseScreen(WizardComponent):
|
||||
def __init__(self, parent, wizard):
|
||||
WizardComponent.__init__(self, parent, wizard, title='')
|
||||
self.wizard_title = _('Electrum Terms of Use')
|
||||
self.wizard_title = _('Electrum Purple Terms of Use')
|
||||
self.img_label = QLabel()
|
||||
pixmap = QPixmap(icon_path('electrum_darkblue_1.png'))
|
||||
self.img_label.setPixmap(pixmap)
|
||||
|
||||
@@ -37,7 +37,7 @@ if TYPE_CHECKING:
|
||||
from electrum.plugin import Plugins, DeviceInfo
|
||||
from electrum.gui.qt import QElectrumApplication
|
||||
|
||||
WIF_HELP_TEXT = (_('WIF keys are typed in Electrum, based on script type.') + '\n\n' +
|
||||
WIF_HELP_TEXT = (_('WIF keys are typed in Electrum Purple, based on script type.') + '\n\n' +
|
||||
_('A few examples') + ':\n' +
|
||||
'p2pkh:KxZcY47uGp9a... \t-> 1DckmggQM...\n' +
|
||||
'p2wpkh-p2sh:KxZcY47uGp9a... \t-> 3NhNeZQXF...\n' +
|
||||
@@ -243,7 +243,7 @@ class WalletWizardComponent(WizardComponent, ABC):
|
||||
|
||||
class WCWalletName(WalletWizardComponent, Logger):
|
||||
def __init__(self, parent, wizard):
|
||||
WalletWizardComponent.__init__(self, parent, wizard, title=_('Electrum wallet'))
|
||||
WalletWizardComponent.__init__(self, parent, wizard, title=_('Electrum Purple wallet'))
|
||||
Logger.__init__(self)
|
||||
|
||||
path = wizard._path
|
||||
@@ -393,7 +393,7 @@ class WCWalletType(WalletWizardComponent):
|
||||
ChoiceItem(key='standard', label=_('Standard wallet')),
|
||||
ChoiceItem(key='2fa', label=_('Wallet with two-factor authentication')),
|
||||
ChoiceItem(key='multisig', label=_('Multi-signature wallet')),
|
||||
ChoiceItem(key='imported', label=_('Import Bitcoin addresses or private keys')),
|
||||
ChoiceItem(key='imported', label=_('Import Bitcoin Purple addresses or private keys')),
|
||||
]
|
||||
choices = [c for c in wallet_kinds if c.key in wallet_types]
|
||||
|
||||
@@ -962,9 +962,9 @@ class WCMultisig(WalletWizardComponent):
|
||||
|
||||
class WCImport(WalletWizardComponent):
|
||||
def __init__(self, parent, wizard):
|
||||
WalletWizardComponent.__init__(self, parent, wizard, title=_('Import Bitcoin Addresses or Private Keys'))
|
||||
WalletWizardComponent.__init__(self, parent, wizard, title=_('Import Bitcoin Purple Addresses or Private Keys'))
|
||||
message = _(
|
||||
'Enter a list of Bitcoin addresses (this will create a watching-only wallet), or a list of private keys.')
|
||||
'Enter a list of Bitcoin Purple addresses (this will create a watching-only wallet), or a list of private keys.')
|
||||
header_layout = QHBoxLayout()
|
||||
label = WWLabel(message)
|
||||
label.setMinimumWidth(400)
|
||||
|
||||
Reference in New Issue
Block a user