Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature Request] Tumbler #57

Open
Tracachang opened this issue Jun 26, 2021 · 6 comments · May be fixed by #84
Open

[Feature Request] Tumbler #57

Tracachang opened this issue Jun 26, 2021 · 6 comments · May be fixed by #84

Comments

@Tracachang
Copy link

Tumbler script being a powerful tool to boost privacy I think it would be great to have it in the joininbox.

Is there any plans to be added?

Thank you

@openoms
Copy link
Owner

openoms commented Jun 26, 2021

The tumbler script is part of the installation so available in the CLI and from the QT GUI too.

Adding to the menu needs some work which I hope to get to at some point.

Until then here is all the info to use the CLI: https://github.com/JoinMarket-Org/joinmarket-clientserver/blob/master/docs/tumblerguide.md

@openoms
Copy link
Owner

openoms commented Apr 10, 2022

Reopening as did not give up on this to be the part of the menu.

Help for the CLI:

$ python tumbler.py -h
Usage: tumbler.py [options] [wallet file] [destaddr(s)...]

Sends bitcoins to many different addresses using coinjoin in an attempt to
break the link between them. Sending to multiple  addresses is highly
recommended for privacy. This tumbler can be configured to ask for more
address mid-run, giving the user a chance to click `Generate New Deposit
Address` on whatever service they are using.

Options:
  -h, --help            show this help message and exit
  -m MIXDEPTHSRC, --mixdepthsource=MIXDEPTHSRC
                        Mixing depth to start tumble process from. default=0.
  --restart             Restarts the schedule currently found in the schedule
                        file in the logs directory, with name TUMBLE.schedule
                        or what is set in the schedulefile option.
  --schedulefile=SCHEDULEFILE
                        Name of schedule file for tumbler, useful for restart,
                        default TUMBLE.schedule
  -a ADDRCOUNT, --addrcount=ADDRCOUNT
                        How many destination addresses in total should be
                        used. If not enough are given as command line
                        arguments, the script will ask for more. This
                        parameter is required to stop amount correlation.
                        default=3
  -N MAKERCOUNTRANGE, --makercountrange=MAKERCOUNTRANGE
                        Input the mean and spread of number of makers to use.
                        e.g. 9 1 will be a normal distribution with mean 9 and
                        standard deviation 1 inclusive, default=9 1 (floats
                        are also OK)
  --minmakercount=MINMAKERCOUNT
                        The minimum maker count in a transaction, random
                        values below this are clamped at this number.
                        default=4
  -M MIXDEPTHCOUNT, --mixdepthcount=MIXDEPTHCOUNT
                        How many mixing depths to mix through
  -c TXCOUNTPARAMS, --txcountparams=TXCOUNTPARAMS
                        The number of transactions to take coins from one
                        mixing depth to the next, it is randomly chosen
                        following a normal distribution. Should be similar to
                        --addrask. This option controls the parameters of the
                        normal distribution curve. (mean, standard deviation).
                        default=2 1
  --mintxcount=MINTXCOUNT
                        The minimum transaction count per mixing level,
                        default=2
  --donateamount=DONATEAMOUNT
                        percent of funds to donate to joinmarket development,
                        or zero to opt out (default=0%)
  -l TIMELAMBDA, --timelambda=TIMELAMBDA
                        Average the number of minutes to wait between
                        transactions. Randomly chosen  following an
                        exponential distribution, which describes the time
                        between uncorrelated events. default=60
  --stage1-timelambda-increase=STAGE1_TIMELAMBDA_INCREASE
                        Stage 1 sweep coinjoins have a longer wait time. This
                        parameter controls by what factor longer is this
                        average wait time compared to stage2 coinjoins which
                        are controlled by `--timelambda`, default=3
  -w WAITTIME, --wait-time=WAITTIME
                        wait time in seconds to allow orders to arrive,
                        default=20
  -s MINCJAMOUNT, --mincjamount=MINCJAMOUNT
                        minimum coinjoin amount in transaction in satoshi,
                        default 100k
  -q LIQUIDITYWAIT, --liquiditywait=LIQUIDITYWAIT
                        amount of seconds to wait after failing to choose
                        suitable orders before trying again, default 60
  --maxbroadcasts=MAXBROADCASTS
                        maximum amount of times to broadcast a transaction
                        before giving up and re-creating it, default 4
  --maxcreatetx=MAXCREATETX
                        maximum amount of times to re-create a transaction
                        before giving up, default 9
  -A AMTMIXDEPTHS, --amtmixdepths=AMTMIXDEPTHS
                        number of mixdepths ever used in wallet, only to be
                        used if mixdepths higher than mixdepthsrc + number of
                        mixdepths to tumble have been used.
  --rounding-chance=ROUNDING_CHANCE
                        probability of non-sweep coinjoin amount being
                        rounded, default=0.25 (25%)
  --rounding-sigfig-weights=ROUNDING_SIGFIG_WEIGHTS
                        If rounding happens (determined by --rounding-chance)
                        then the weights of how many significant figures to
                        round to. The five values refer to the probability of
                        rounding to one, two, three, four and five significant
                        figures respectively. default=(55, 15, 25, 65, 40)
  --datadir=DATADIR     Specify the path to a directory you want to use to
                        store your userdata - wallets, logs and commitment
                        files - and your joinmarket.cfg. By default, the
                        directory .joinmarket is used.
  --recoversync         choose to do detailed wallet sync, used for recovering
                        on new Core instance.
  --wallet-password-stdin
                        Read wallet password from stdin
  --version             Print JoinMarket version and exit.
  -f TXFEE, --txfee=TXFEE
                        Bitcoin miner tx_fee to use for transaction(s). A
                        number higher than 1000 is used as "satoshi per KB" tx
                        fee. A number lower than that uses the dynamic fee
                        estimation of your blockchain provider as confirmation
                        target. This temporarily overrides the "tx_fees"
                        setting in your joinmarket.cfg. Works the same way as
                        described in it. Check it for examples.
  -x MAX_CJ_FEE_ABS, --max-cj-fee-abs=MAX_CJ_FEE_ABS
                        Maximum absolute coinjoin fee in satoshi to pay to a
                        single market maker for a transaction. Both the limits
                        given in --max-cj-fee-abs and --max-cj-fee-rel must be
                        exceeded in order to not consider a certain offer.
  -r MAX_CJ_FEE_REL, --max-cj-fee-rel=MAX_CJ_FEE_REL
                        Maximum relative coinjoin fee, in fractions of the
                        coinjoin value, to pay to a single market maker for a
                        transaction. Both the limits given in --max-cj-fee-abs
                        and --max-cj-fee-rel must be exceeded in order to not
                        consider a certain offer. Example: 0.001 for a maximum
                        fee of 0.1% of the cj amount
  --order-choose-algorithm=ORDER_CHOOSE_FN
                        Set the algorithm to use for selecting orders from the
                        order book. Default:
                        fidelity_bond_weighted_order_choose Available options:
                        random_under_max_order_choose, cheapest_order_choose,
                        weighted_order_choose,
                        fidelity_bond_weighted_order_choose
  -C                    alias for --order-choose-
                        algorithm=cheapest_order_choose
  -F                    alias for --order-choose-
                        algorithm=fidelity_bond_weighted_order_choose
  -R                    alias for --order-choose-
                        algorithm=random_under_max_order_choose
  -W                    alias for --order-choose-
                        algorithm=weighted_order_choose

@openoms openoms reopened this Apr 10, 2022
@openoms
Copy link
Owner

openoms commented Apr 10, 2022

Example TUMBLE.schedule displayed with:

# [mixdepth, amount-fraction, N-counterparties (requested), destination address, wait time in minutes, rounding, flag indicating incomplete/broadcast/completed (0/txid/1)]
dialog \
 --title "Tumbler schedule"  \
 --prgbox "(echo 'mixdepth,amount-fraction,N-counterparties,destination address,wait time in minutes,rounding,flag (0/txid/1)' ;cat /home/joinmarket/.joinmarket/logs/TUMBLE.schedule) | column -t -s, 2>/dev/null" 20 110

Started with:

python tumbler.py -m 2 -N 2 1 --minmakercount 1 signetfb
  • Note that starting at mixdepth 2, but stil all mixdepths are involved.
  • There are funds in every mixdepths of this wallet and starting with sweeping m3 to the next.

image

See more at https://github.com/JoinMarket-Org/joinmarket-clientserver/blob/master/docs/tumblerguide.md

@openoms openoms linked a pull request Apr 10, 2022 that will close this issue
@openoms
Copy link
Owner

openoms commented Apr 11, 2022

Notes:

Settings

-m MIXDEPTHSRC, --mixdepthsource=MIXDEPTHSRC  Mixing depth to start tumble process from. default=0

Ran the Tumbler with -m2
I had funds in all mixdepths
Left with a cj-out in m1 and m2.

So what I could gather it sent funds from the mixdepth starting with MIXDEPTHSRC ( here m2), but coinjoined the lower mixdepths regardless.

This option is best to be ignored unless funds to be left in the lower mixdepths (but will still move from m0)

Interruptions

  • addrask - will ask about destination addresses if there is no min 3 given in the initial command and recorded in the TUMBLE.schedule (addrask if not set)

  • --restart

    Enter passphrase to decrypt wallet: 
    
    For restarts, destinations are taken from schedule file, so passed destinations on the command line were ignored.
    OK? (y/n)
    

@RampantDespair
Copy link

@openoms Hey, is this feature still in the pipeline or was it abandoned?

@openoms
Copy link
Owner

openoms commented Sep 13, 2024

@RampantDespair not working on this currently as it can be run from the command line (as noted above #57 (comment)) and the Jam webUI also exposes the Tumbler function called Sweep: https://jamdocs.org/interface/04-sweep/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants