What is CoinJoin?

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 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 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
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
Explore a proof-of-concept (PoC) for Coinjoin using the ALL|ANYONECANPAY Sighash flag here.
Acknowledgments
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
Everyone should be conjoining
reply
reply
deleted by author
reply
Have there been many participants so far?
Is it expensive to use?
reply
JoinStr simply manage onchain transactions, there's no fee to use the software, the transaction fees will depend on the mempool... read more 👆👇
reply
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.
reply
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?
reply
Yes there are alternatives but not tested yet on mainnet
reply
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
reply
The cryptpad links are broken, looks like some essential part of the URL is missing.
reply
The electrum link doesn't go anywhere meaningful.
reply
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
reply
Oh you are copy and pasting and article. Why not simply link to the article?
reply
So you can save one click
reply
Really? You know you can click on links from the stacker news homepage.
reply
prototype available here
reply
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?
Thanks
reply
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.
reply
There is only the miner fee (and the Nostr server if it is not free). No extra fees, no extra payments. Just the minimal needed for doing what is done.
It's a decentralised system that provides privacy almost free for everybody. Support the project 💪
Wait. Whaaaaat
reply
What?
reply