{"id":50522427,"url":"https://github.com/joinmarket-ng/coinjoin-simulator","last_synced_at":"2026-06-03T05:30:34.033Z","repository":{"id":360498450,"uuid":"1208412187","full_name":"joinmarket-ng/coinjoin-simulator","owner":"joinmarket-ng","description":"Compact simulation toolkit for analyzing CoinJoin privacy under probing and adversarial taker pressure.","archived":false,"fork":false,"pushed_at":"2026-05-26T16:22:23.000Z","size":10101,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-26T18:17:23.101Z","etag":null,"topics":["bitcoin","coinjoin","joinmarket","privacy","sybil"],"latest_commit_sha":null,"homepage":"https://joinmarket-ng.github.io/coinjoin-simulator/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/joinmarket-ng.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-12T08:39:08.000Z","updated_at":"2026-05-26T16:22:55.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/joinmarket-ng/coinjoin-simulator","commit_stats":null,"previous_names":["joinmarket-ng/coinjoin-simulator"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/joinmarket-ng/coinjoin-simulator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joinmarket-ng%2Fcoinjoin-simulator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joinmarket-ng%2Fcoinjoin-simulator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joinmarket-ng%2Fcoinjoin-simulator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joinmarket-ng%2Fcoinjoin-simulator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joinmarket-ng","download_url":"https://codeload.github.com/joinmarket-ng/coinjoin-simulator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joinmarket-ng%2Fcoinjoin-simulator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33850625,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bitcoin","coinjoin","joinmarket","privacy","sybil"],"created_at":"2026-06-03T05:30:32.050Z","updated_at":"2026-06-03T05:30:34.028Z","avatar_url":"https://github.com/joinmarket-ng.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CoinJoin Simulator\n\nA simulation engine for evaluating privacy attacks and anonymity metrics in CoinJoin protocols,\nwith a focus on JoinMarket-style maker/taker architectures.\n\n## What it does\n\nThe simulator models realistic JoinMarket networks, including maker wallet structures, fidelity\nbonds, and mixdepths sampled from live orderbook data. It lets you run controlled experiments\nagainst different attack models (probing, Sybil, role identification, surveillance) and measure\ntheir impact on taker anonymity sets.\n\n## Published studies\n\nResults from two studies run with this simulator are available on the\n[project site](https://joinmarket-ng.github.io/coinjoin-simulator/):\n\n- **Probing attack and countermeasures** - how a malicious participant builds a UTXO database\n  of makers by probing, and which protocol changes limit the leakage\n- **JoinMarket equal-output anonymity in practice** - a fee-fingerprint clustering and\n  forward-spend attribution attack replayed against a mainnet JoinMarket corpus\n\n## Getting started\n\nRequires Python 3.11+.\n\n```bash\npip install -e \".[dev]\"\n```\n\nRun the test suite:\n\n```bash\npytest tests/\n```\n\nRebuild the published site from the pinned study datasets:\n\n```bash\npython -m coinjoin_simulator.publish_site\npython build_docs.py\n```\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoinmarket-ng%2Fcoinjoin-simulator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoinmarket-ng%2Fcoinjoin-simulator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoinmarket-ng%2Fcoinjoin-simulator/lists"}