This page is used to post updates about the CoinJoin Flipstarter campaign. The campaign was fully funded by the BCH community in November of 2022, and work will take place from January through March of 2023.
- bch-js Telegram Channel - Used to discuss the project and ask technical questions.
- bch-coinjoin GitHub Group - Where the code repositories for this project live.
- CoinJoin Flowchart
The Flipstarter campaign was funded by the BCH community! Work on this project will begin on January 1st 2023, and will complete on April 1st. 10 hours per week will be spent on the project. Everything will be developed as open source software under the MIT license. There are five design elements that need to be developed:
- Packaging - This is the desktop app using Electron.js. It will be compiled and tested on Windows, Mac, and Linux. The UI will closely resembed wallet.FullStack.cash.
- Back End Infrastructure - this part is complete for the most part. It will use the web3 Cash Stack.
- HD wallet functionality - this part is mostly complete. The code exists in slp-cli-wallet, which is an older project. The code needs to be dusted off and customized for this app. The HD address tracking needs to be slightly refined.
- p2p coordination - The bulk of this code is complete. The ipfs-coord library will be leveraged, and adapted to fit the Collaborative CoinJoin protocol.
- CoinJoin protocol - The Collaborative CoinJoin protocol will be developed and adapted from this CoinJoin code example. But the code will be developed in a modular fashion, so that it can be swapped out with additional protocols in the future. This will allow better (but harder to develop) CoinJoin protocols like CashShuffle and CashFusion to be swapped in later, without having to change the other four design elements.
I created a documentation site and a summary blog post to wrap up the project.
I significantly increased the reliability of the CoinJoin transactions. I got the CoinJoin use-case library up to 100% unit test coverage. This library covers the bulk of the programming to organize a CoinJoin transaction between peers.
The first Collaborative CoinJoin Transaction has been broadcasted to the BCH network!. Additionally, this CoinJoin Flowchart was created to document how peers collaborate to create a CoinJoin transaction using hd-cli-wallet and colab-coinjoin-api.
The basic command-line HD wallet functionality in hd-cli-wallet has been implemented. I also got the basic IPFS pubsub communication working between peers (CoinJoin wallets are an IPFS peer). Each wallet announces itself on the pubsub channel, and other wallets can see that wallet. I am currently working on the RPC communication between peers for initiating a CoinJoin transaction.
The architecture is starting to come together. The main project README has been updated with a description of the major code repositories and how they all fit together to create the complete CoinJoin wallet app.
A major focus of this project was to develop a desktop application for Windows, Mac, and Linux, which is why so much time up to this point has been dedicated to that goal. The common way to build ElectronJS is to use a GitHub action, but that does not work for this project due to its complexity. After exhausting all options with the GitHub actions, I tried installing a Widnows and Mac virtual machine onto the dev computer, to manually build the desktop applications.
I succeeded with being able to build a Windows executable. However, the Mac VM (virtual machine) crashes during the build. I had access to an older laptop running MacOS v10, but it would not install the dependencies. At this point I have no option but to continue with the build for Linux and Windows, and hope that I can figure out a solution for Macs.
v1.1.4 successfully compiled the single-address web wallet into an Electron app that can be installed on a desktop. I tested the Linux AppImage and the Windows EXE. If someone has time to test the .dmg file for Mac, please let me know.
The executables are not signed, so they will throw warnings when installed on Windows or Mac.
The code in this repository will basically be frozen, and this code will be used as a boilerplate. It will be forked to generate a UI for the HD-wallet version of the wallet. That version will be used for actual CoinJoins.
https://github.com/bch-coinjoin/electron-bch-wallet-single-addr/releases/tag/v1.1.4
The same code that powers wallet.fullstack.cash has been ported to to electron-bch-wallet-single-addr and wrapped inside an Electron.js app. Only basic functionality is in place, but its exciting progress! Next step is reliably producing excutables that can run on Windows, Mac, and Linux.
Work has started! The first order of business is to create an Electron.js template, which will be the basic cross-platform desktop app that will house the CoinJoin wallet.
- CoinJoin-Flipstarter.PSFoundation.info - Backup of original campaign.
- Original Reddit discussion thread
- Twitter Hangout podcast where the campaign was discussed.
- Reducing BCH Infrastructure Cost (YouTube Video) - This is a presentation I gave at the BCH 22 conference. It discusses the ethos and technology that will be applied to this CoinJoin project.
- Live Stream with Bitcoin Jason - Jason interviewed me about the Flipstarter campaign. I took this opportunity to clear up some common misconceptions about this campaign and CoinJoin in general.