{"id":24572668,"url":"https://github.com/antichainalysis/xmr-churner","last_synced_at":"2025-03-17T09:44:21.506Z","repository":{"id":273831373,"uuid":"920983860","full_name":"antichainalysis/xmr-churner","owner":"antichainalysis","description":"moneroc - The proper way to churn Monero","archived":false,"fork":false,"pushed_at":"2025-02-13T03:29:42.000Z","size":219,"stargazers_count":7,"open_issues_count":2,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-13T04:26:26.062Z","etag":null,"topics":["churn","churning","churnxmr","monero","monero-wallet","monero-wallet-rpc","moneroc","monerod","xmr","xmr-churner","xmr-tool","xmrchurner"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/antichainalysis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2025-01-23T05:51:10.000Z","updated_at":"2025-02-13T03:29:45.000Z","dependencies_parsed_at":null,"dependency_job_id":"12500c22-33ad-44e7-aaaf-1d9d5acde803","html_url":"https://github.com/antichainalysis/xmr-churner","commit_stats":null,"previous_names":["antichainalysis/xmr-churner"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antichainalysis%2Fxmr-churner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antichainalysis%2Fxmr-churner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antichainalysis%2Fxmr-churner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antichainalysis%2Fxmr-churner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/antichainalysis","download_url":"https://codeload.github.com/antichainalysis/xmr-churner/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244013063,"owners_count":20383703,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["churn","churning","churnxmr","monero","monero-wallet","monero-wallet-rpc","moneroc","monerod","xmr","xmr-churner","xmr-tool","xmrchurner"],"created_at":"2025-01-23T19:26:28.740Z","updated_at":"2025-03-17T09:44:21.494Z","avatar_url":"https://github.com/antichainalysis.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  moneroc - XMR Churner\n  \u003cbr\u003e\n\u003c/h1\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ch3\u003e\u003ca href=\"https://github.com/antichainalysis/xmr-churner/blob/main/writeup.md\"\u003eThe proper way to churn Monero\u003c/a\u003e\u003c/h3\u003e\n\u003c/div\u003e\n\n# Description\n`moneroc` is a tool designed for automating the process of distributing funds between multiple Monero accounts and **churning** them (i.e., transferring funds between accounts multiple times) in the same wallet using monero-wallet-rpc. It interacts with the Monero RPC server to create new accounts, distribute funds, churn, and shuffle balances. The goal is to enhance the **privacy and transaction obfuscation**, making it more difficult to trace the origin and flow of funds. `moneroc` accomplishes this by leveraging **Monero's ring signature privacy** and simulating the **natural fund movements** with randomized delays between transactions.\n\n`moneroc` is designed for:\n* **Obfuscating the source of funds** by introducing multiple decoy addresses that get mixed into future transactions, utilizing **ring signatures** to obscure transaction origins.\n* **Simulating real-world transaction patterns** by adding unpredictable delays and repeating churn operations over several hours, preventing any identifying patterns in fund transfers.\n\n**NOTE: `moneroc` is not offering or guaranting full complete untraceability of your Monero, simply put it is just a tool designed to help Monero users who participate in churning [to do it properly](https://github.com/antichainalysis/xmr-churner/blob/main/writeup.md) (read up carefully before you use). Monero is a tool just like `moneroc` and tools are meant to be used correctly. There is no silver bullet for privacy, people can slip up and make mistakes—just be smart, cautious, and aware/vigilant.**\n\nI have tried and will continue to try to make this tool as user-friendly as possible so even the most non-technical/average person is able to use it easily and successfully.\n\n# Features\n* **Dynamic Range Calculation**: `moneroc` automatically calculates the range of atomic units (AMU) to distribute based on the total balance of the account (main account 0).\n* **Account Creation \u0026 Transfer**: `moneroc` automatically creates new monero accounts and distributes a random amount of XMR within a specific range between them.\n* **Churn Automation**: Configurable churn range to randomly perform churns between accounts for a set number of times to enhance privacy.\n* **Monitors Account Balance**: `moneroc` ensures that sufficient unlocked funds are available before proceeding with any transactions.\n* **Delays**: Random (30-60 minutes delay range) delays between each operation because after each churn, 8-10+ hours pass, and decoy addresses start to appear, making it difficult for anyone monitoring the process to detect patterns, trace, or link activities.\n\n# Requirements\n* Your OWN ([local - will explain why later on why local node is needed](https://github.com/antichainalysis/xmr-churner/blob/main/writeup.md#introduction-to-moneroc)) Monero node.\n* monero-wallet-rpc completely setup with the JSON-RPC interface enabled (default is `http://127.0.0.1:18082/json_rpc`)\n* bun - https://bun.sh/ for running the tool.\n\n# Installation\nAll `moneroc` requires to install is bun.sh, execute the following:\n  ```\n   git clone https://github.com/antichainalysis/xmr-churner.git\n   cd xmr-churner\n   curl -fsSL https://bun.sh/install | bash\n   bun install\n   ```\n\n# Usage\nPLEASE READ [THIS](https://github.com/antichainalysis/xmr-churner/blob/main/INSTRUCTIONS.md) BEFORE YOU INSTALL AND RUN `moneroc`.\n\nTo run `moneroc`, execute the following command:\n```\nbun run main.ts --rpc-url \u003cRPC_URL\u003e --churnRange \u003cmin,max\u003e\n```\n* `--rpc-url` or `-rpc`: The RPC URL of your Monero node (defaults to `http://127.0.0.1:18082/json_rpc`).\n* `--churnRange` or `-cr`: A comma-separated range (e.g., 3,7) that specifies how many times to perform the churn operation. The tool will randomly select a number within this range (defaults to `3,7`).\n\nExample:\n```\nbun run main.ts --rpc-url http://127.0.0.1:18082/json_rpc --churnRange 3,7\n```\n\n# [How It Works](https://github.com/antichainalysis/xmr-churner/blob/main/xmr_churner.png)\n\nRead [this](https://github.com/antichainalysis/xmr-churner/blob/main/example_flow_of_funds_process.md) for a tldr/faster, better, simpler, and clearer understanding of `moneroc`.\n\n[log](https://github.com/antichainalysis/xmr-churner/blob/main/moneroc.out)\n\n**1. Check Account Balance**\n  * `moneroc` first checks the balance and unlocked balance of the wallet.\n  * If the balance is below the upper limit of `maxRange`, `moneroc` breaks the loop and stops distributing funds.\n  * If the unlocked balance is insufficient, it waits for the funds to become available by polling the balance every 5 seconds\n    \n**2. Create new Account**\n  * Once sufficient funds are avaiable, `moneroc` creates a new Monero account and retrieves the account's address and index\n\n**3. Fund Distribution**\n  * A random amount of XMR (within the `amuRange` range) is selected and transferred to the newly created account using the Monero `transfer` method via a RPC call.\n\n**4. Wait for Unlocked Funds**\n  * If the unlocked balance is not enough, `moneroc` waits until the funds are unlocked.\n\n**5. Random Delays Between Operations**\n  * After each transfer, `moneroc` introduces a random delay between 30 and 60 minutes to mimic more natual, human-like behaviour. This prevents `moneroc` from acting in a predictable manner and makes it harder for any observer to track/trace the flow of funds.\n\n**6. Churning Process**\n  * After all funds have been distributed across the accounts created in the same wallet, `moneroc` starts the churning process:\n      * It retrieves a list of all accounts and their balances.\n      * Accounts with non-zero balances are selected for churning.\n      * `moneroc` transfers funds from each account to a newly created account, iterating over each account as specific by the `churnRange`\n\n**7. Churning Iterations**\n  * `moneroc` performs the churn operation for each selected account a random number of times (`iters`), defined within the `churnRange`. Each churn operation involves transferring all available funds from an account to a new one.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fantichainalysis%2Fxmr-churner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fantichainalysis%2Fxmr-churner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fantichainalysis%2Fxmr-churner/lists"}