# Command line scripts for Joinmarket

(If upgrading to version 0.3.0+, don't forget to read [this](../docs/SEGWIT-UPGRADE.md) on upgrading the wallet.)

All user level scripts here.

(The phrase "normal Joinmarket" in the below refers to the [existing repo](https://github.com/Joinmarket-Org/joinmarket).

The subdirectories `logs` and `wallets` have the same role as in normal Joinmarket.
The subdirectory `cmtdata` contains only your `commitments.json` storage of your used
commitments (ignored by github of course!). The filename is set in joinmarket.cfg.

The `joinmarket.cfg` will be created and maintained in this directory.

Brief explanation of the function of each of the scripts:

### sendpayment.py

Either use the same syntax as for normal Joinmarket:

    `python sendpayment.py -N 3 -m 1 -P wallet.jmdat 50000000 <address>`

or use the new schedule approach. For an example, see the [sample schedule file](https://github.com/AdamISZ/joinmarket-clientserver/blob/master/scripts/sample-schedule-for-testnet).
Do:

    `python sendpayment.py -S sample-schedule-for-testnet wallet.jmdat`

Note that the magic string `INTERNAL` in the file creates a payment to a new address
in the next mixdepth (wrapping around to zero if you reach the maximum mixdepth).

To pay a fraction of the total in a mixdepth you can simply make the amount field
in the schedule a decimal instead of an integer (0.0 < amt < 1.0 of course).

The schedule file can have any name, and is a comma separated value file, the lists
must follow that format; see the comment in the sample file above (each list is length 5 items).

*This part can be ignored for a first run:

Additional fields in config: in the config section `[DAEMON]` you can specify whether
to run the daemon as a separate process or not. By default, the daemon will run in the
same Python process, for maximum convenience, so you needn't separately start `joinmarketd.py` (see below).

You can run the daemon separately by setting `nodaemon=0` in `[DAEMON]`. You can choose to use ssl within this single-process configuration with `use_ssl=true` (again, see below for more on this).*

### tumbler.py

This is an extension of the functionality of `sendpayment.py` in that it auto-generates
a schedule of payments to internal and external addresses, following the same algo
as in normal Joinmarket and described [here](https://github.com/JoinMarket-Org/joinmarket/wiki/Step-by-step-running-the-tumbler).

For detailed information on how to use this, please read [this](https://github.com/AdamISZ/joinmarket-clientserver/tree/master/docs/tumblerguide.md).

### wallet-tool.py

This is the same as in normal Joinmarket.

### joinmarketd.py

This file is to be considered experimental for now. It only
takes two arguments, the port it serves on (default 27183), and whether to use TLS for
client-server communication (default 0=no tls, 1=tls):

    `python joinmarketd.py [port number] [1/0]`

To use tls you must create a `key.pem` and `cert.pem` in a subdirectory `/ssl`, representing
a self-signed certificate. This needs some work to be cleaned up, but does work already.

### add-utxo.py

This works exactly as in normal Joinmarket, with the exception of the location
of the `commitments.json` file, explained above.

### sendtomany.py

As above.

### genwallet.py

Non-interactively generate a wallet, giving only wallet name and password. Returns wallet seed as `recovery_seed:`. Useful for automating JoinMarket deployments.
