{"type":"rich","version":"1.0","title":"m0wer wrote","author_name":"m0wer (npub1w3…t4c5c)","author_url":"https://nostr.now/npub1w3vaxva0vcrx7pnvlpmede5smvafdl69xnu7ma82kaxl9us89zdsht4c5c","provider_name":"njump","provider_url":"https://nostr.now","html":"Analyze JoinMarket Bitcoin CoinJoin transactions using ILP.\nhttps://github.com/m0wer/joinmarket_analyzer\n\n# JoinMarket Analyzer: Understanding CoinJoin Change Outputs\n\nI've released a tool called **joinmarket-analyzer** to match inputs and change outputs in JoinMarket transactions, identifying who the taker was.\n\n**Goal:** The purpose is **not to spread FUD**, but to raise awareness. It's crucial to understand that this analysis **only affects change outputs**. The equal-amount outputs—which provide the actual privacy in a CoinJoin—remain indistinguishable.\n\nThe tool uses Integer Linear Programming (ILP) to match inputs with their respective changes and determine which participant is the likely \"Taker\" (the one initiating the transaction and paying fees) and which are the \"Makers\" (liquidity providers earning fees).\n\n## Example Usage\n\nYou can run it easily with Docker:\n\n```bash\ndocker run --rm ghcr.io/m0wer/joinmarket_analyzer:master \\\n  0cb4870cf2dfa3877851088c673d163ae3c20ebcd6505c0be964d8fbcc856bbf \\\n  --max-fee-rel 0.001 --max-solutions 1\n```\n\n## Results\n\nThe tool outputs the probable structure of the transaction:\n\n```\n...\nTaker: Participant 4 (pays 21,368 sats)\n  💰 Participant 1 (maker)\n    Inputs: [0]\n    Outputs: Equal=6.3M sats, Change=113M sats\n    Fee receives: 458 sats\n  ...\n  🎯 Participant 4 (taker)\n    Inputs: [4]\n    Outputs: Equal=6.3M sats, No change output\n    Fee pays: 21,368 sats\n...\n```\n\n[View this transaction on mempool.space](https://mempool.space/tx/0cb4870cf2dfa3877851088c673d163ae3c20ebcd6505c0be964d8fbcc856bbf)\n\n## Future Possibilities\n\nThis tool lays the groundwork for more advanced privacy research:\n*   **Entropy Evaluation:** Measure how \"ambiguous\" change outputs are. If multiple valid solutions exist, the Taker is harder to pinpoint.\n*   **Algorithm Design:** Evaluate and improve taker algorithms to intentionally create ambiguous change structures.\n*   **Market Stats:** Analyze historical CoinJoins to gather statistics on fee limits used by takers and earnings by makers.\n\nCheck out the code and contribute: https://github.com/m0wer/joinmarket-analyzer\n\nhttps://stacker.news/items/1296366"}
