Skip to content

Conversation

@nabijaczleweli
Copy link

@nabijaczleweli nabijaczleweli commented Nov 11, 2025

Closes: #689


Note

Enables setting a wallet password on create/restore and changing it later, wiring FFI, backend requests/commands, RPC, and GUI with a new password input.

  • Backend (FFI/monero-sys):
    • Add Wallet::setPassword binding and FfiWallet::set_password, expose WalletHandle::set_password.
    • Add open_or_create_with_password and open_or_create_from_seed_with_password; plumb optional password through open/recover paths.
  • CLI/API & Types:
    • Extend SeedChoice to RandomSeed { password } and FromSeed { seed, password }; update wallet creation to pass password (or none if empty).
    • Add SetMoneroWalletPasswordArgs/Response request; on success, persist via store_in_current_file.
  • Tauri Commands/RPC:
    • Register set_monero_wallet_password command; add setMoneroWalletPassword in renderer/rpc.ts.
  • GUI:
    • Seed selection dialog supports password entry/confirmation for RandomSeed and FromSeed; button disabled until valid.
    • New NewPasswordInput component for password + repeat with visibility toggle.
    • Wallet actions menu adds "Change Password" opening SetPasswordModal.

Written by Cursor Bugbot for commit e7f7070. This will update automatically on new commits. Configure here.

@nabijaczleweli
Copy link
Author

2025-11-12.00-47-13c.mp4

Opening this in feather prompts for a passphrase and writing in asd works

@binarybaron
Copy link

The Rust code looks good. We might also want to allow changing the password for an already existing wallet?

Also not sure if we might want to move the password input to another page / a new dialog that is shown after the wallet is created? I think the UI I built for the wallet selection is already a bit cluttered and this argueably makes it a bit worse because even more stuff is shown on a single page.

I like the wizard Feather wallet guides you through.

@nabijaczleweli
Copy link
Author

Added password changer:

2025-11-12.20-22-35Q.mp4

I disagree. The "select wallet" modal has everything configurable on one page that doesn't scroll. There's no clutter that I can see either: there's only the 2/3 inputs you need and that's it.
Yes, feather has a wizard but that wizard, having clicked through it, is a little too sparse even for the breadth of options feather supports. Feather is a fully-featured generic wallet and lets you configure basically every aspect of the wallet in every conceivable way, and some inputs it wants depend on previous inputs.
unstoppableswap-gui-rs has a much narrower scope with single-stage no-interdependent configuration entry, so I don't really see how turning "use $A or $B or $C" into mutlistage wizardslop improves it.
There is one instance of unavoidable multistage (existing wallet -> turns out to be passworded -> prompt for password) and that kinda sucks but it's unavoidable so it's whatever I guess.

@binarybaron
Copy link

bugbot run

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no bugs!


@binarybaron binarybaron added GUI Related to the Tauri GUI monero wallet labels Nov 13, 2025
@binarybaron
Copy link

It seems that SetPasswordModal was lost during a force push and there are imports missing in rpc.ts. Other than that this looks good to merge to me. I'll test this manually once after the issues below are fixed, then we can merge.

tsc yields:

$ /Users/_/Development/eigenwallet/wallet/src-gui/node_modules/.bin/tsc --noEmit
src/renderer/components/pages/monero/components/WalletActionButtons.tsx:29:30 - error TS2307: Cannot find module '../SetPasswordModal' or its corresponding type declarations.

29 import SetPasswordModal from "../SetPasswordModal";
                                ~~~~~~~~~~~~~~~~~~~~~

src/renderer/rpc.ts:538:12 - error TS2304: Cannot find name 'SetMoneroWalletPasswordResponse'.

538 ): Promise<SetMoneroWalletPasswordResponse> {
               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

src/renderer/rpc.ts:539:23 - error TS2304: Cannot find name 'SetMoneroWalletPassword'.

539   return await invoke<SetMoneroWalletPassword, SetMoneroWalletPasswordResponse>(
                          ~~~~~~~~~~~~~~~~~~~~~~~

src/renderer/rpc.ts:539:48 - error TS2304: Cannot find name 'SetMoneroWalletPasswordResponse'.

539   return await invoke<SetMoneroWalletPassword, SetMoneroWalletPasswordResponse>(
                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Found 4 errors in 2 files.

Without saving, we can get the wallet into a state that causes libmonero
to throw std::bad_alloc (in the GUI and in feather; opening it a second
time in feather fixes it)
@nabijaczleweli
Copy link
Author

One day I'll not forget to git add a new file but that day is not today. Both fixed.

@binarybaron binarybaron merged commit fe42dc6 into eigenwallet:master Nov 14, 2025
39 of 51 checks passed
@binarybaron
Copy link

Great work. I love the UI. I wanted to get this implemented for weeks, very happy we finally have this feature now.

I'll be assuming #688 (comment) is still the address I should send the bounty to. Let me know if this is incorrect. I'll send the bounty in around an hour.

@binarybaron
Copy link

Bounty of 0.25 XMR paid out to @nabijaczleweli in this transaction.

@nabijaczleweli
Copy link
Author

I think it'd be crazy of me to change the address and not notify you. But while we're on the topic, as I GC my open-bounty tabs, I think you missed #710?

@binarybaron
Copy link

I think it'd be crazy of me to change the address and not notify you.

That is probably true yes...but cannot be too cautious. I'll assume from now on that your address remains the same :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

GUI Related to the Tauri GUI monero wallet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[0.25 XMR] Pin or password to lock and encrypt wallet

2 participants