Giter Club home page Giter Club logo

mychurnero's Introduction

mychurnero

entirely unaudited, untested, user beware

Mychurnero is a monero churning service that allows you to automatically, and randomly churn your monero. It coordinates churning by storing information in a local sqlite3 database, as opposed to using wallet tags which are persisted within the monero wallet. This allows you to securely churn from a remote location, without disclosing possibly identifying tags to the monero-wallet-rpc node. This is experimental software, and the benefits of churning are not conclusive. As such please make sure you read the warnings section down below.

terminology

  • churn from
    • this means the subaddresses we are sending funds from
  • churn to
    • this means the subaddress we are depositing churned funds into
  • churn account index
    • this is the account index we use for generating all addresses to deposit churned funds into

warnings

  • loss of funds may occur from using this as it is experimental software
  • mychurnero may not provide any benefits at all
  • guard access to the sqlite3 database on disk with care, as this can be used to identify churned transactions
    • once done with churning, securely delete the sqlite3 database
    • information is only persisted in the sqlite3 database as long as is needed and the moment a churn transaction is confirmed this information is removed from the database, but do not solely rely on this
  • do not use a single mychurnero instance for multiple different wallets
    • there are thread-safety concerns when handling multiple different wallets at the same time
    • the database connection leverages a shared cache which if using multiple different wallets could potentially be a source of information leakage although this isn't serious
  • transaction fees are randomly determined and could be costly
    • transaction fee analysis could be used for fingerprinting
  • this may or may not relay transactions through anonymized networks such as Tor or I2P however that will entirely depend on the monerod node your monero-wallet-rpc client talks to

usage

For details usage instructions see USAGE.md

why does this need a database

In order to process, schedule, and delay churning transactions there needs to be some way of identifying addresses, as well as persisting information about transactions to be churned in case of power loss, and similar situations. One option to identify addresses for churning was to leverage monero wallet tags, however this means if anyone gets access to the wallet, or you are using a remote monero-wallet-rpc node, they would be able to use this information against you. It would also mean that you always need to use the same monero-wallet-rpc node each time you want to churn.

To alleviate these privacy concerns, and to allow you to freely use any remote monero-wallet-rpc node, we needed to use a database. Sqlite3 was picked as this allows us easily churn from any location, using any monero-wallet-rpc without disclosing tags to a monero-wallet-rpc node. It also makes it extremely easy to delete the churning information once done, as a simple shred on the database file and you are done!

churnable address selection

The process of selecting an address we can churn from is pretty easy, and simply consists of ensuring that the subaddress does not belong to the account index we use for generating churn to addresses, and that the minimum unlocked balance is equal or greater than the minimum. If a subaddress satisfies this requirement it is then eligible for being churned from.

where are the funds deposited

When configuring mychurnero you specify an account index called "churn account index", and each time a churn transaction is created, a subaddress under this account will be generated for each churn transaction and never be reused. It is up to you to determine how to sweep and aggregate funds under this account index.

churning process

Every user configured periodic interval we will scan all account indexes except the churn account index for subaddresses with an unlocked balance greater than our specified minimum. If an address passes this check, and it has no other currently scheduled transactions we then generate a transaction but do not relay it. A random delay is picked, and this information along with the transaction metadata is stored in a sqlite3 database. At the end of transaction creation we then check to see if any of the previously created transactions have had their delays past. Any transactions which have past this delay are then relayed and the sqlite entry for this transactions is marked as having been relayed.

After all eligible transactions have been relayed, we then check previously relayed transactions to determine if they are confirmed. To determine whether or not a transaction is confirmed, we use the SuggestedConfirmationsThreshold information returned by the monero-wallet-rpc node being used. If a transaction has at least this many confirmation it is considered confirmed, and all information relayed to this transaction and its associated churn from address are removed from the sqlite3 database.

links

mychurnero's People

Contributors

bonedaddy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

james4ever0

mychurnero's Issues

v0.0.1

  • Proper churnable address selection (todo)
    • when retrieving address get balance, this requires altering AddressBalance function to accept account and sub account index
    • Ignore addresses with balance below a certain amount
  • Proper scheduling of transactions
  • Prevent rescheduling of existing transactions
  • Better churn account handling (todo)
    • right now during service initialization we check existing accounts to see if one exists whose index matches the desired churn account index
    • lets say we have churn account index of 99 and only have 2 active accounts, this check will obviously fail and we will create an account to churn to, however it wont match the index we want

Desired Features

  • Non-uniform random distribution for churn as decoy members are chosen from non-uniform distribution using a gamma distribution

Enable Tx Fee Fingeprinting And Delay Analysis

One method of resisting timing delay analysis through tx fee amount is indicated here and would be rounding the fee amount to a few digits however this fingerprints the implementation.

A possibility to avoid this would be randomly determining the number of digits, and round amount and set this via the configuration file. This in theory should mitigate fingerprinting the mychurnero implementation as a whole, however it would fingerprint an individual instance of a running mychurnero service.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.