Bitcoin–Monero Cross-chain Atomic Swap
Find a file
Mohan a7823d7489
feat(gui): Monero wallet (#442)
* feat(gui): Monero wallet

* progress

* refactor

* progress, dont delete wallet, re-fetch approvals and background periodically

* show transaction history correctly

* Enable fetching tx hashes

* Try add the wallet listener event callbacks, not working

* fix: Redeem XMR to internal main wallet, not temp wallet

* type safety

* refactoring of callback system

* make free floating functions generic

* refactor: Format files

* refactor(gui): Split wallet components and redesign balanceOverview component

* refactor(gui): Add action buttons and transaction section

* wrapper event listener

* progress, compiles

* works!

* WORKS! Event received on balance change

* refactor: format and slight refactorings and comments

* refactor(gui): Start with implementation of send dialog

- new number input
- new button variant and size

* add @tauri-apps/plugin-dialog

* feat(gui): Add permissions for file dialog

* fix(monero-harness): Compile issue

* feat(gui): Extract seed from Monero wallet and use for derivation, allow opening existing wallet file

* feat(gui): Always refresh the approval list from frontend when resolving

* fix(monero-rpc-pool): Implement Into<String> for ServerInfo

* fix(monero-sys): Use oneshot channel for all wallets

* feat(gui, monero-sys): Display recently opened wallets

* small refactors

* fix(gui): Enable background_sync, display temp "Loading..." if values are null

* feat(gui): Remove headers from pages, show selected navigation item

* feat(gui): Explicitly tell user if no swaps have been made yet

* feat(gui): send sync and history updates

* feat(gui): Fetch monero wallet details when context becomes availiable

* feat(gui): Display Monero primary address without modal

* feat(gui): Make "swap" button on wallet page take you to "/swap"

* feat(gui): Rework send modal, adjust number input, added send to field

* feat(gui): set block restore height, not working

* refactor(gui): Optimize number input and add support for switching between currency

* feat(gui): Display real fiat currency prices in send modal

* feat(gui): Add error message for too high send amount

* feat(gui): Modern UI for SeedSelectionDialog

* feat(gui): Wrap MoneroWalletActions

* wip

* refactoring approval callback

* feat(gui): Send Direction of Transaction in History to Frontend

* feat(gui): Let user approve transaction before publishing

* feat: Display 8 digits for Monero amounts by default

* feat(monero-sys): Store pending (non published) transactions in Mutex map inside wallet thread

This allows seperating signing and publishing transactions cleanly

* dprint fmt

* fix(gui): Refresh Monero wallet history C++ struct before serializing

* feat(monero-rpc-pool): Fail after three JSON-RPC errors

* feat(monero-sys): Add wrapper around verify_wallet_password

* feat(gui): Allow opening password-protected Wallets

* refactor: fmt, remove receive button

* fix(gui): Convert to XMR before converting into Fiat

* feat(gui): Add dialog for setting restore height

* feat(gui): block height can be changed, blocks when too low

* refactor(monero-sys): Remove old WalletListener code

* feat(gui): Continually ask for user to select wallet and enter password, if user rejects, offer to select different wallet

* refactor(swap): Extract "select Monero wallet" into own function

* refactor(tauri): Dont kill monero-wallet-rpc

* refactor(tauri): Avoid multiple concurrent Contexts starting

* refactor: Change "Cancel" to "Change wallet" on PasswordEntryDialog

* feat(gui): show curent block height, fix blockage

* Cargo.lock update

* refactor(monero-sys): Use match instead of is_err() and expect(...)

* refactor: better context for WalletHandle constructor method errors handling

* refactor(monero-sys): Common open_with<F>(path: String, daemon: Daemon, wallet_op: F) function

* feat: check empty password before requeston password for wallet

* feat: Remove "Checking for available remote nodes" from frontend

* feat(gui): Allow sweeping entire Monero balance

* feat(monero-rpc-pool): Keep alive TCP connections, do not record JSON-RPC errors as failure if >=3 nodes failed

If >=3 nodes failed we assume it was an actual issue on our side, not an issue with the node

* refactor(swap): Remove dead code

* add comment to WalletHandleListener::on_refreshed{...}

* feat(gui): show current block height in the field

* refactor: remove unused UserCancelledError;

* refactor: No Arc<Mutex<_>> for Pending TXs map

* refactor: remove redundant } catch (error) {

* feat: add our new crates to `OUR_CRATES` in tracing util

* fix(gui): Add math.ceil to piconero conversion to ensure integer

* fix(gui): Close menu when option is clicked

* review and improve/reduce uses of unsafe, also remove unique_ptr wrapper around TransactionHistory to avoid double free

* fix(gui): Use monero amount from units.tsx

* fix(gui): Use PromiseInvokeButton for simplification for approving of send transaction

* update comment, rename function

* refactor(gui): Fix alignment of amounts

* refactor(gui): Remove sending and refreshing states from wallet

* fix(cli, gui): use old seed flow on no tauri, fix minor issues in gui

* fix: use the new named function

* refactor(gui): Add skeletons for monero wallet when still loading

* refactor(gui): Remove isLoading from wallet slice

* feat(gui): Add success dialog after send transaction was approved

* fix(gui): Floor piconero amount in sendMoneroTransaction

* feat(gui): Allow view on explorer button on send success modal

* feat(backend): save the wallet state on events

* fix(structure): move throttle into its own crate

* fix(log): remove spammy logs

* fix(logs): log folder in confid

* remove "sync progress: " log

* small refactors

* save wallet at most every 60s

* remove useless logs

* underscore unused variables

* feat(gui): Add timestamp of the tx

* feat(gui): Add the legacy wallet init option

* legac ybutton

* Fix(gui, asb): reverse the log config
remove log in bridge.h
cleanup

* use none for .store(..)

* display dot for running swap

---------

Co-authored-by: Maksim Kirillov <maksim.kirillov@staticlabs.de>
Co-authored-by: b-enedict <benedict.seuss@gmail.com>
Co-authored-by: einliterflasche <einliterflasche@pm.me>
2025-07-18 15:08:36 +02:00
.cargo feat(monero-sys): Monero bindings (#303) 2025-06-17 10:55:50 +02:00
.cursor/rules feat(gui, cli): Request quotes concurrently at all sellers (#429) 2025-07-02 16:21:36 +02:00
.github fix(ci): Push docker image to ghcr.io/eigenwallet/asb 2025-07-18 09:25:35 +02:00
.vscode feat(gui): Voluntary donations (#418) 2025-06-25 16:37:47 +02:00
dev-docs rebranding: eigenwallet (#461) 2025-07-17 16:31:29 +02:00
dev_scripts rebranding: eigenwallet (#461) 2025-07-17 16:31:29 +02:00
docs rebranding: eigenwallet (#461) 2025-07-17 16:31:29 +02:00
electrum-pool rebranding: eigenwallet (#461) 2025-07-17 16:31:29 +02:00
flatpak change flatpak to http://flatpak.eigenwallet.net/ 2025-07-18 10:42:33 +02:00
monero-harness feat(gui): Monero wallet (#442) 2025-07-18 15:08:36 +02:00
monero-rpc refactor(workspace): swap-fs, swap-serde, swap-env crates (#459) 2025-07-14 22:05:43 +02:00
monero-rpc-pool feat(gui): Monero wallet (#442) 2025-07-18 15:08:36 +02:00
monero-seed refactor: Rename seed crate to monero-seed 2025-07-15 10:47:03 +02:00
monero-sys feat(gui): Monero wallet (#442) 2025-07-18 15:08:36 +02:00
src-gui feat(gui): Monero wallet (#442) 2025-07-18 15:08:36 +02:00
src-tauri feat(gui): Monero wallet (#442) 2025-07-18 15:08:36 +02:00
swap feat(gui): Monero wallet (#442) 2025-07-18 15:08:36 +02:00
swap-env feat(gui): Monero wallet (#442) 2025-07-18 15:08:36 +02:00
swap-feed refactor: swap-feed crate (#464) 2025-07-17 20:27:30 +02:00
swap-fs feat(gui): Monero wallet (#442) 2025-07-18 15:08:36 +02:00
swap-serde feat(gui): Monero wallet (#442) 2025-07-18 15:08:36 +02:00
throttle feat(gui): Monero wallet (#442) 2025-07-18 15:08:36 +02:00
utils/gpg_keys fix: Remove .DS_STORE file 2024-07-26 14:44:40 +02:00
.dockerignore feat(monero-sys): Monero bindings (#303) 2025-06-17 10:55:50 +02:00
.gitignore feat(monero): Remote node load balancing (#420) 2025-06-19 01:35:34 +02:00
.gitmodules feat(monero-sys): Monero bindings (#303) 2025-06-17 10:55:50 +02:00
.taurignore feat(monero-sys): Monero bindings (#303) 2025-06-17 10:55:50 +02:00
AGENT.md rebranding: eigenwallet (#461) 2025-07-17 16:31:29 +02:00
Cargo.lock feat(gui): Monero wallet (#442) 2025-07-18 15:08:36 +02:00
Cargo.toml feat(gui): Monero wallet (#442) 2025-07-18 15:08:36 +02:00
CHANGELOG.md Prepare release 2.5.6 (#466) 2025-07-18 11:02:50 +02:00
CONTRIBUTING.md docs(dev): switch test instructions to nextest (#361) 2025-05-27 11:05:49 +02:00
Dockerfile fix: max 3 cores for docker build env 2025-06-24 00:29:45 +02:00
dprint.json fix(dprint): ignore monero-seed for dprint 2025-07-17 16:22:09 +02:00
justfile feat(gui): Monero wallet (#442) 2025-07-18 15:08:36 +02:00
LICENSE
README.md rebranding: Change github/UnstoppableSwap to github/eigenwallet 2025-07-16 15:58:27 +02:00
rust-toolchain.toml minimal rust version: 1.85, fix monero-rs expect(...) panic 2025-06-20 21:07:23 +02:00

eigenwallet

This is the monorepo containing the source code for all of our core projects:

  • swap contains the source code for the main swapping binaries, asb and swap
  • gui contains the new tauri based user interface
  • tauri contains the tauri bindings between binaries and user interface
  • and other crates we use in our binaries

If you're just here for the software, head over to the releases tab and grab the binary for your operating system! If you're just looking for documentation, check out our docs page or our github docs.

Join our Matrix room to follow development more closely.

The project was previously known as UnstoppableSwap. Read this for our motivation for the rename.

Screenshot 2024-11-21 at 6 19 03 PM

Contributing

We have a justfile containing a lot of useful commands. Run just help to see all the available commands.

Running tests

This repository uses cargo-nextest to run the test suite.

cargo install cargo-nextest
cargo nextest run