Browse Source

Version 0.9.3

New features:

- Bob and Alice regtest mode for testing MMGen in a mock two-user environment.
  Documented in the wiki, tests added to test suite

- Compressed P2PKH address support (address type 'C')

- BCH (Bitcoin Cash) support

- Segwit (address type 'S') support deployed after Segwit activation on mainnet

- and, of course, numerous bugfixes and small improvements
philemon 7 years ago
parent
commit
da0636c636

+ 14 - 10
README.md

@@ -11,16 +11,17 @@ easier way to install MMGen, check out the prebuilt bootable USB images on the
 MMGen is a Bitcoin cold-storage system implemented as a suite of Python
 command-line scripts requiring only a bare minimum of system resources.  The
 scripts work in tandem with a reference Bitcoin Core daemon (bitcoind) running
-on both an online and an offline computer to provide a robust solution for
-securely storing, tracking, sending and receiving Bitcoins.  To track address
-balances without exposing keys on the online computer, MMGen relies on Bitcoin
-Core’s watch-only address support.  Ordinary Bitcoin addresses can be tracked
-and spent too, creating an easy migration path from other wallets.
-
-MMGen is designed for reliability by having the reference Bitcoin Core daemon,
-rather than less-tested third-party software, do all the “heavy lifting” of
-tracking and signing transactions.  It’s also designed for privacy: unlike some
-other online/offline wallet solutions, MMGen plus Bitcoin Core is a completely
+on both an online and an offline air-gapped computer to provide a robust
+solution for securely storing, tracking, sending and receiving Bitcoins.  To
+track address balances without exposing keys on the online computer, MMGen
+relies on Bitcoin Core’s watch-only address support.  Ordinary Bitcoin addresses
+can be tracked and spent too, creating an easy migration path from other
+wallets.
+
+MMGen is designed for reliability by having the Bitcoin daemon itself, rather
+than less-tested third-party software, do all the “heavy lifting” of tracking
+and signing transactions.  It’s also designed for privacy: unlike some other
+online/offline wallet solutions, MMGen plus Bitcoin Core is a completely
 self-contained system that makes **no connections to the Internet** except for
 the Bitcoin network itself: no third parties are involved, and thus no
 information about which addresses you’re tracking is leaked to the outside
@@ -104,6 +105,8 @@ future use in an address file, which addresses may safely be made public.
 
 > #### [MMGen command help][6]
 
+> #### [Recovering your keys without the MMGen software][r]
+
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
 [**Forum**][4] |
@@ -122,3 +125,4 @@ Donate: 15TLdmi5NYLdqmtCqczUs5pBPkJDXRs83w
 [7]: http://bitcoinmagazine.com/8396/deterministic-wallets-advantages-flaw/
 [8]: https://github.com/mmgen/MMGenLive
 [9]: https://cloud.githubusercontent.com/assets/6071028/20677261/6ccab1bc-b58a-11e6-8ab6-094f88befef2.jpg
+[r]: https://github.com/mmgen/mmgen/wiki/Recovering-Your-Keys-Without-the-MMGen-Software

+ 108 - 102
doc/wiki/using-mmgen/Getting-Started-with-MMGen.md

@@ -86,17 +86,16 @@ generation, wallet format conversion, address and key generation, and address
 import operations on an offline computer with no blockchain and no bitcoin
 balance.
 
-If you want to practice creating, signing and sending transactions, however, as
-well as tracking balances, you'll need a fully synced blockchain and some actual
-coins to play with.  To avoid risking real funds, it's *highly recommended* to
-practice transaction operations using **Bob and Alice regtest mode** until you
-feel confident you know what you're doing.
-
-A convenient frontend for bitcoind's regression test mode, MMGen's Bob and Alice
-mode creates a private blockchain and a virtual network of two users who can
-send bitcoins to each other.  All of MMGen's functionality is available in this
-mode, making it an ideal, risk-free way to acquaint yourself with the wallet's
-features.  Refer to [MMGen Quick Start with Regtest Mode][06] to get started.
+If you want to practice creating, signing and sending transactions with real
+bitcoins, however, you'll need a fully synced blockchain and some actual coins
+to play with.
+
+Fortunately, there's an alternative: MMGen's **regtest mode** feature creates a
+virtual network of two users, Bob and Alice, who transact with each other on a
+private blockchain.  All of MMGen's functionality is available in regtest mode,
+making it an ideal way to learn to use the MMGen wallet without risking real
+coins.  You may wish to pause here and perform the steps in the tutorial [MMGen
+Quick Start with Regtest Mode][06] before continuing on.
 
 ### <a name='a_bo'>Basic Operations</a>
 
@@ -143,54 +142,63 @@ printed out on paper.
 
 Another highly recommended way to back up your wallet is to generate a mnemonic
 or seed file <a href='#a_ms'>as described below </a> and memorize it.  If you
-have an average or better memory, you'll find memorizing mnemonics to be
+have an average or better memory, you'll find memorizing your mnemonic to be
 surprisingly easy.
 
 #### <a name='a_ga'>Generate addresses (offline computer)</a>
 
-Now generate ten addresses with your just-created wallet:
+Now generate ten Segwit addresses with your just-created wallet:
 
-		$ mmgen-addrgen 1-10
+		$ mmgen-addrgen --type=segwit 1-10
 		...
-		Addresses written to file '89ABCDEF[1-10].addrs'
+		Addresses written to file '89ABCDEF-S[1-10].addrs'
 
-		$ cat '89ABCDEF[1-10].addrs'
-		89ABCDEF {
-		  1    16bNmyYISiptuvJG3X7MPwiiS4HYvD7ksE
-		  2    1AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc
-		  3    1HgYCsfqYzIg7LVVfDTp7gYJocJEiDAy6N
-		  4    14Tu3z1tiexXDonNsFIkvzqutE5E3pTK8s
-		  5    1PeI55vtp2bX2uKDkAAR2c6ekHNYe4Hcq7
-		  6    1FEqfEsSILwXPfMvVvVuUovzTaaST62Mnf
-		  7    1LTTzuhMqPLwQ4IGCwwugny6ZMtUQJSJ1
-		  8    1F9495H8EJLb54wirgZkVgI47SP7M2RQWv
-		  9    1JbrCyt7BdxRE9GX1N7GiEct8UnIjPmpYd
-		  10   1H7vVTk4ejUbQXw45I6g5qvPBSe9bsjDqh
+		$ cat '89ABCDEF-S[1-10].addrs'
+		89ABCDEF SEGWIT {
+		  1    36bNmyYISiptuvJG3X7MPwiiS4HYvD7ksE
+		  2    3AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc
+		  3    3HgYCsfqYzIg7LVVfDTp7gYJocJEiDAy6N
+		  4    34Tu3z1tiexXDonNsFIkvzqutE5E3pTK8s
+		  5    3PeI55vtp2bX2uKDkAAR2c6ekHNYe4Hcq7
+		  6    3FEqfEsSILwXPfMvVvVuUovzTaaST62Mnf
+		  7    3LTTzuhMqPLwQ4IGCwwugny6ZMtUQJSJ1
+		  8    3F9495H8EJLb54wirgZkVgI47SP7M2RQWv
+		  9    3JbrCyt7BdxRE9GX1N7GiEct8UnIjPmpYd
+		  10   3H7vVTk4ejUbQXw45I6g5qvPBSe9bsjDqh
 		}
 
 Note that the address range ‘1-10’ specified on the command line is included in
 the resulting filename.
 
-NOTE: MMGen supports Segwit addresses as of version 0.9.2 and compressed P2PKH
-addresses as of version 0.9.3.  To generate Segwit or compressed addresses, add
-`--type=segwit` or `--type=compressed` to the command line.  Segwit and
-compressed address files are distinguished from Legacy ones by an added ‘-S’ and
-‘-C’ in the filenames:
+MMGen currently supports three address types: legacy uncompressed, compressed
+P2PKH and Segwit, denoted by the respective code letters ‘L’, ‘C’ and ‘S’.  For
+backwards compatibility, legacy addresses are generated by default.  To generate
+compressed addresses, specify `--type=compressed` on the command line.
 
-		$ mmgen-addrgen --type segwit 1-10
+Legacy addresses are of interest only for existing pre-Segwit MMGen
+installations, so it's unlikely you'll wish to generate them.  Compressed
+addresses are the preferable choice for Bitcoin Cash (BCH) wallets, since
+Bitcoin Cash doesn't support Segwit.
+
+		# legacy uncompressed
+		$ mmgen-addrgen 1-10
 		...
-		$ cat '89ABCDEF-S[1-10].addrs'
-		89ABCDEF SEGWIT {
-		  1   32GiSWo9zIQgkCmjAaLIrbPwXhKry2jHhj
+		$ cat '89ABCDEF[1-10].addrs'
+		89ABCDEF {
+		  1   12GiSWo9zIQgkCmjAaLIrbPwXhKry2jHhj
 		...
 
-		$ mmgen-addrgen --type compressed 1-10
+		# compressed P2PKH
+		$ mmgen-addrgen --type=compressed 1-10
 		...
 		$ cat '89ABCDEF-C[1-10].addrs'
 		89ABCDEF COMPRESSED {
 		  1   13jbRxWjswXtaDzLBJDboMcIe6nLohFb9M
 		...
 
+Note that for non-legacy address types the code letter is present in the
+filename.
+
 To fund your MMGen wallet, first import the addresses into your tracking wallet
 and then spend some BTC into any of them.  If you run out of addresses, generate
 more.  To generate a hundred addresses, for example, you’d specify an address
@@ -204,7 +212,7 @@ provide the addresses with labels.  We’ll use the labels ‘Donations’, ‘S
 
 Make a copy of the address file
 
-		$ cp '89ABCDEF[1-10].addrs' my.addrs
+		$ cp '89ABCDEF-S[1-10].addrs' my.addrs
 
 and edit it using the text editor of your choice,
 
@@ -213,17 +221,17 @@ and edit it using the text editor of your choice,
 adding labels to the addresses you’ve chosen to spend to:
 
 		# My first MMGen addresses
-		89ABCDEF {
-		  1    16bNmyYISiptuvJG3X7MPwiiS4HYvD7ksE  Donations
-		  2    1AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc  Storage 1
-		  3    1HgYCsfqYzIg7LVVfDTp7gYJocJEiDAy6N  Storage 2
-		  4    14Tu3z1tiexXDonNsFIkvzqutE5E3pTK8s  Storage 3
-		  5    1PeI55vtp2bX2uKDkAAR2c6ekHNYe4Hcq7
-		  6    1FEqfEsSILwXPfMvVvVuUovzTaaST62Mnf
-		  7    1LTTzuhMqPLwQ4IGCwwugny6ZMtUQJSJ1
-		  8    1F9495H8EJLb54wirgZkVgI47SP7M2RQWv
-		  9    1JbrCyt7BdxRE9GX1N7GiEct8UnIjPmpYd
-		  10   1H7vVTk4ejUbQXw45I6g5qvPBSe9bsjDqh
+		89ABCDEF SEGWIT {
+		  1    36bNmyYISiptuvJG3X7MPwiiS4HYvD7ksE  Donations
+		  2    3AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc  Storage 1
+		  3    3HgYCsfqYzIg7LVVfDTp7gYJocJEiDAy6N  Storage 2
+		  4    34Tu3z1tiexXDonNsFIkvzqutE5E3pTK8s  Storage 3
+		  5    3PeI55vtp2bX2uKDkAAR2c6ekHNYe4Hcq7
+		  6    3FEqfEsSILwXPfMvVvVuUovzTaaST62Mnf
+		  7    3LTTzuhMqPLwQ4IGCwwugny6ZMtUQJSJ1
+		  8    3F9495H8EJLb54wirgZkVgI47SP7M2RQWv
+		  9    3JbrCyt7BdxRE9GX1N7GiEct8UnIjPmpYd
+		  10   3H7vVTk4ejUbQXw45I6g5qvPBSe9bsjDqh
 		}
 
 Any line beginning with ‘#’ is a comment.  Comments may be placed at the ends
@@ -247,11 +255,11 @@ empty balances).
 
 		$ mmgen-tool listaddresses showempty=1
 		MMGenID       ADDRESS                             COMMENT    BALANCE
-		89ABCDEF:L:1  16bNmyYISiptuvJG3X7MPwiiS4HYvD7ksE  Donations    0
-		89ABCDEF:L:2  1AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc  Storage 1    0
-		89ABCDEF:L:3  1HgYCsfqYzIg7LVVfDTp7gYJocJEiDAy6N  Storage 2    0
-		89ABCDEF:L:4  14Tu3z1tiexXDonNsFIkvzqutE5E3pTK8s  Storage 3    0
-		89ABCDEF:L:5  1PeI55vtp2bX2uKDkAAR2c6ekHNYe4Hcq7               0
+		89ABCDEF:S:1  36bNmyYISiptuvJG3X7MPwiiS4HYvD7ksE  Donations    0
+		89ABCDEF:S:2  3AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc  Storage 1    0
+		89ABCDEF:S:3  3HgYCsfqYzIg7LVVfDTp7gYJocJEiDAy6N  Storage 2    0
+		89ABCDEF:S:4  34Tu3z1tiexXDonNsFIkvzqutE5E3pTK8s  Storage 3    0
+		89ABCDEF:S:5  3PeI55vtp2bX2uKDkAAR2c6ekHNYe4Hcq7               0
 		...
 		TOTAL: 0 BTC
 
@@ -262,10 +270,9 @@ through the network.  To use it, you must save the keys corresponding to the
 addresses where the funds are stored in a separate file to use during signing.*
 
 Note that each address has a unique ID (the ‘MMGen ID’) consisting of its Seed
-ID, its address type (‘L’ for Legacy, ‘S’ for Segwit and ‘C’ for Compressed),
-and its number (index).  Addresses of different types may be imported into the
-same tracking wallet; since they're generated from different sub-seeds you
-needn't worry about key reuse.
+ID, its address type code letter and its index.  Addresses of different types
+may be imported into the same tracking wallet; since they're generated from
+different sub-seeds you needn't worry about key reuse.
 
 Now that your addresses are being tracked, you may go ahead and send some BTC to
 them over the Bitcoin network.  If you send 0.1, 0.2, 0.3 and 0.4 BTC
@@ -274,10 +281,10 @@ have confirmed:
 
 		$ mmgen-tool listaddresses
 		MMGenID       COMMENT    BALANCE
-		89ABCDEF:L:1  Donations    0.1
-		89ABCDEF:L:2  Storage 1    0.2
-		89ABCDEF:L:3  Storage 2    0.3
-		89ABCDEF:L:4  Storage 3    0.4
+		89ABCDEF:S:1  Donations    0.1
+		89ABCDEF:S:2  Storage 1    0.2
+		89ABCDEF:S:3  Storage 2    0.3
+		89ABCDEF:S:4  Storage 3    0.4
 		TOTAL: 1 BTC
 
 #### <a name='a_ct'>Create a transaction (online computer)</a>
@@ -289,29 +296,28 @@ with different combinations of inputs and outputs.  Of course, if you're using
 testnet or regtest mode, then you risk nothing even when broadcasting
 transactions.
 
-To send 0.1 BTC to the a third-party address 1AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc,
-for example, and send the change back to yourself at address 89ABCDEF:5, you’d
+To send 0.1 BTC to the a third-party address 3AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc,
+for example, and send the change back to yourself at address 89ABCDEF:S:5, you’d
 issue the following command:
 
-		$ mmgen-txcreate 1AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc,0.1 89ABCDEF:5
+		$ mmgen-txcreate 3AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc,0.1 89ABCDEF:S:5
 
-Note that 'mmgen-txcreate' accepts either MMGen IDs or Bitcoin addresses as
-arguments.
+'mmgen-txcreate' accepts either MMGen IDs or Bitcoin addresses as arguments.
 
-IMPORTANT NOTE: For the time being, Legacy addresses are the default, so
-address ‘89ABCDEF:5’ is equivalent to ‘89ABCDEF:L:5’.  In the future, users may
-be given the option to make Segwit (for BTC) or Compressed (for BCH) addresses
-the default.
+NOTE: For backwards compatibility, the code letter may be omitted from the MMGen
+ID for legacy addresses.  Thus address ‘89ABCDEF:L:5’, for example, may be
+expressed as ‘89ABCDEF:5’.  For other address types the code letter is
+mandatory.
 
-To send 0.1 BTC to each of your addresses 89ABCDEF:6 and 89ABCDEF:7 and return the
-change to 89ABCDEF:8, you’d do this:
+To send 0.1 BTC to each of addresses 89ABCDEF:S:6 and 89ABCDEF:S:7 and return
+the change to 89ABCDEF:S:8, you’d do this:
 
-		$ mmgen-txcreate 89ABCDEF:6,0.1 89ABCDEF:7,0.1 89ABCDEF:8
+		$ mmgen-txcreate 89ABCDEF:S:6,0.1 89ABCDEF:S:7,0.1 89ABCDEF:S:8
 
 As you can see, each send address is followed by a comma and the amount.  The
 address with no amount is the change address.  All addresses belonging to your
 seed in the above examples are already imported and tracked, so you’re OK.  If
-you wanted to send to 89ABCDEF:11 instead, you'd have to import it first.
+you wanted to send to 89ABCDEF:S:11 instead, you'd have to import it first.
 
 
 Let’s go with the first of our two examples above.
@@ -324,10 +330,10 @@ will look something like this:
 
 		UNSPENT OUTPUTS (sort order: Age)  Total BTC: 1
 		 Num  TX id  Vout    Address                               Amt(BTC) Age(d)
-		 1)   e9742b16... 5  1L3kxmi.. 89ABCDEF:L:1    Donations       0.1    1
-		 2)   fa84d709... 6  1N4dSGj.. 89ABCDEF:L:2    Storage 1       0.2    1
-		 3)   8dde8ef5... 6  1M1fVDc.. 89ABCDEF:L:3    Storage 1       0.3    1
-		 4)   c76874c7... 0  1E8MFoC.. 89ABCDEF:L:4    Storage 3       0.4    1
+		 1)   e9742b16... 5  3L3kxmi.. 89ABCDEF:S:1    Donations       0.1    1
+		 2)   fa84d709... 6  3N4dSGj.. 89ABCDEF:S:2    Storage 1       0.2    1
+		 3)   8dde8ef5... 6  3M1fVDc.. 89ABCDEF:S:3    Storage 1       0.3    1
+		 4)   c76874c7... 0  3E8MFoC.. 89ABCDEF:S:4    Storage 3       0.4    1
 
 		Sort options: [t]xid, [a]mount, a[d]dress, [A]ge, [r]everse, [M]mgen addr
 		Display options: show [D]ays, [g]roup, show [m]mgen addr, r[e]draw screen
@@ -365,9 +371,9 @@ Note that the signed transaction file has a new extension, '.sigtx'.
 #### <a name='a_st'>Send a transaction (online computer)</a>
 
 Now you’re ready for the final step: broadcasting the transaction to the
-network.  Copy the signed transaction file to your online computer, start
-bitcoind if necessary, make sure your blockchain is up-to-date and issue the
-command:
+network.  Start bitcoind if it's not already running, and make sure your
+blockchain is fully synced.  Then copy the signed transaction file to your
+online computer and issue the command:
 
 		$ mmgen-txsend FEDCBA[0.1].sigtx
 		...
@@ -383,10 +389,10 @@ listing should look something like this:
 
 		$ mmgen-tool listaddresses minconf=1
 		MMGenID       COMMENT    BALANCE
-		89ABCDEF:L:1  Donations    0.1
-		89ABCDEF:L:3  Storage 2    0.3
-		89ABCDEF:L:4  Storage 3    0.4
-		89ABCDEF:L:5  Storage 1    0.0999
+		89ABCDEF:S:1  Donations    0.1
+		89ABCDEF:S:3  Storage 2    0.3
+		89ABCDEF:S:4  Storage 3    0.4
+		89ABCDEF:S:5  Storage 1    0.0999
 		TOTAL: 0.8999 BTC
 
 Since you’ve sent 0.1 BTC to a third party, your balance has declined by 0.1 BTC
@@ -427,9 +433,9 @@ The mnemonic is a complete representation of your seed and may be used anywhere
 where you’d use an MMGen wallet.  You can generate addresses with it just as you
 do with a wallet:
 
-		$ mmgen-addrgen 89ABCDEF.mmwords 1-10
+		$ mmgen-addrgen --type=segwit 89ABCDEF.mmwords 1-10
 		...
-		Address data written to file '89ABCDEF[1-10].addrs'
+		Address data written to file '89ABCDEF-S[1-10].addrs'
 
 You can use it to sign transactions:
 
@@ -592,10 +598,10 @@ the wrong hands.
 Your incognito wallet (whether hex or binary) can be used just like any other
 MMGen wallet, mnemonic or seed file to generate addresses and sign transactions:
 
-		$ mmgen-addrgen 89ABCDEF-87654321-CA86420E[256,5].mmincox 101-110
+		$ mmgen-addrgen --type=segwit 89ABCDEF-87654321-CA86420E[256,5].mmincox 101-110
 		...
 		Generated 10 addresses
-		Addresses written to file '89ABCDEF[101-110].addrs'
+		Addresses written to file '89ABCDEF-S[101-110].addrs'
 
 		$ mmgen-txsign FABCDE[0.3].rawtx 89ABCDEF-87654321-CA86420E[256,5].mmincox
 		...
@@ -676,9 +682,9 @@ well as addresses, thus functioning as a hot wallet for a range of addresses.
 Assuming your hot address range begins at 1001, you could start by creating a
 key-address file for a hundred hot addresses like this:
 
-		$ mmgen-keygen 1001-1100
+		$ mmgen-keygen --type=segwit 1001-1100
 		...
-		Secret keys written to file '89ABCDEF[1001-1100].akeys.mmenc'
+		Secret keys written to file '89ABCDEF-S[1001-1100].akeys.mmenc'
 
 `mmgen-keygen` prompts you for a password to encrypt the key-address file with.
 This is a wise precaution, as it provides at least some security for keys that
@@ -687,25 +693,25 @@ will be stored on an online machine.
 Now copy the key-address file to your online machine and import the addresses
 into your tracking wallet:
 
-		$ mmgen-addrimport --batch --keyaddr-file '89ABCDEF[1001-1100].akeys.mmenc'
+		$ mmgen-addrimport --batch --keyaddr-file '89ABCDEF-S[1001-1100].akeys.mmenc'
 
 After funding your hot wallet by spending into some addresses in this range you
 can do quickie transactions with these funds using the `mmgen-txdo` command:
 
-		$ mmgen-txdo -M '89ABCDEF[1001-1100].akeys.mmenc' 1AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc,0.1 89ABCDEF:1010
+		$ mmgen-txdo -M '89ABCDEF-S[1001-1100].akeys.mmenc' 1AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc,0.1 89ABCDEF:S:1010
 		...
 		Transaction sent: dcea1357....
 
 The `--mmgen-keys-from-file` or `-M` option is required when using a key-address
-file in place of a default wallet.  Note that your change address 89ABCDEF:1010
-is within the range covered by the key-address file, so your change funds will
-remain “hot spendable”.
+file in place of a default wallet.  Note that your change address
+89ABCDEF:S:1010 is within the range covered by the key-address file, so your
+change funds will remain “hot spendable”.
 
 Using `mmgen-txdo` with a default online hot wallet is even simpler.  For a hot
 wallet with Seed ID 0FDE89AB, for instance, creating and sending a transaction
-looks like this:
+would look like this:
 
-		$ mmgen-txdo 1AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc,0.1 0FDE89AB:10
+		$ mmgen-txdo 1AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc,0.1 0FDE89AB:S:10
 
 
 #### <a name='a_fee'>Transaction Fees</a>
@@ -757,7 +763,7 @@ incrementally increasing fees will created online and then signed offline.
 Create, sign and send a BIP 125 replaceable transaction with a fee of 50
 satoshis per byte:
 
-		$ mmgen-txdo --rbf --tx-fee 50s 1AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc,0.1 0FDE89AB:5
+		$ mmgen-txdo --rbf --tx-fee 50s 1AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc,0.1 0FDE89AB:S:5
 		...
 		Signed transaction written to file 'FEDCBB[0.1,50].sigtx'
 		...
@@ -799,7 +805,7 @@ you'll need to supply it on the command line as a parameter to the `-M` option.
 To achieve the same result as in the above example using a cold wallet, just
 create the initial transaction with `mmgen-txcreate` instead of `mmgen-txdo`:
 
-		$ mmgen-txcreate --rbf --tx-fee 50s 1AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc,0.1 89ABCDEF:5
+		$ mmgen-txcreate --rbf --tx-fee 50s 1AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc,0.1 89ABCDEF:S:5
 		...
 		Transaction written to file 'FEDCBC[0.1,50].rawtx'
 
@@ -834,7 +840,7 @@ them in turn until you get a confirmation:
 
 [01]: https://github.com/mmgen/mmgen/wiki/Tracking-and-spending-ordinary-Bitcoin-addresses
 [02]: https://tpfaucet.appspot.com
-[03]: Recovering-Keys-Without-MMGen
+[03]: Recovering-Your-Keys-Without-the-MMGen-Software
 [04]: https://bitcoin.org/en/developer-examples#testnet
 [05]: https://bitcoin.org/en/developer-examples#regtest-mode
 [06]: https://github.com/mmgen/mmgen/wiki/MMGen-Quick-Start-with-Regtest-Mode

+ 30 - 20
doc/wiki/using-mmgen/MMGen-Quick-Start-with-Regtest-Mode.md

@@ -1,17 +1,17 @@
-MMGen's regtest mode, also known as Bob and Alice mode, provides a convenient
-front-end for bitcoind's regression test mode.  It creates a private blockchain
-and a virtual network of two users who can perform all MMGen operations,
-including sending bitcoins to each other.
+MMGen'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.
 
-To transact as Bob or Alice, just add the '--bob' or '--alice' option to any
-MMGen command.  MMGen will start and stop the Bitcoin daemon automatically as
-required.  All of MMGen's functionality is available in this mode, making it an
-ideal, risk-free way to acquaint yourself with the MMGen wallet's features and
-transacting on the Bitcoin blockchain in general.
+All of MMGen's functionality is available in regtest mode, making it an ideal
+way to learn to use the 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 relevant MMGen command.  MMGen will start
+and stop the Bitcoin daemon automatically as needed.
 
 This tutorial provides a quick, hands-on introduction.
 
-1. Create the blockchain and Bob and Alice's tracking wallets:
+1. Create the regtest blockchain and Bob and Alice's tracking wallets:
 
 		$ mmgen-regtest setup
 
@@ -26,7 +26,7 @@ This tutorial provides a quick, hands-on introduction.
 		$ 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, your Bob's will be different
+		# 1163DDF1 is Bob's Seed ID; since it's generated randomly, yours will be different
 
 4. Import the addresses into Bob's tracking wallet:
 
@@ -34,8 +34,8 @@ This tutorial provides a quick, hands-on introduction.
 		...
 		Type uppercase 'YES' to confirm: YES
 
-5. List the addresses in Bob's tracking wallet.  You should see the addresses
-you just imported:
+5. List the addresses in Bob's tracking wallet.  You'll see the addresses you
+just imported:
 
 		$ mmgen-tool --bob listaddresses showempty=1
 		MMGenID        ADDRESS                             COMMENT BALANCE
@@ -43,17 +43,21 @@ you just imported:
 		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:
 
 		$ mmgen-regtest send mw42oJ94yRA6ZUNSzmMpjZDR74JNyvqzzZ 500
 
-7. Make sure the funds arrived:
+7. Make sure the funds reached their destination:
 
 		$ 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:
 
@@ -72,8 +76,8 @@ you just imported:
 		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 adjust the address filename and send address as well.  The result of
-step 7 should look something like this:
+forget to change the address filename and send address to suit.  The result of
+step 7 will look something like this:
 
 		MMGenID        ADDRESS                             COMMENT BALANCE
 		9304C211:S:1   2N3HhxasbRvrJyHg72JNVCCPi9EUGrEbFnu    -    500
@@ -82,14 +86,20 @@ step 7 should look something like this:
 		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 '--quiet' for less noisy output:
+Specify a fee of 20 satoshis/byte and make output quieter:
 
 		$ mmgen-txdo --alice --tx-fee=20s --quiet 9304C211:S:2,300 9304C211:S:3
 		...
 		Type uppercase 'YES' to confirm: YES
 		Transaction sent: 78ca853816b55527b42ca8784c887a5f482c752522f914d2f17d6afcd8a3b076
 
-13. Check the mempool for the transaction:
+	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, your seed will be held on a separate offline computer which
+	you'll use to sign transactions using the `mmgen-txsign` command.  This is
+	explained in detail in the Getting Started guide.
+
+13. View the transaction in the mempool:
 
 		$ mmgen-regtest show_mempool
 		['78ca853816b55527b42ca8784c887a5f482c752522f914d2f17d6afcd8a3b076']
@@ -112,7 +122,7 @@ Specify a fee of 20 satoshis/byte and '--quiet' for less noisy output:
 		9304C211:S:3   2NF4y3y4CEjQCcssjX2BDLHT88XHn8z53JS    -    199.999967
 		TOTAL: 499.999967 BTC
 
-17. Have Alice send 10 BTC to Bob's C:2 address, with the change back to her S:1
+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.
 
 		$ mmgen-txdo --alice --tx-fee=0.0001 --quiet 9304C211:S:1 n1oszhfAyRrHi7qJupyzaWXTcpMQGsGJEf,10
@@ -120,7 +130,7 @@ address.  This time Alice specifies an absolute fee in BTC.
 		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
+	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.

+ 0 - 0
doc/wiki/using-mmgen/Recovering-Keys-Without-MMGen.md → doc/wiki/using-mmgen/Recovering-Your-Keys-Without-the-MMGen-Software.md


+ 3 - 3
mmgen/globalvars.py

@@ -38,8 +38,8 @@ class g(object):
 		sys.exit(ev)
 	# Variables - these might be altered at runtime:
 
-	version      = '0.9.299'
-	release_date = 'August 2017'
+	version      = '0.9.3'
+	release_date = 'October 2017'
 
 	proj_name = 'MMGen'
 	proj_url  = 'https://github.com/mmgen/mmgen'
@@ -47,7 +47,7 @@ class g(object):
 	author    = 'Philemon'
 	email     = '<mmgen@tuta.io>'
 	Cdates    = '2013-2017'
-	keywords  = 'Bitcoin, cryptocurrency, wallet, cold storage, offline, online, spending, open-source, command-line, Python, Bitcoin Core, bitcoind, hd, deterministic, hierarchical, secure, anonymous, Electrum, seed, mnemonic, brainwallet, Scrypt, utility, script, scriptable, blockchain, raw, transaction, permissionless, console, terminal, curses, ansi, color, tmux, remote, client, daemon, RPC, json, entropy, xterm, rxvt, PowerShell, MSYS, MinGW, mswin'
+	keywords  = 'Bitcoin, cryptocurrency, wallet, cold storage, offline, online, spending, open-source, command-line, Python, Linux, Bitcoin Core, bitcoind, hd, deterministic, hierarchical, secure, anonymous, Electrum, seed, mnemonic, brainwallet, Scrypt, utility, script, scriptable, blockchain, raw, transaction, permissionless, console, terminal, curses, ansi, color, tmux, remote, client, daemon, RPC, json, entropy, xterm, rxvt, PowerShell, MSYS, MinGW, mswin, Armbian, Raspbian, Raspberry Pi, Orange Pi'
 
 	coin   = 'BTC'
 	coins  = 'BTC','BCH'