Beam Desktop Wallet (Win / Mac / Linux)
  • QML 52%
  • C++ 45.6%
  • CMake 1.5%
  • Rich Text Format 0.5%
  • JavaScript 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Max 1cc4d1abac
Slatepack UI: manual copy-paste transaction exchange (#1270)
* UI: WalletModel slatepack signals + send-flow manual exchange

WalletModel relays the wallet client's onSlatepackReady / onSlatepackImportResult
callbacks as Qt signals. SendViewModel gains a manualExchange toggle that sets
TxParameterID::ManualTransport on the tx, and re-emits the produced armored
string; the send screen shows it in a new SlatepackDialog (copyable). Bumps the
beam submodule to the feat/slatepack core work.

* UI: Slatepack import flow + global display + i18n

WalletViewModel gains importSlatepack() and relays slatepackReady /
slatepackImportResult globally, so any produced Slatepack is shown (and import
errors surfaced) regardless of the active screen. Adds a Slatepack button on
the wallet header opening a paste-import dialog, and consolidates the
produced-Slatepack display here (removed from the send screen to avoid double
dialogs). Adds the i18n strings (en_US finished; other locales pending).

* UI: Slatepack review/confirm import dialog and send-flow polish

Import opens a review dialog (amount, fee, sending/receiving address, tx id,
explorer link) with Send/Cancel before the transaction proceeds. Register the
Slatepack dialogs, fix the manual-exchange send flow, and bump the beam submodule.

* UI: Slatepack — file save/load + shorten confirmation label to 'Slatepack'

* UI: Slatepack — file save/load via native QFileDialog + drag-drop

* UI: re-copy a pending tx's Slatepack from Transaction Details

* UI: translate Slatepack strings across locales; remove orphaned rs_RS

* UI: remove "WALLET SUITE" subtext from start-page logo

* UI: Slatepack review fixes — move off the DApps screen, translated errors

Addresses review feedback on the Slatepack UI PR, and bumps the beam
submodule to the matching core review-fix commit.

Lifecycle moved out of the DApps screen
 - applications.qml owned the WalletViewModel, both Connections and the
   Slatepack button. That only worked because applications.qml happens to
   be contentStack's initialItem and so stays alive at depth 0; anything
   that changed the initial item would have silently dropped the
   produced-pack dialog, leaving a completed send with a Slatepack in the
   DB and no way for the user to reach it. The lifecycle now lives on
   main, next to the other global dialogs, and the import button sits on
   the wallet header beside Send/Receive where the PR said it would.
 - Dropped wallet.qml's WalletViewModel: it was unused, and now that the
   class subscribes to wallet-model signals in its constructor, a second
   idle instance is a duplicate-subscription footgun rather than a no-op.
 - WalletViewModel tolerates being constructed with no wallet open. It is
   qmlRegisterType'd, so any QML file can instantiate it, and
   getWalletModel() throws before login.

Translated import failures
 - The failure reason arrived from core as a raw English string and was
   rendered as-is. It now travels as a slatepack::Error code, and the new
   SlatepackError singleton maps it to a specific, translatable message
   (bad checksum reads differently from "not addressed to your wallet").
   en_US here; the other locales follow in the next commit.
 - Fixed the stale comment in wallet_model.cpp claiming the QML dialog
   resolves the asset ticker and icon. It does not — WalletViewModel
   does, on the UI thread, where touching AssetsManager is safe.

Review dialog can no longer be dismissed without answering
 - Closing by clicking outside called close() without emitting rejected(),
   so cancelSlatepack never ran and the core endpoint kept holding the
   pending import. Set NoAutoClose, and release the import from onClosed
   if the dialog goes away by any other route.

Manual exchange and offline-only tokens
 - Enabling the toggle unconditionally forced choiceOffline off, which for
   a public-offline or max-privacy token silently produced a combination
   the send cannot satisfy. Those tokens have no interactive leg for a
   Slatepack to carry, so the panel is hidden and the flag refuses to
   latch (canManualExchange).

Smaller
 - SlatepackImportDialog exposes a signal instead of a property named
   onImport; the on- prefix is reserved for signal handlers in QML.
 - Null-check the results of Qt.createComponent().createObject(), and
   guard the file-load and drag-drop paths against an undefined result.

* UI: translate Slatepack import-failure strings across locales

Ten new slatepack-error-* messages, translated for every shipped locale.

* beam submodule: Slatepack merged to master (daf719156)
2026-09-22 16:24:01 +02:00
.github Fix/mac only arm (#1257) 2026-06-25 14:35:53 +03:00
3rdparty migration to qt6 (#1220) 2026-02-19 13:59:43 +01:00
beam@daf7191567 Slatepack UI: manual copy-paste transaction exchange (#1270) 2026-09-22 16:24:01 +02:00
ui Slatepack UI: manual copy-paste transaction exchange (#1270) 2026-09-22 16:24:01 +02:00
.gitignore ignore generated files 2020-10-23 17:45:01 +03:00
.gitmodules migration to qt6 (#1220) 2026-02-19 13:59:43 +01:00
CMakeLists.txt #823: Add "Remove current wallet" to Utilities (#1251) 2026-06-25 14:35:53 +03:00
LICENSE added SECURITY.md and LICENSE 2020-04-22 12:10:46 +03:00
macos_cert.tar.enc #1352 updated macos cert 2020-04-16 19:04:57 +03:00
notarize.sh test notarytool 2023-12-06 20:57:14 +02:00
README.md Update README.md 2024-04-18 16:51:02 +02:00
SECURITY.md added SECURITY.md and LICENSE 2020-04-22 12:10:46 +03:00
TERMS.rtf updated terms of use 2020-05-26 17:39:16 +03:00
TERMS.txt updated terms of use 2020-05-26 17:39:16 +03:00
version.h.in fixed some warnings 2021-05-20 18:33:54 +03:00

Build Crowdin

Beam Logo

Beam Desktop GUI Wallet

Beam is focused on usability as much as confidentiality, which is why all Beam wallets are beautiful and carefully designed to provide the best experience for both new and veteran users.

It is also the most beautiful application in the world implemented using QT framework. If you think you know a more beautiful one please send it to contact@beam.mw

User Guide

Building instructions

Contribution Guide

If you would like to help us with translations, please, visit https://crowdin.com/project/beammw