XMR BTC Atomic Swaps Desktop GUI - Continued development for 6 months
Who:
I am binarybaron, the creator of UnstoppableSwap.net and a Monero enthusiast. From the moment I heard about Atomic Swaps, I was hooked. I tested the first versions developed by the COMIT team and contributed to the project early on.
When the project became fairly stable, it was clear to me that we'd have to improve UI as well as work on peer discovery. That's when I decided to launch UnstoppableSwap.net, which was a web interface that made interacting with the CLI easier and was later transformed into a much more capable desktop application. UnstoppableSwap.net also runs a "public registry" of market makers which is used in conjunction with other decentralized discovery mechanism to allow users to find peers to swap with.
Previous CCS:
I've had two previous funded and successfully completed CCS. One (first CCS proposal) for developing an initial prototype for the GUI and a second one for further development. Those have allowed me to launch a now fully-functional desktop GUI that makes it possible to swap Bitcoin to Monero on Mainnet.
Over the last year and a half, I've:
- Made over 270 commits to the unstoppableswap-gui repository
- Become one of the three unpaid volunteers maintaining the xmr-btc-swap repository after the comit guys (original developers who developed the first MVP) have moved on to other projects. I’ve submitted and merged 25 Pull Requests over the last months and reviewed some more.
- The swap provider I run faciliated over 1000 Mainnet Bitcoin to Monero swaps
Proposal:
I'm excited to keep working on Atomic Swaps and I'd like to continue spending my time working on two things:
- GUI for BTC<>XMR Atomic Swaps: It is being built around the xmr-btc-swap implementation originally developed by comit-network and empowers even non-technical people to swap their BTC for XMR in a safe, decentralized and trustless manner. It is available for download and already usable on Mainnet.
- Maintaining the rust xmr-btc-swap implementation. The COMIT team has given me and two other volunteers write permissions and we've been responding to tickets and creating/reviewing PRs for new features and bug fixes over the last months. I'd like to dedicate part of my time paid by this CCS to this project.
I'm asking for 156 XMR for continued development for 6 months. At the end of each month 26 XMR will be paid out. I'll dedicate 15 hours of focused-work per week for 6 months straight which amounts to 288 hours of labour. My hourly rate is 66 USD which amounts to 156 XMR at a current price of 146 XMR/USD.
What:
- Development of the graphical user interface (GUI)
-
Migrate to RPC API: While working on the GUI, I've discovered a few things that are making developing tools on top of the xmr-btc-swap project much harder that it needs to be. Improving this will also make it a lot easier for projects beside the
GUI
(e.g SamouraiWallet) to use the xmr-btc-swap implementation as a sort of "backend" to faciliate Atomic Swaps. While they should have been obvious from the beginning, I initially thought they could be worked around. Namely:- There is no easy way to extract information about swaps to display to the user. Not all Information is available in one place. Some is only present in the internal database. Some needs to extracted from logs because it's not saved anywhere.
- Having to spawn a whole process to get a single piece of information (for example internal balance of Bitcoin wallet) is too expensive and cumbersome.
- Relying on logs and the internal database is not safe. Log messages are often changed and not consistent across
swap-cli
(the CLI application which is released as part of thexmr-btc-swap
project and which handles all the networking and cryptography) versions. The internal representation of data structures in the database is not consistent either.
The solution is a RPC API for the
swap-cli
that allows theGUI
to retrieve information much safer and easier. This change requires a large rework of theGUI
and a lot of restructuring for theswap-cli
. It'll massively boost the performance of theGUI
(swaps being initiated in <1s versus up to 10s right now) as well as drastically reducing the code complexity of the project. Work on this has been ongoing for quite some time now (PR 1276, PR 126) but this CCS will enable me to finally get this done. This point alone will take up a good chunk of the first month. -
Improve documentation. Create a Wiki explaining basic concepts of Atomic Swaps and remedies for common issues. Also create better documentation for new developers to get started with working on the
GUI
. -
Educate users on the rules of the swap protocol. There are some simple but important rules all users need to follow to avoid losing funds. Most importantly the functionality of the cancel and refund timelocks must be understood. To ensure all users understand these concepts before they start their first swap, I'll create info material as well as a quiz that is presented to the user at startup.
-
Make sure GUI runs flawlessly on Tails. Due to some quirks in how Tails allows applications to access the outside world, there are currently some problems with running the GUI on Tails. Because of the inherent privacy focused nature of Atomic Swaps, allowing users to perform them on Tails effortlessy is important.
-
Allow monero recovery information to be displayed to the user. In some rare cases there can be issues with the final step of the swap process (Monero redemption) if the
swap-cli
fails to connect to a Monero daemon. The GUI should enable the user to print theView Key
and the theSpend Key
which can then be imported into themonero-wallet-gui
to allow for the manual redemption of the funds. -
Integrate auto updater more closely with the GUI. I'll integrate it more closely with the existing user interface by displaying a proper pop up that aligns with the general theme of the
GUI
instead of a system dialog. I'll also start displaying the changelog in the GUI itself to inform the user about any changes. -
Expand information displayed to user about the state of their swap. We'll expand the information displayed to users about the state of their swap to avoid common misconceptions such as weither there is a risk of being punished in a particular scenario. Features related to this will include but will not be limited to:
- An info icon displayed next to the name of the current state (e.g BtcLocked) that when pressed shows detailed information about it (general information, possible risks, ...)
- A visual timeline of the bitcoin timelocks
- General improvement of the GUI.
- Fixing bugs and responding to Github issues and user feedback as they come up
- Implementing new features as they come to mind and/or are suggested by users
- Improving the user interface in terms of looks and usability
- Improving performance by reducing complexity, especially in light of the RPC API rework
- Expanding tests
-
-
Reviewing, merging, submitting Pull Requests to the xmr-btc-swap repository.
- This proposal is mainly for continued development of the GUI and not for maintenance of the xmr-btc-swap project. Time spent on xmr-btc-swap will at most be 30% of the total time spent on this proposal.
- Most of the Pull Requests we’ll submit will be related to making the swap-cli compatible with the GUI
- Some of the things I'll work might include but are not limited to:
- RPC API for the
swap-cli
which will drastically reduce the complexity of the GUI by allowing it to directly connect to theswap-cli
via a standardized API. (PR 126) - Dynamically choosing the Electrum Node instead of having to manually pass one / using a hardcoded one (Issue 873)
- Providing better feedback when things (e.g publishing cancel transactions) go wrong (e.g PR 683)
- Experiemental Android Support (Issue 677)
- Validate
monero-wallet-rpc
binary validity on download (Issue 673) - Hardening of Bitcoin transaction subscriptions (Issue 1063, Issue 1425)
- Investigate issue where final step of swap process (Monero redemption) fails (Issue 1432)
- RPC API for the
- Development and maintenance of the API that enables clients to easily discover swap providers. A swap provider is a peer you can connect with to exchange your BTC for XMR. Our API indexes them and provides additional data such as their uptime and their age. This API is publicly accessible and can be used by other services (e.g orangefren.com). We provide an HTTP(s) and a WebSocket (socket.io) endpoint which are documented on UnstoppableSwap.net.
- Development and maintenance of the UnstoppableSwap.net site. Although this will only small to a small amount of the time spent on this CCS, we'll refine the Website further especially when the GUI is closer to being maintenance only (few new features being added).
-
Maintenance of rendezvous point. There are currently three major ways for users to discover swap providers (peers they can swap their Bitcoin for Monero with). This proposal also includes the maintenance of the rendezvous point we run.
- Word-of-mouth: The community can share the address of swap providers online (e.g on Reddit, IRC, Matrix..)
- Centralized peer discovery via UnstoppableSwap API: We actively maintain a database of swap providers which can be used by anyone to retrieve a list of swap providers
- Rendezvous point: The rendezvous protocol is a lightweight mechanism for generalized peer discovery. It allows for the discovery of peers in a decentralized fashion. We operate a community rendezvous point through which swap providers can make themselves known to users, and through which users can find swap providers with whom they want to swap.(
/dns4/discover.unstoppableswap.net/tcp/8888/p2p/12D3KooWA6cnqJpVnreBVnoro8midDL9Lpzmg8oJPoAGi7YYaamE
)
If funded I'll provide monthly updates in the CCS comment section.