diff --git a/CHANGELOG.md b/CHANGELOG.md index d2407a43c..bf514093b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,120 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 --- +## [0.9.0] - 2025-12-07 + +### Overview +This release introduces critical bug fixes for the Android QML app and updates to terminology and documentation to reflect Pallectrum instead of Electrum. + +### Critical Bug Fixes (Android QML) + +#### 1. Fix: Real-time balance updates + +**Issue resolved**: The Android app balance was not updating in real-time when transactions received confirmations or when coinbase rewards became mature (120 blocks). Users had to close and restart the app to see the correct balance. + +**Root Cause**: +- Missing `balanceChanged` signal emission when a transaction changed height (received blockchain confirmations) +- Missing handler for `blockchain_updated` event that notifies new blocks and coinbase maturation + +**Implemented changes**: + +a) **Fix for transaction confirmations** + - File: `electrum/gui/qml/qewallet.py:211` + - Added `self.balanceChanged.emit()` in `on_event_adb_tx_height_changed` + +b) **Fix for coinbase maturity** + - File: `electrum/gui/qml/qewallet.py:245-250` + - Added new handler `on_event_blockchain_updated()` + - Emits `balanceChanged` when new blocks arrive + +c) **Debug logging** + - File: `electrum/gui/qml/components/controls/BalanceSummary.qml:178` + - Added console.log to track balance updates + +**Impact**: +- Balance updates automatically when transactions receive confirmations +- Mining rewards (coinbase) appear automatically after 120 confirmations +- No longer necessary to restart the app to see correct balance +- Better user experience for miners + +#### 2. Fix: Typo correction in BalanceDetails.qml + +**Issue resolved**: "Lightning swap" button was causing QML runtime errors. + +**Root Cause**: Typo in QEAmount property - used `.satInt` instead of `.satsInt` + +**Modified file**: `electrum/gui/qml/components/BalanceDetails.qml:217` + +### Terminology and Documentation Updates + +#### 3. Payment request text updates +- Replaced "Bitcoin/Electrum" references with "Palladium/Pallectrum" +- File: ReceiveTab - Request expiration section +- Changes: + - "bitcoin addresses" → "Palladium addresses" + - "electrum wallets" → "Pallectrum wallet" + - "Bitcoin address" → "Palladium address" + +#### 4. Preferences → Units update +- Thousands separator checkbox: "bitcoin" → "Palladium" + +#### 5. Official website link updates +- Links now point to Pallectrum GitHub repository instead of electrum.org + +#### 6. Whitepaper link updates +- "Bitcoin whitepaper" references updated to reflect Palladium +- Links to project documentation on GitHub + +#### 7. Windows builds documentation +- Added README.md with description of two Windows versions: + - `pallectrum-x.x.x-portable.exe` - Recommended for USB drives + - `pallectrum-x.x.x-setup.exe` - Standalone installer + +#### 8. Help menu cleanup +- Removed "Check for updates" menu item that referenced Electrum update servers +- File: `electrum/gui/qt/main_window.py` (lines 844, 897-898) +- Reason: Update checker pointed to `https://electrum.org/version` which is not appropriate for Pallectrum + +### Technical Details + +**Balance update architecture**: +- Pattern: Event-driven reactive updates +- Thread-safe via `@qt_event_listener` decorator +- Zero overhead (signal emission is O(1)) +- No polling - completely event-driven + +**Performance**: +- CPU: O(1) per signal emit +- Memory: No increase +- Battery: No impact (rare events, ~1 every 10 minutes) +- Network: No additional traffic + +**Event frequency**: +- `adb_tx_height_changed`: Only when wallet TX receives confirmations +- `blockchain_updated`: ~1 time every 10 minutes (new block) + +### Upgrade + +**For existing users**: +- No data migration required +- Existing wallets 100% compatible +- No reconfiguration needed + +**What will change**: +- Balance updates automatically (no more restarts) +- Terminology updated to Palladium/Pallectrum + +### Testing + +**Tests performed**: +- New TX received → Balance updated +- TX receives confirmations → Balance from unconfirmed to confirmed +- Coinbase matures (120 confirmations) → Reward appears automatically +- Lightning swap button → Works correctly +- No redundant updates + +--- + ## [0.2.0] - 2025-12-04 ### Technical Cleanup and Optimization diff --git a/README.md b/README.md index d3712dc8e..d67ed6528 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ``` Licence: MIT Licence -Version: 0.2.0 +Version: 0.9.0 Maintainer: Davide Grilli Language: Python (>= 3.10) Homepage: https://github.com/palladium-coin/pallectrum @@ -39,7 +39,9 @@ Pallectrum is a fork of Electrum v4.6.2, adapted to work with the Palladium bloc The easiest way to run Pallectrum is to download the pre-built binaries: -- **Windows**: Download `pallectrum-x.x.x-setup.exe` +- **Windows**: Two versions available: + - `pallectrum-x.x.x-portable.exe` - **Recommended for USB drives**. Saves all data (wallets, configuration) in the same directory as the executable. Perfect for portable installations. + - `pallectrum-x.x.x-setup.exe` - Standalone installer. Installs to Program Files and saves data in `%APPDATA%\Pallectrum`. - **Linux**: Download `pallectrum-x.x.x-x86_64.AppImage` - **Android**: Download `pallectrum-x.x.x.apk` diff --git a/contrib/build-linux/appimage/make_appimage.sh b/contrib/build-linux/appimage/make_appimage.sh index 9c3713332..2d37786e5 100755 --- a/contrib/build-linux/appimage/make_appimage.sh +++ b/contrib/build-linux/appimage/make_appimage.sh @@ -3,13 +3,14 @@ set -e PROJECT_ROOT="$(dirname "$(readlink -e "$0")")/../../.." +PROJECT_ROOT_OR_FRESHCLONE_ROOT="$PROJECT_ROOT" CONTRIB="$PROJECT_ROOT/contrib" CONTRIB_APPIMAGE="$CONTRIB/build-linux/appimage" DISTDIR="$PROJECT_ROOT/dist" BUILDDIR="$CONTRIB_APPIMAGE/build/appimage" APPDIR="$BUILDDIR/pallectrum.AppDir" CACHEDIR="$CONTRIB_APPIMAGE/.cache/appimage" -TYPE2_RUNTIME_REPO_DIR="$CACHEDIR/type2-runtime" +TYPE2_RUNTIME_REPO_DIR="$PROJECT_ROOT_OR_FRESHCLONE_ROOT/contrib/build-linux/appimage/.cache/appimage/type2-runtime" export DLL_TARGET_DIR="$CACHEDIR/dlls" PIP_CACHE_DIR="$CONTRIB_APPIMAGE/.cache/pip_cache" diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py index 1769ef39c..7bec1c727 100644 --- a/electrum/gui/qt/main_window.py +++ b/electrum/gui/qt/main_window.py @@ -841,7 +841,6 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger, QtEventListener): about_action.triggered.connect(self.show_about) about_action.setMenuRole(QAction.MenuRole.AboutRole) # make sure OS recognizes it as "About" self.help_menu.addAction(about_action) - self.help_menu.addAction(_("&Check for updates"), self.show_update_check) self.help_menu.addAction(_("&Official website"), lambda: webopen("https://github.com/palladium-coin/pallectrum")) self.help_menu.addSeparator() self.help_menu.addAction(_("&Documentation"), lambda: webopen("https://github.com/palladium-coin/pallectrum/blob/main/user-guide.md")).setShortcut(QKeySequence.StandardKey.HelpContents) @@ -894,9 +893,6 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger, QtEventListener): return webopen('file:///' + filename) - def show_update_check(self, version=None): - self.gui_object._update_check = UpdateCheck(latest_version=version) - def show_report_bug(self): msg = ' '.join([ _("Please report any bugs as issues on github:
"), diff --git a/electrum/plugins/timelock_recovery/manifest.json b/electrum/plugins/timelock_recovery/manifest.json index 9670832d3..36fc0abb5 100644 --- a/electrum/plugins/timelock_recovery/manifest.json +++ b/electrum/plugins/timelock_recovery/manifest.json @@ -4,5 +4,5 @@ "author": "orenz0@protonmail.com", "available_for": ["qt"], "icon":"timelock_recovery_60.png", - "version": "0.2.0" + "version": "0.9.0" } diff --git a/electrum/version.py b/electrum/version.py index d09e6c00d..c4199581f 100644 --- a/electrum/version.py +++ b/electrum/version.py @@ -1,4 +1,4 @@ -ELECTRUM_VERSION = '0.2.0' # version of the client package (Pallectrum) +ELECTRUM_VERSION = '0.9.0' # version of the client package (Pallectrum) PROTOCOL_VERSION_MIN = '1.4' # electrum protocol PROTOCOL_VERSION_MAX = '1.6'