Bitcoin–Monero Cross-chain Atomic Swap
Find a file
Mohan 69ddd2486d
feat(gui): DFX.swiss integration (#451)
* 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

* feat(monero-sys): Support signing messages

* feat(gui): DFX.swiss integration

* refactor: format, slight refactorings

* progress

* 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

* fix

* get working

* feat(gui): Add tooltip to buy monero button

* refactor: Format files

* refactor(gui): Do not store logs in redux-persist

---------

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-28 11:00:33 +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 fix(flatpak): Link to .org instead of .net 2025-07-22 21:22:22 +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 fix(monero-sys): Lock refresh before storing wallet file (#475) 2025-07-23 22:01:06 +02:00
src-gui feat(gui): DFX.swiss integration (#451) 2025-07-28 11:00:33 +02:00
src-tauri feat(gui): DFX.swiss integration (#451) 2025-07-28 11:00:33 +02:00
swap feat(gui): DFX.swiss integration (#451) 2025-07-28 11:00:33 +02:00
swap-env dprint fmt 2025-07-18 15:24:03 +02:00
swap-feed dprint fmt 2025-07-18 15:24:03 +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 dprint fmt 2025-07-18 15:24:03 +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): DFX.swiss integration (#451) 2025-07-28 11:00:33 +02:00
Cargo.toml dprint fmt 2025-07-18 15:24:03 +02:00
CHANGELOG.md Prepare release 3.0.0-beta.2 (#482) 2025-07-27 23:57:40 +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 Change license to GPLv3 2020-10-12 17:13:25 +11:00
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