MMGen Wallet’s regtest mode, also known as Bob and Alice mode, uses the Bitcoin
daemon’s regression test feature to create a virtual network of two users who
transact on a private blockchain.

All of MMGen Wallet’s functionality is available in regtest mode, making it an
ideal way to learn to use MMGen Wallet without risking real coins.

To send a transaction or perform any other operation as Bob or Alice, just add
the `--bob` or `--alice` option to the applicable MMGen Wallet command.

This tutorial provides a quick, hands-on introduction.

1. Initialize regtest mode and start the regtest daemon:

```text
$ mmgen-regtest setup
$ mmgen-regtest start
```

2. Generate Bob’s wallet:

```text
$ mmgen-walletgen --bob
...
Make this wallet your default and move it to the data directory? (Y/n): y
```

3. Generate three type `C` (compressed) addresses with Bob’s wallet:

```text
$ mmgen-addrgen --bob --type=compressed 1-3
...
Addresses written to file '1163DDF1-C[1-3].addrs'
# 1163DDF1 is Bob’s Seed ID; since it’s generated randomly, yours will be different
```

4. Import the addresses into Bob’s tracking wallet:

```text
$ mmgen-addrimport --bob 1163DDF1-C[1-3].addrs
...
Type uppercase 'YES' to confirm: YES
```

	Since your Bob has a different Seed ID, your address filename will of course
	be different than this one.

5. List the addresses in Bob’s tracking wallet.  You’ll see the addresses you
just imported:

```text
$ mmgen-tool --bob listaddresses showempty=1
MMGenID        ADDRESS                             COMMENT BALANCE
1163DDF1:C:1   mw42oJ94yRA6ZUNSzmMpjZDR74JNyvqzzZ     -      0
1163DDF1:C:2   n1oszhfAyRrHi7qJupyzaWXTcpMQGsGJEf     -      0
1163DDF1:C:3   mhYYHM7renPpNi8SUj5yeEZ54eAUJ5HyQ1     -      0
```

	Note that regtest mode uses testnet-format addresses, which differ from the
	familiar mainnet addresses beginning with ’1’.

6. Fund one of the addresses (let’s choose the first one) with some BTC:

```text
$ mmgen-regtest send mw42oJ94yRA6ZUNSzmMpjZDR74JNyvqzzZ 500
```

	Don’t forget to substitute your `C:1` address for the one above!

7. Make sure the funds reached their destination:

```text
$ mmgen-tool --bob listaddresses showempty=1
MMGenID        ADDRESS                             COMMENT BALANCE
1163DDF1:C:1   mw42oJ94yRA6ZUNSzmMpjZDR74JNyvqzzZ     -    500
1163DDF1:C:2   n1oszhfAyRrHi7qJupyzaWXTcpMQGsGJEf     -      0
1163DDF1:C:3   mhYYHM7renPpNi8SUj5yeEZ54eAUJ5HyQ1     -      0
TOTAL: 500 BTC
```

8. You can view Bob’s total balance this way too:

```text
$ mmgen-tool --bob getbalance
```

9. Generate Alice’s wallet:

```text
$ mmgen-walletgen --alice
...
Make this wallet your default and move it to the data directory? (Y/n): y
```

10. Generate three type `S` (segwit) addresses with Alice’s wallet:

```text
$ mmgen-addrgen --alice --type=segwit 1-3
...
Addresses written to file '9304C211-S[1-3].addrs'
```

11. Repeat steps 4-7 for Alice by substituting `--bob` for `--alice`.  Don’t
forget to change the address filename and send address to suit.  The result of
step 7 will look something like this:

```text
MMGenID        ADDRESS                             COMMENT BALANCE
9304C211:S:1   2N3HhxasbRvrJyHg72JNVCCPi9EUGrEbFnu    -    500
9304C211:S:2   2N8w8qTupvd9L9wLFbrn6UhdfF1gadDAmFD    -      0
9304C211:S:3   2NF4y3y4CEjQCcssjX2BDLHT88XHn8z53JS    -      0
TOTAL: 500 BTC
```

12. Split Alice’s funds, sending 200 BTC to address `S:2` and the change to
`S:3`.  Specify a fee of 20 satoshis/byte and make the output quieter:

```text
$ mmgen-txdo --alice --tx-fee=20s --quiet 9304C211:S:2,300 9304C211:S:3
...
Type uppercase 'YES' to confirm: YES
Transaction sent: 78ca853816b55527b42ca8784c887a5f482c752522f914d2f17d6afcd8a3b076
```

	Don’t forget to use your Alice’s Seed ID here, instead of `9304C211`.

	Note that for simplicity’s sake this tutorial uses the `mmgen-txdo` command
	to create, sign and send transactions in one operation.  In normal, cold
	wallet mode, you’d create the transaction with `mmgen-txcreate`, sign it
	offline with `mmgen-txsign` and send it with `mmgen-txsend`.  Use of these
	commands is explained in detail in the [**Getting Started**][G] guide.

13. View the transaction in the mempool:

```text
$ mmgen-regtest mempool
['78ca853816b55527b42ca8784c887a5f482c752522f914d2f17d6afcd8a3b076']
```

14. Mine a block:

```text
$ mmgen-regtest generate
```

15. Check the mempool again:

```text
$ mmgen-regtest mempool
[]
```

16. List Alice’s addresses.  Note that Alice has lost a bit to transaction fees:

```text
$ mmgen-tool --alice listaddresses showempty=1
MMGenID        ADDRESS                             COMMENT BALANCE
9304C211:S:1   2N3HhxasbRvrJyHg72JNVCCPi9EUGrEbFnu    -      0
9304C211:S:2   2N8w8qTupvd9L9wLFbrn6UhdfF1gadDAmFD    -    300
9304C211:S:3   2NF4y3y4CEjQCcssjX2BDLHT88XHn8z53JS    -    199.999967
TOTAL: 499.999967 BTC
```

17. Have Alice send 10 BTC to Bob’s `C:2` address and the change back to her
`S:1` address.  This time Alice specifies an absolute fee in BTC.

```text
$ mmgen-txdo --alice --tx-fee=0.0001 --quiet 9304C211:S:1 n1oszhfAyRrHi7qJupyzaWXTcpMQGsGJEf,10
...
Enter a range or space-separated list of outputs to spend: 1
...
```

	Note that Alice is reusing address `S:1` here, and address reuse is
	generally a bad idea.  You’d be better off generating and importing some
	new addresses for Alice by repeating steps 3 and 4 with a different address
	range.  I’ll leave that to you as an exercise.

18. Mine a block:

```text
$ mmgen-regtest generate
```

19. List Alice’s addresses, omitting the empty ones:

```text
$ mmgen-tool --alice listaddresses
MMGenID        ADDRESS                             COMMENT BALANCE
9304C211:S:1   2N3HhxasbRvrJyHg72JNVCCPi9EUGrEbFnu    -    189.999867
9304C211:S:2   2N8w8qTupvd9L9wLFbrn6UhdfF1gadDAmFD    -    300
TOTAL: 489.999867 BTC
```

19. List Bob’s addresses:

```text
$ mmgen-tool --bob listaddresses
MMGenID        ADDRESS                             COMMENT BALANCE
1163DDF1:C:1   mw42oJ94yRA6ZUNSzmMpjZDR74JNyvqzzZ     -    500
1163DDF1:C:2   n1oszhfAyRrHi7qJupyzaWXTcpMQGsGJEf     -     10
TOTAL: 510 BTC
```

20. Add a label to Bob’s tracking wallet:

```text
$ mmgen-tool --bob add_label 1163DDF1:C:2 'From Alice'
```

21. List Bob’s addresses:

```text
$ mmgen-tool --bob listaddresses
MMGenID        ADDRESS                             COMMENT    BALANCE
1163DDF1:C:1   mw42oJ94yRA6ZUNSzmMpjZDR74JNyvqzzZ      -      500
1163DDF1:C:2   n1oszhfAyRrHi7qJupyzaWXTcpMQGsGJEf  From Alice  10
TOTAL: 510 BTC
```

22. When you’re finished, stop the regtest daemon:

```text
$ mmgen-regtest stop
```

[G]: Getting-Started-with-MMGen-Wallet#a_ct