What is CoinJoin?

CoinJoin Illustration
CoinJoin is a privacy-enhancing technique used in cryptocurrencies, primarily Bitcoin, to improve anonymity. It accomplishes this by combining multiple transactions into a single transaction, making it more challenging to trace the origin and destination of the funds involved.
Difference between Joinstr and Other CoinJoin Implementations
Joinstr sets itself apart from other CoinJoin implementations through several key features:
  • No Centralized Coordinator: Unlike some CoinJoin implementations that rely on a central coordinator, Joinstr operates in a decentralized manner, enhancing user privacy.
  • Better UI/UX: Joinstr prioritizes user experience, ensuring a smoother and more intuitive interface for participants.
  • Simple Implementation: The implementation of Joinstr is straightforward, making it accessible to a wide range of users.
  • No Fidelity Bonds: Joinstr does not require participants to lock up fidelity bonds, offering more flexibility.
  • Anonymous Founder: The project maintains a commitment to anonymity, aligning with its privacy-centric goals.

How Does It Work?

Joinstr Workflow
Joinstr operates by creating a post-mix transaction with an event ID. Here's a simplified overview of how it works:
  1. Calculate the postmix_val using the formula: (input_sum - fee) / 5.
  2. Generate an event ID for the CoinJoin round.
  3. Participants provide their UTXOs as inputs, specifying the amount and type.
  4. The CoinJoin transaction is created using these inputs and the event ID.
  5. The resulting transaction is broadcast to the blockchain.
Code and Implementation Details
Joinstr is available through various interfaces:
  • __cli: Command-line interface for advanced users.
  • __web: Web interface for a user-friendly experience.
  • __mobile app: A mobile application for on-the-go CoinJoin transactions.
  • __electrum plugin: Integration with the Electrum wallet for added convenience.
The Joinstr codebase and implementation details can be found in its repository: Joinstr on GitLab.
Joinstr in Electrum Joinstr in Electrum
Joinstr also integrates seamlessly with the Electrum wallet, providing a user-friendly way to access CoinJoin functionality. An example transaction using Joinstr in Electrum can be found here.
Demo Joinstr Demo
Watch a Joinstr demonstration in this video:

What's Next?

Joinstr continues to evolve, and the development team has an exciting roadmap ahead. Some items on their to-do list include:
  • Implementing new Tor circuits for each request to enhance privacy.
  • Utilizing NIP 38/48 for encrypted channels.
  • Allowing custom denominations for CoinJoin pools.
  • Restricting the registration of different types of inputs for a round.
  • Implementing NIP 9 to delete events after a round is completed.
Using Multisig and Miniscript Policies in CoinJoin
For more advanced users interested in multisig and Miniscript policies in CoinJoin, Joinstr offers two related projects:
Example transactions for these projects can be found here.
Coinjoin Using ALL|ANYONECANPAY Sighash Flag
Coinjoin Sighash Flag
Explore a proof-of-concept (PoC) for Coinjoin using the ALL|ANYONECANPAY Sighash flag here.
We extend our gratitude to the following individuals and organizations for their support and contributions until now:
Stay updated on Joinstr's progress through Nostr or by using the following address: npub1v6qjdzkwgaydgxjvlnq7vsqxlwf4h0p4j7pt8ktprajd28r82tvs54nzyr.
Joinstr represents an important step in enhancing cryptocurrency privacy, and its commitment to user-friendly design and decentralization makes it a noteworthy addition to the world of CoinJoin implementations.
Project: Joinstr @ BOLT.FUN Tags: #brainstorm #bitcoin-design #nostr #activity #discussion
Original article posted on BOLT🔩FUN
deleted by author
Everyone should be conjoining
Have there been many participants so far?
Is it expensive to use?
20 sats \ 0 replies \ @mo 8 Sep
JoinStr simply manage onchain transactions, there's no fee to use the software, the transaction fees will depend on the mempool... read more 👆👇
Interesting that you consider "no fidelity bonds" to be a feature. Those were added to joinmarket to improve sybil resistance. Does joinstr have an alternative method to reduce the risk/increase the cost of a sybil attack?
10 sats \ 0 replies \ @kpa OP 9 Sep
Yes there are alternatives but not tested yet on mainnet
Depends on the kind of relays users prefer to use for a round.
Example: If users prefer to use paid relays in a round then cost is decided by nostr relay
Also encrypted channels right now are not implemented, which it would help in reducing DoS vectors
NOTE: correction on the above
Joinstr operates by creating a post-mix transaction with an event ID. Here's a simplified overview of how it works:
  • Calculate the postmix_val using the formula: (input_sum - fee) / 5.
  • Generate an event ID for the CoinJoin round.
  • Participants provide their UTXOs as inputs, specifying the amount and type.
  • The CoinJoin transaction is created using these inputs and the event ID.
  • The resulting transaction is broadcast to the blockchain.
This looks incorrect, and can be replaced with:
JoinStr operates by creating a CoinJoin transaction with the coordination of the Nostr protocol, following these steps:
  • Register Output: Participants register their desired output using the Nostr protocol.
  • Create PSBT with User's Input: JoinStr collects all registered outputs and creates a Partially Signed Bitcoin Transaction (PSBT) with the user's input. This PSBT is signed with the Sighash All | AnyoneCanPay flag.
  • Combine PSBTs: JoinStr combines the signed PSBTs from all participants in the CoinJoin round.
  • Broadcast CoinJoin Transaction: Once a sufficient number of signed PSBTs are received (typically from five participants), JoinStr finalizes the CoinJoin transaction by combining the PSBTs. This combined transaction is then broadcast to the Bitcoin blockchain.
The electrum link doesn't go anywhere meaningful.
Oh you are copy and pasting and article. Why not simply link to the article?
0 sats \ 1 reply \ @kpa OP 8 Sep
So you can save one click
Really? You know you can click on links from the stacker news homepage.
true, thanks for letting me know. for the electrum plugin, download 2 files from this link: https://gitlab.com/1440000bytes/joinstr/-/tree/main/plugin?ref_type=heads
Create a directory with name 'joinstr' inside electrum/electrum/plugins and copy the files in it
restart electrum if needed
I'm just starting my btc journey... I've heard about Coinjoin for on chain Utxos in Sparrow and Samourai wallets.. But Joinstr is it supposed to do the same on the main layer or in lightning network? What about the fees?
50 sats \ 0 replies \ @kpa OP 8 Sep
No worries we are here to share and learn. Joinstr is primarily designed for on-chain Bitcoin transactions, similar to CoinJoin implementations in wallets like Sparrow and Samourai. It is not specifically tailored for the Lightning Network, which is a separate layer on top of the Bitcoin blockchain designed for faster and cheaper transactions.
Regarding fees, the fees associated with Joinstr transactions will depend on various factors, including the current network congestion, the number of participants in the CoinJoin, and the wallet or service you use. CoinJoin transactions often involve multiple inputs and outputs, which can make them larger in terms of data size compared to regular Bitcoin transactions. As a result, they may have higher fees than standard transactions.
The privacy benefits of CoinJoin, which Joinstr provides, can be valuable to users concerned about the traceability of their Bitcoin transactions, and while the fees may be slightly higher, the increased privacy and anonymity can outweigh this cost for some users.
Wait. Whaaaaat
The cryptpad links are broken, looks like some essential part of the URL is missing.
prototype available here