update wiki documentation

This commit is contained in:
The MMGen Project 2025-09-15 09:28:41 +00:00
commit 556c7df15c
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
32 changed files with 279 additions and 243 deletions

View file

@ -4,7 +4,7 @@
#### [Ethereum (ETH), Ethereum Classic (ETC) and ERC20 Tokens](#a_eth)
* [Install the Ethereum dependencies](#a_ed)
* [Install and run Geth or Parity](#a_geth)
* [Install and run Reth, Geth or Parity](#a_geth)
* [Transacting and other basic operations](#a_tx)
* [Creating and deploying ERC20 tokens](#a_dt)
@ -12,6 +12,10 @@
#### [Monero (XMR)](#a_xmr)
#### [THORChain (RUNE)](#a_rune)
#### [Asset swaps via THORChain](#a_tcswap)
#### [Key/address generation for Zcash (ZEC)](#a_zec)
#### [Key/address generation for 144 Bitcoin-derived altcoins](#a_kg)
@ -35,20 +39,31 @@ From the MMGen Wallet repository root, type:
```text
$ python3 -m pip install -r alt-requirements.txt # skip this for MSYS2
$ python3 -m pip install --no-deps -r eth-requirements.txt
```
#### <a id="a_geth">Install and run Geth or Parity</a>
#### <a id="a_geth">Install and run Reth, Geth or Parity</a>
MMGen Wallet uses Go-Ethereum (Geth) to communicate with the Ethereum network.
For information on installing Geth on your system, visit the the Geth [Github
repo][ge]. On Arch Linux systems, Go-Ethereum is a package and may be installed
with `pacman`.
MMGen Wallet uses Rust Ethereum (Reth) or Go-Ethereum (Geth) to communicate with
the Ethereum network, with Reth now being preferred by the MMGen Project.
Installation and usage instructions for Reth can be found [here][RE] and
prebuilt binaries [here][rb].
Information for Geth can be found at its [homepage][gh] or [Github repo][ge].
On Arch Linux systems, Geth is a package and may be installed with `pacman`. On
RISC-V platforms, for which no prebuilt binaries are available, Geth must be
built from source, preferably using the most recent version of [Go][gd].
Note that the Ethereum daemon is not used for transaction signing, so you
needn’t install it on your offline machine.
For Geth, the following command-line options are required:
For Reth, the following command-line options are required, among others:
```text
--http --http.api=eth,rpc,web3,txpool
```
For Geth, the following command-line options are required, among others:
```text
--http --http.api=eth,web3,txpool --http.port=8745
@ -71,8 +86,8 @@ Parity’s light client mode, which queries other nodes on the network for
blockchain data, is supported. Add the `--light` option to the Parity command
line and read the applicable note in the [Transacting](#a_tx) section below.
You may require other options as well. Invoke your daemon with the `--help`
option for more complete information.
Other command-line options will certainly be required. Invoke your daemon with
the `--help` option for more complete information.
#### <a id="a_tx">Transacting and other basic operations</a>
@ -80,7 +95,7 @@ Basic operations with ETH, ETC and ERC20 tokens work as described in the
[**Getting Started**][bo] guide, with some differences. Please note the
following:
* Don’t forget to invoke all commands with `--coin=eth` or `--coin=etc`.
* Don’t forget to invoke relevant commands with `--coin=eth` or `--coin=etc`.
* Use the `--token` option with the token symbol as parameter for all token
operations. When importing addresses for a new token into your tracking
wallet, use the `--token-addr` option with the token address instead.
@ -93,6 +108,14 @@ following:
your account balances have changed, they may be refreshed interactively within
the TRACKED ACCOUNTS menu. Cached balances are stored persistently in your
tracking wallet.
* Note that sending transactions with your Ethereum node can easily deanonymize
you by linking the transaction with your IP address (running a Reth node
over Tor or Tor+VPN is theoretically possible, but problematic in practice).
As a solution to this problem, MMGen Wallet supports broadcasting transactions
via the etherscan.io website with the `--tx-proxy` option. Sending is done
using the site’s public web form, so no registration or API key is required.
For anonymity, the connection can be routed via Tor or I2P using the `--proxy`
option. See `mmgen-txsend --help` for details.
##### Transacting example:
@ -205,11 +228,14 @@ To transact BCH or Litecoin, first make sure the Bitcoin Cash Node or Litecoin
daemons are properly installed ([source][si])([binaries][bi]), [running][p8] and
synced.
On RISC-V platforms, Bitcoin Cash Node must be compiled from source, as no
precompiled binaries are available.
MMGen Wallet requires that the bitcoin-bchn daemon be listening on non-standard
[RPC port 8432][p8]. If your daemon version is >= 0.16.2, you must use the
`--usecashaddr=0` option.
Then just add the `--coin=bch` or `--coin=ltc` option to all your MMGen Wallet
Then just add the `--coin=bch` or `--coin=ltc` option to applicable MMGen Wallet
commands. It’s that simple!
### <a id="a_xmr">Monero (XMR)</a>
@ -274,6 +300,30 @@ have multiple wallets requiring long sync times.
To learn how to transact using your wallets, continue on to the
[`mmgen-xmrwallet`][mx] help screen.
### <a id="a_rune">THORChain (RUNE)</a>
Transacting RUNE with MMGen Wallet is similar to transacting BTC as described in
the [**Getting Started**][gs] guide. Just add the `--coin=rune` option to all
relevant commands. With `mmgen-autosign`, add `rune` to the list of coins in
the `--coins` parameter.
Note that MMGen Wallet’s RUNE support requires no locally running node; instead,
balances are fetched and transactions sent via a public node at ninerealms.com.
As this can compromise your privacy, it’s recommended to proxy all
communications via Tor or I2P: refer to the helpscreens of `mmgen-txcreate`,
`mmgen-swaptxcreate` and `mmgen-txsend` for more information.
### <a id="a_tcswap">Asset swaps via THORChain</a>
21 assets (as of this writing) may be swapped directly within MMGen Wallet via
THORChain. Swapping assets is just like normal transacting, except transactions
are created using `mmgen-swaptxcreate` instead of `mmgen-txcreate`. Note that
coin daemons for both the send and receive assets must be running and synced
before carrying out a swap. Depending on your setup, communication with two
daemons simultaneously may require the use of *coin-specific options* (see
`mmgen-swaptxcreate --longhelp`). For usage information, examples, and a list
of supported assets, invoke `mmgen-swaptxcreate --help`.
### <a id="a_zec">Key/address generation for Zcash (ZEC)</a>
MMGen Wallet supports generation of Zcash **z-addresses.**
@ -353,7 +403,11 @@ the MMGen Project.
[si]: Install-Bitcoind-from-Source-on-Linux.md
[bi]: Install-Bitcoind.md#a_d
[p8]: Install-Bitcoind.md#a_r
[gh]: https://geth.ethereum.org
[ge]: https://github.com/ethereum/go-ethereum
[mx]: commands/command-help-xmrwallet.md
[sb]: https://github.com/ethereum/solidity/releases
[sd]: https://docs.soliditylang.org
[RE]: https://reth.rs/overview
[rb]: https://github.com/paradigmxyz/reth/releases
[gd]: https://go.dev

View file

@ -38,31 +38,31 @@
#### <a id="a_bb">Before you begin</a>
Before you begin, note that the filenames, seed IDs and Bitcoin addresses used
in this primer are intentionally invalid and are for purposes of illustration
only. As you perform the exercises, you will substitute real ones in their
place.
Before you begin, please note that the filenames, seed IDs and Bitcoin addresses
used in this primer are intentionally invalid and are for purposes of
illustration only. As you perform the exercises, you will substitute real ones
in their place.
The up arrow (for repeating commands) and tab key (or Ctrl-I) (for completing
commands and filenames) will speed up your work at the command line greatly.
The examples in this tutorial are geared towards Bitcoin, but with some
modification they may be used with altcoins and forkcoins for which MMGen
Wallet supports transaction operations (BCH, LTC, ETH, ETC and XMR as of this
writing). See [Altcoin-and-Forkcoin-Support][09] for more details.
Wallet supports transaction operations (BCH, LTC, ETH, ETC, RUNE and XMR as of
this writing). See [Altcoin-and-Forkcoin-Support][09] for more details.
#### <a id="a_iv">Invocation</a>
MMGen Wallet is not a single program but a suite of lightweight scripts run from
the command line. Commands all begin, not surprisingly, with `mmgen`, and thus
you may view all available commands by typing `mmgen` followed by the TAB key.
Every command has a help screen displaying detailed usage and options
information. To view it, type the command name followed by `--help`. Note that
most command options have long and short versions. For example, the `--help`
option may be abbreviated to `-h`. Exceptions are the options listed by
`--longhelp`, which have no short versions.
MMGen Wallet is not a single program but a suite of scripts run from the command
line. Commands all begin, not surprisingly, with `mmgen`, and thus you may view
all available commands by typing `mmgen` followed by the TAB key. Every command
has a help screen displaying detailed usage and options information, available
by entering the command name followed by `--help`. Note that most command
options have long and short versions. For example, the `--help` option may be
abbreviated to `-h`. Exceptions are the options listed by `--longhelp`, which
have no short versions.
MMGen Wallet’s commands are generally interactive, providing you with information
MMGen Wallet’s scripts are generally interactive, providing you with information
and prompting you for input. The `--verbose` or `-v` option requests commands
to be more wordy, while the `--quiet` or `-q` option suppresses all but the most
essential information. These options are available for all MMGen Wallet
@ -80,31 +80,35 @@ Sample command invocations:
```text
$ mmgen-txcreate --help
$ mmgen-txcreate --coin=eth --help
$ mmgen-addrgen --verbose 1-10
$ mmgen-walletgen
$ mmgen-walletgen --quiet --seed-len 128
```
Note that the help screens are contextual, so the first two invocations will
produce different output.
#### <a id="a_cf">Configuration file</a>
Just like Bitcoin Core, MMGen Wallet has its own data directory and
configuration file. The data directory is `.mmgen` in the user’s home directory
and the config file is `mmgen.cfg`. The config file contains global settings
which you may wish to edit at some point to customize your installation. These
settings include the maximum transaction fee; the user name, password and
hostname used for communicating with your Bitcoin or altcoin daemon; and a
number of others.
Just like Bitcoin Core, MMGen Wallet has its own data directory, `.mmgen` in the
user’s home directory, and configuration file, `mmgen.cfg`. The config file
contains global settings which you may wish to edit at some point to customize
your installation. These settings include the maximum transaction fee; the user
name, password and hostname used for communicating with your Bitcoin or altcoin
daemon; and many others. For details, consult the configuration file itself,
which is extensively commented.
#### <a id="a_ts">Bob and Alice regtest mode</a>
If you just want to quickly test using MMGen Wallet, it’s possible to perform
all wallet generation, wallet format conversion, address and key generation, and
address import operations on an offline computer with no blockchain and no
bitcoin balance.
address import operations on an offline computer with no blockchain and no coin
balance.
If you want to practice creating, signing and sending transactions with real
bitcoins, however, you’ll need a fully synced blockchain and some coins to play
with. This involves an expenditure of both time and money.
However, if you want to practice creating, signing and sending transactions with
real assets, you’ll need a fully synced blockchain and some coins to play with.
This involves an expenditure of both time and money.
Fortunately, there’s an alternative: MMGen Wallet’s **regtest mode** creates a
virtual network of two users, Bob and Alice, who transact with each other on a
@ -158,16 +162,16 @@ Since the wallet is a small, humanly readable ASCII file, it can easily be
printed out on paper.
Another highly recommended way to back up your wallet is to generate a mnemonic
seed phrase or seed file [as described below](#a_ms) and write it down or
memorize it. If you have an average or better memory, you’ll find memorizing
your seed phrase to be surprisingly easy. And the peace of mind that comes with
knowing that your coins are recoverable **even if you lose all your physical
backups** can’t be overestimated.
seed phrase or seed file [as described below](#a_ms) and record or memorize it.
If you have an average or better memory, you’ll find memorizing your seed phrase
to be surprisingly easy. And the peace of mind that comes with knowing that your
coins are recoverable **even if you lose all your physical backups** can’t be
overestimated.
### <a id="a_tr">Transacting</a>
*The following transacting information is applicable to BTC, BCH, LTC, ETH and
ETC. For transacting with Monero, consult [Altcoin-and-Forkcoin-Support][ax]
*The following transacting information is applicable to BTC, BCH, LTC, ETH, ETC
and RUNE. For transacting with Monero, consult [Altcoin-and-Forkcoin-Support][x]
and the [`mmgen-xmrwallet`][mx] help screen.*
#### <a id="a_ga">Generate addresses (offline computer)</a>
@ -249,77 +253,51 @@ $ cat '89ABCDEF-B[1-10].addrs'
Note that for non-legacy address types the code letter is included in the
filename.
To fund your wallet, first import the addresses into your tracking wallet and
then send some coins to any of them. If you run out of addresses, generate
more. To generate a hundred addresses you’d specify an address range of
`1-100`.
Let’s say you’ve decided to spend some BTC into the first four addresses above.
Begin by importing these addresses into the tracking wallet on your online
machine so their balances will be visible. For convenience of reference,
provide the addresses with labels. We’ll use the labels ‘Donations’, ‘Storage
1’, ‘Storage 2’ and ‘Storage 3’.
Make a copy of the address file
```text
$ cp '89ABCDEF-S[1-10].addrs' my.addrs
```
and edit it using the text editor of your choice,
```text
$ nano my.addrs
```
adding labels to the addresses you’ve chosen to spend to:
```text
# My first MMGen addresses
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
of lines as well.
Save the file, copy it onto a USB stick and transfer it to your online computer.
#### <a id="a_ia">Import addresses (online computer)</a>
To fund your wallet, you must import the addresses you’ve generated into your
tracking wallet.
Start the coin daemon with the required options (see the [Install-Bitcoind][08]
wiki page for more details on invoking the daemon for your coin and platform).
Upon startup, older daemons used to automatically generate a new default
`wallet.dat`, which MMGen Wallet used as its tracking wallet. With newer
daemons (e.g. Core 0.21.0 and above), the tracking wallet will be a directory
named `mmgen-tracking-wallet`, located by default under the `wallets`
subdirectory in your daemon’s datadir.
daemons (e.g. Core 0.21.0 and above), the tracking wallet is generated when
first invoking `mmgen-addrimport` and will be a directory named
`mmgen-tracking-wallet` located by default under the `wallets` subdirectory
in your coin daemon’s datadir.
Import the ten addresses into your new tracking wallet with the command:
Create your tracking wallet and import the ten addresses generated above into
it as follows:
```text
$ mmgen-addrimport --batch my.addrs
$ mmgen-addrimport my.addrs
```
These addresses will now be tracked: any BTC transferred to them will show up in
your listing of address balances. Balances can be viewed using `mmgen-tool
listaddresses` (the `showempty` option requests addresses with empty balances
to be displayed too).
These addresses are now tracked: any BTC transferred to them will show up in
your listing of address balances, and balances will be updated automatically
as your node syncs with the blockchain. Balances can be viewed using
`mmgen-tool listaddresses`:
```text
$ mmgen-tool listaddresses showempty=1
MMGenID ADDRESS COMMENT BALANCE
$ mmgen-tool listaddresses
MMGenID Address Comment Balance
89ABCDEF:S:1 36bNmyYISiptuvJG3X7MPwiiS4HYvD7ksE 0
89ABCDEF:S:2 3AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc 0
89ABCDEF:S:3 3HgYCsfqYzIg7LVVfDTp7gYJocJEiDAy6N 0
89ABCDEF:S:4 34Tu3z1tiexXDonNsFIkvzqutE5E3pTK8s 0
89ABCDEF:S:5 3PeI55vtp2bX2uKDkAAR2c6ekHNYe4Hcq7 0
...
TOTAL: 0 BTC
```
Invoke `mmgen-tool listaddresses interactive=1` and add some comments to your
newly-imported addresses using the ‘l’ key. Depending on your comments, your
output will now look something like this:
```text
MMGenID Address Comment Balance
89ABCDEF:S:1 36bNmyYISiptuvJG3X7MPwiiS4HYvD7ksE Donations 0
89ABCDEF:S:2 3AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc Storage 1 0
89ABCDEF:S:3 3HgYCsfqYzIg7LVVfDTp7gYJocJEiDAy6N Storage 2 0
@ -330,10 +308,11 @@ TOTAL: 0 BTC
```
*While not covered in this introduction, note that it’s also possible to [import
external coin addresses into your tracking wallet][01]. This allows MMGen
non-MMGen coin addresses into your tracking wallet][01]. This allows MMGen
Wallet to track and spend funds from another wallet without having to transfer
the coins through the network. To do this, you must save the keys corresponding
to the given addresses in a separate file for use during transaction signing.*
the coins via the blockchain. To do this, you must save the private keys
corresponding to the given addresses in a separate file for use during
transaction signing.*
Note that each address has a unique ID (the ‘MMGen ID’) consisting of a Seed ID,
address type code letter, and index. Addresses of different types may be
@ -342,29 +321,27 @@ sub-seeds you needn’t worry about key reuse. For example, the addresses
`89ABCDEF:S:1` and `89ABCDEF:B:1` are cryptographically unrelated: no one but the
wallet’s owner can see that they were generated from the same seed.
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
respectively, your address listing will look like this after the transactions
have confirmed:
Now that your addresses are being tracked, you may send some BTC to them over
the Bitcoin network. If you send 0.1, 0.2, 0.3 and 0.4 BTC respectively, your
address listing will look like this after the transactions have confirmed:
```text
$ mmgen-tool listaddresses
MMGenID COMMENT BALANCE
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
MMGenID Address Comment Balance
89ABCDEF:S:1 36bNmyYISiptuvJG3X7MPwiiS4HYvD7ksE Donations 0.1
89ABCDEF:S:2 3AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc Storage 1 0.2
89ABCDEF:S:3 3HgYCsfqYzIg7LVVfDTp7gYJocJEiDAy6N Storage 2 0.3
89ABCDEF:S:4 34Tu3z1tiexXDonNsFIkvzqutE5E3pTK8s Storage 3 0.4
TOTAL: 1 BTC
```
#### <a id="a_ct">Create a transaction (online computer)</a>
Now that you have some BTC under MMGen Wallets’s control, you’re ready to create
a transaction. Note that transactions are harmless until they’re signed and
broadcast to the network, so feel free to experiment and create transactions
Now that you have some coins under MMGen Wallet’s control, you’re ready to
create a transaction. Note that transactions are harmless until they’re signed
and broadcast to the network, so feel free to experiment and create transactions
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.
testnet or regtest mode, you risk nothing even when broadcasting transactions.
To send 0.1 BTC to the a third-party address
`3AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc`, for example, and send the change back to
@ -426,8 +403,9 @@ amount of 0.1 BTC, plus the transaction fee (for more on fees, see ‘Transactio
Fees’ under ‘Advanced Topics’ below). Output #2 is worth 0.2 BTC, which is
sufficient, so we’ll choose that and hit ENTER. When prompted for a
transaction fee, we’ll choose 0.0001 BTC (note that integer fees followed by
the letter ‘s’ for “satoshis per byte” are also permissible). After a couple
more prompts and confirmations, your transaction will be saved:
the letter ‘s’ for “satoshis per byte” are also accepted, and this is actually
the preferred way to indicate fees). After a couple more prompts and
confirmations, your transaction will be saved:
```text
Transaction written to file 'FEDCBA[0.1].rawtx'
@ -475,17 +453,17 @@ Once the transaction is broadcast to the network and confirmed, your address
listing should look something like this:
```text
$ mmgen-tool listaddresses minconf=1
MMGenID COMMENT BALANCE
89ABCDEF:S:1 Donations 0.1
89ABCDEF:S:3 Storage 2 0.3
89ABCDEF:S:4 Storage 3 0.4
89ABCDEF:S:5 0.0999
$ mmgen-tool listaddresses
MMGenID Address Comment Balance
89ABCDEF:S:1 36bNmyYISiptuvJG3X7MPwiiS4HYvD7ksE Donations 0.1
89ABCDEF:S:3 3HgYCsfqYzIg7LVVfDTp7gYJocJEiDAy6N Storage 2 0.3
89ABCDEF:S:4 34Tu3z1tiexXDonNsFIkvzqutE5E3pTK8s Storage 3 0.4
89ABCDEF:S:5 3PeI55vtp2bX2uKDkAAR2c6ekHNYe4Hcq7 0.0999
TOTAL: 0.8999 BTC
```
Alternatively, you may use `mmgen-tool twview` or `mmgen-txcreate -i` for more
detailed and configurable output:
Alternatively, you may use view your addresses with `mmgen-tool twview`, which
lists only unspent outputs and provides some additional information:
```text
$ mmgen-tool twview
@ -1149,7 +1127,7 @@ $ python3 -m pip install user --upgrade dist/*.whl
[07]: commands/command-help-autosign.md
[08]: Install-Bitcoind.md
[09]: Altcoin-and-Forkcoin-Support.md
[ax]: Altcoin-and-Forkcoin-Support.md#a_xmr
[x]: Altcoin-and-Forkcoin-Support.md#a_xmr
[cp]: ../../../../commits/master
[mx]: commands/command-help-xmrwallet.md
[li]: Install-MMGen-Wallet-on-Linux-or-macOS.md

View file

@ -11,7 +11,7 @@ For computers with no Internet connection, see **Note for offline machines** bel
#### Debian/Ubuntu:
```text
$ sudo apt-get install curl git gcc libtool make autoconf libgmp-dev libssl-dev libpcre2-dev libmpfr-dev libmpc-dev python3-dev python3-pip libsecp256k1-dev
$ sudo apt-get install curl git gcc libtool make autoconf e2fsprogs libgmp-dev libssl-dev libpcre2-dev libmpfr-dev libmpc-dev python3-dev python3-pip libsecp256k1-dev
```
#### Arch Linux:
@ -26,6 +26,8 @@ $ sudo pacman -S curl git gcc libtool make autoconf automake autogen pcre python
$ brew install python bash autoconf coreutils gcc libmpc libtool readline secp256k1
```
On RISC-V machines, you may additionally need to install the `libffi-dev` package and [Rust][rs]
You may wish to use a [virtual environment][vv] to keep your MMGen Wallet
installation isolated from the rest of your Python packages.
@ -110,3 +112,4 @@ Congratulations, your installation is now complete! You can now proceed to
[af]: Altcoin-and-Forkcoin-Support.md
[ec]: https://github.com/bitcoin-core/secp256k1.git
[vv]: https://docs.python.org/3/library/venv.html
[rs]: https://rustup.rs

View file

@ -11,15 +11,13 @@
* [Offline install](#a_md1)
* [4. Set up your shell environment](#a_ev)
* [5. Choose your Python environment](#a_pev)
* [6. Install the Python ECDSA library (offline install only)](#a_ec)
* [7. Install the standalone scrypt package (required for strong password hashing)](#a_sc)
* [8. Clone and copy the secp256k1 library (offline install only)](#a_se)
* [9. Install MMGen Wallet](#a_mm)
* [6. Install required Python packages](#a_pp)
* [7. Clone and copy the secp256k1 library (offline install only)](#a_se)
* [8. Install MMGen Wallet](#a_mm)
* [Stable version](#a_mms)
* [Development version](#a_mmd)
* [10. Install Python Ethereum dependencies (if applicable)](#a_pe)
* [11. Install and launch your coin daemons](#a_cd)
* [12. You’re done!](#a_do)
* [9. Install and launch your coin daemons](#a_cd)
* [10. You’re done!](#a_do)
#### [Keeping your installation up to date](#a_u)
* [Upgrading MSYS2](#a_us)
@ -106,14 +104,12 @@ $ ls 'C:\\msys64\etc' # the path as seen by Windows
>
>> <https://mirror.msys2.org/msys/x86_64/msys.db>
>> <https://mirror.msys2.org/msys/x86_64/msys.db.sig>
>> <https://mirror.msys2.org/mingw/x86_64/mingw64.db>
>> <https://mirror.msys2.org/mingw/x86_64/mingw64.db.sig>
>> <https://mirror.msys2.org/mingw/i686/mingw32.db>
>> <https://mirror.msys2.org/mingw/i686/mingw32.db.sig>
>> <https://mirror.msys2.org/mingw/mingw64/mingw64.db>
>> <https://mirror.msys2.org/mingw/mingw64/mingw64.db.sig>
>> <https://mirror.msys2.org/mingw/mingw32/mingw32.db>
>> <https://mirror.msys2.org/mingw/mingw32/mingw32.db.sig>
>> <https://mirror.msys2.org/mingw/clang64/clang64.db>
>> <https://mirror.msys2.org/mingw/clang64/clang64.db.sig>
>> <https://mirror.msys2.org/mingw/clang32/clang32.db>
>> <https://mirror.msys2.org/mingw/clang32/clang32.db.sig>
>> <https://mirror.msys2.org/mingw/clangarm64/clangarm64.db>
>> <https://mirror.msys2.org/mingw/clangarm64/clangarm64.db.sig>
>> <https://mirror.msys2.org/mingw/ucrt64/ucrt64.db>
@ -195,7 +191,8 @@ pacman -S tar git vim autoconf automake-wrapper autogen libtool cygrunsrv \
mingw-w64-ucrt-x86_64-python-pysocks \
mingw-w64-ucrt-x86_64-python-requests \
mingw-w64-ucrt-x86_64-python-aiohttp \
mingw-w64-ucrt-x86_64-python-pyreadline3
mingw-w64-ucrt-x86_64-python-pyreadline3 \
mingw-w64-ucrt-x86_64-python-lxml
```
### <a id="a_ev">4. Set up your shell environment</a>
@ -236,46 +233,25 @@ If you choose not to use a virtual environment, then you should add `--user` to
the command line every time you run `pip install` as directed below. This will
prevent pip from installing packages in the system directory.
### <a id="a_ec">6. Install the Python ECDSA library (offline install only)</a>
### <a id="a_pp">6. Install required Python packages</a>
On your online machine:
```text
$ python3 -m pip download ecdsa
$ python3 -m pip download --no-binary :all: scrypt==0.8.27 aiohttp==3.12.9
```
Copy the downloaded file to your offline machine and install:
Copy the downloaded files to your offline machine (if applicable) and install:
```text
$ python3 -m pip install ecdsa-*.whl
$ python3 -m pip install --no-build-isolation scrypt*gz
$ python3 -m pip install --no-build-isolation aiohtt* multidic* yarl* aiohap* aiosig* attrs* frozenlist* idna* propcache*
```
### <a id="a_sc">7. Install the standalone scrypt package (required for strong password hashing)</a>
Due to a faulty implementation of the `scrypt` function included in Python’s
`hashlib`, the standalone `scrypt` module is required for stronger-than-default
password hashing (i.e. hash presets greater than `3`). Installing the package is
therefore highly advisable.
On your online machine, clone the Py-Scrypt repository from Github:
```text
$ git clone https://github.com/holgern/py-scrypt.git
```
Offline install:
> Copy the cloned repo to your offline machine.
Build and install:
```text
$ cd py-scrypt
$ python3 -m build --no-isolation
$ python3 -m pip install dist/*.whl
```
### <a id="a_se">8. Clone and copy the secp256k1 library (offline install only)</a>
### <a id="a_se">7. Clone and copy the secp256k1 library (offline install only)</a>
On your online machine, clone the secp256k1 repository from Github:
@ -292,7 +268,7 @@ $ cp -a /path/to/secp256k1/repo/secp256k1 ~/.cache/mmgen
$ ls ~/.cache/mmgen/secp256k1/autogen.sh # check that files were correctly copied
```
### <a id="a_mm">9. Install MMGen Wallet</a>
### <a id="a_mm">8. Install MMGen Wallet</a>
Now you’re ready to install MMGen Wallet itself.
@ -350,31 +326,7 @@ occasion.
Note that MMGen Wallet has a test suite. Refer to the [Test Suite][ts] wiki
page for details.
### <a id="a_pe">10. Install Python Ethereum dependencies (if applicable)</a>
If you’ll be using MMGen Wallet with Ethereum, then you must install a few
dependencies. From the MMGen repository root, type the following:
Online install:
> ```text
> $ python3 -m pip install --no-deps -r eth-requirements.txt
> ```
Offline install:
> ```text
> $ python3 -m pip download --no-deps -r eth-requirements.txt
> ```
>
> Transfer the downloaded files to your offline machine, `cd` to the directory
> containing the files and install them:
>
> ```text
> $ python3 -m pip install --no-deps *.whl
> ```
### <a id="a_cd">11. Install and launch your coin daemons</a>
### <a id="a_cd">9. Install and launch your coin daemons</a>
At this point your installation will be able to generate wallets, along with
keys and addresses for all supported coins. However, if you intend to do any
@ -399,7 +351,7 @@ Please note that Ethereum daemons perform rather poorly under Windows due to
threading limitations. Unless you have very fast hardware, transacting and
syncing the blockchain will be painfully slow.
### <a id="a_do">12. You’re done!</a>
### <a id="a_do">10. You’re done!</a>
Congratulations, your installation is now complete, and you can proceed to
[**Getting Started with MMGen Wallet**][gs]. Note that all features supported

View file

@ -38,6 +38,8 @@ Every time the container is started, you may need to create the files afresh:
### BTC-only testing
Install the Bitcoin Core daemon [(source)][sd] [(binaries)][bd].
Install Pycoin:
```text
@ -49,7 +51,8 @@ $ python3 -m pip download pycoin # online
$ python3 -m pip install --no-build-isolation pycoin-*.tar.gz # offline
```
CD to the MMGen Wallet repository root and build without installing:
CD to the MMGen Wallet repository root and build the secp256k1 extension module
in place:
```text
$ cd path/to/mmgen/repo
@ -62,7 +65,8 @@ Run the following if upgrading from a previous version of MMGen:
$ test/cmdtest.py clean
```
Run the test suite in fast mode, skipping altcoin tests:
Run the test suite in fast mode, skipping altcoin tests (fast mode skips
non-essential tests and uses fewer rounds for repeated tests):
```text
$ test/test-release.sh -FA
@ -75,9 +79,10 @@ Complete the BTC-only installation steps above, without running the test.
Make sure the [Bitcoin Cash Node][cnd], [Litecoin][ld] and [Monero][md]
daemons are installed on your system.
Install [Parity, Geth and the ETH Python requirements][oe], optionally the
Install [Reth, Geth, Parity and the ETH Python requirements][rg], optionally the
[Solidity compiler][sc], and [the XMR Python requirements][xr] as described on
the Altcoin-and-Forkcoin-Support page.
the Altcoin-and-Forkcoin-Support page. For Ethereum testing in fast mode, Reth
may be omitted.
In addition, you must install the following helper programs and libraries (MSYS2
users can omit Zcash-Mini and leave out `sudo` in commands):
@ -112,32 +117,54 @@ may also be started and stopped manually at the DOS or MSYS2 prompt as follows
# net stop msys2_sshd
```
#### Monero-Python
#### Install Monero-Python
```text
$ python3 -m pip install pycryptodome ipaddress varint
$ python3 -m pip install --no-deps monero
```
#### Eth-Keys
#### Install Eth-Keys (non-MSYS2 systems)
This pulls in a lot of dependencies. If you prefer, you may install the
openethereum ‘ethkey’ utility instead, if it’s available on your platform.
```text
$ python3 -m pip install eth-keys
```
#### Vanitygen PlusPlus (forked from Vanitygen Plus)
#### Install OpenEthereum Ethkey (alternative to eth-keys)
Install this on MSYS2 or if ‘eth-keys’ is unavailable on your platform. Do not
confuse this with the Reth ‘ethkey’ utility, which is entirely different.
On Arch Linux and ArchLinuxArm systems, ‘ethkey’ is installed as follows:
```text
$ pacman -S openethereum
```
For 64-bit Windows (MSYS2), Linux and macOS systems, ‘ethkey’ can be found in
the zip archives distributed with [this release][oz].
#### Install Vanitygen PlusPlus (a fork of Vanitygen Plus)
```text
$ git clone https://github.com/10gic/vanitygen-plusplus
$ cd vanitygen-plusplus
$ git checkout -b vanitygen-plus e7858035d092 # rewind to fork commit
```
Edit the Makefile, changing `-lpcre` to `-lpcre2-posix` on the second line.
```text
$ make keyconv # ‘mingw32-make.exe keyconv’ for MSYS2
$ sudo install --strip keyconv /usr/local/bin # Linux, macOS
$ install --strip keyconv.exe /usr/local/bin # MSYS2
$ cd ..
```
#### Zcash-Mini
#### Install Zcash-Mini
```text
$ sudo apt-get install golang # skip this if Go is already installed
@ -163,7 +190,7 @@ If you experience such a failure, just restart the test.
### Run the tests
Now you can run the test suite for all coins:
Now you may run the test suite in fast mode for all coins:
```text
$ test/test-release.sh -F
@ -205,7 +232,7 @@ display the commands’ output on the screen as they’re being run.
[ad]: https://download.bitcoinabc.org/
[cnd]: https://bitcoincashnode.org/
[ld]: https://download.litecoin.org/litecoin-0.17.1/
[oe]: Altcoin-and-Forkcoin-Support.md#a_ed
[rg]: Altcoin-and-Forkcoin-Support.md#a_geth
[sc]: Altcoin-and-Forkcoin-Support.md#a_dt
[xr]: Altcoin-and-Forkcoin-Support.md#a_xmr_req
[oz]: https://github.com/openethereum/openethereum/releases/tag/v3.1.0

View file

@ -121,5 +121,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN-WALLET 15.1.dev44 June 2025 MMGEN-ADDRGEN(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-ADDRGEN(1)
```

View file

@ -31,5 +31,5 @@
It’s recommended to use ‘--rpc-backend=aio’ with ‘--rescan’.
MMGEN v15.1.dev18 March 2025 MMGEN-ADDRIMPORT(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-ADDRIMPORT(1)
```

View file

@ -6,6 +6,12 @@
--longhelp Print help message for long (global) options
-c, --coins c Coins to sign for (comma-separated list)
-I, --no-insert-check Don’t check for device insertion
-k, --keys-from-file F Use wif keys listed in file ‘F’ for signing non-MMGen
inputs. The file may be MMGen encrypted if desired. The
‘setup’ operation creates a temporary encrypted copy of
the file in volatile memory for use during the signing
session, thus permitting the deletion of the original
file for increased security.
-l, --seed-len N Specify wallet seed length of ‘N’ bits (for setup only)
-L, --led Use status LED to signal standby, busy and error
-m, --mountpoint M Specify an alternate mountpoint 'M'
@ -127,5 +133,5 @@
Always remember to power off the signing machine when your signing session
is over.
MMGEN v15.1.dev18 March 2025 MMGEN-AUTOSIGN(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-AUTOSIGN(1)
```

View file

@ -31,5 +31,5 @@
'[{"txid":"832f5aa9af55dc453314e26869c8f96db1f2a9acac9f23ae18d396903971e0c6","vout":0}]' \
'[{"1111111111111111111114oLvT2":0.001}]'
MMGEN v15.1.dev19 March 2025 MMGEN-CLI(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-CLI(1)
```

View file

@ -126,5 +126,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN-WALLET 15.1.dev44 June 2025 MMGEN-KEYGEN(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-KEYGEN(1)
```

View file

@ -107,5 +107,5 @@
Verify and display the exported JSON signature data:
$ mmgen-msg verify signatures.json
MMGEN-WALLET 15.1.dev44 June 2025 MMGEN-MSG(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-MSG(1)
```

View file

@ -53,5 +53,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN v15.1.dev18 March 2025 MMGEN-PASSCHG(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-PASSCHG(1)
```

View file

@ -101,5 +101,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN v15.1.dev18 March 2025 MMGEN-PASSGEN(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-PASSGEN(1)
```

View file

@ -25,5 +25,5 @@
wallet_cli - execute a wallet RPC call with supplied arguments (wallet
is first argument)
MMGEN v15.1.dev18 March 2025 MMGEN-REGTEST(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-REGTEST(1)
```

View file

@ -62,5 +62,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN v15.1.dev18 March 2025 MMGEN-SEEDJOIN(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-SEEDJOIN(1)
```

View file

@ -144,5 +144,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN v15.1.dev18 March 2025 MMGEN-SEEDSPLIT(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-SEEDSPLIT(1)
```

View file

@ -97,5 +97,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN v15.1.dev18 March 2025 MMGEN-SUBWALLETGEN(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-SUBWALLETGEN(1)
```

View file

@ -254,5 +254,5 @@
$ https_proxy=http://gw1:4444 mmgen-swaptxcreate --proxy=env RUNE 1000 BTC
MMGEN-WALLET 15.1.dev47 June 2025 MMGEN-SWAPTXCREATE(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-SWAPTXCREATE(1)
```

View file

@ -316,5 +316,5 @@
$ https_proxy=http://gw1:4444 mmgen-swaptxdo --proxy=env RUNE 1000 BTC
MMGEN-WALLET 15.1.dev47 June 2025 MMGEN-SWAPTXDO(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-SWAPTXDO(1)
```

View file

@ -499,10 +499,22 @@ Required ARG (type shown in square brackets):
pubkeyhex [str] (use '-' to read from STDIN)
```
### `mmgen-tool privhex2pair`
```text
Generate a wifkey/address pair from the provided hexadecimal key
USAGE: mmgen-tool [OPTS] privhex2pair ARG
Required ARG (type shown in square brackets):
privhex [str] (use '-' to read from STDIN)
```
### `mmgen-tool randpair`
```text
Generate a random private key/address pair
Generate a random wifkey/address pair
USAGE: mmgen-tool [OPTS] randpair
```
@ -1240,5 +1252,5 @@ Optional KEYWORD ARGS (type and default value shown in square brackets):
```
```text
MMGEN v15.1.dev18 March 2025 MMGEN-TOOL(DETAIL)(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-TOOL(DETAIL)(1)
```

View file

@ -61,6 +61,7 @@ GENERAL USAGE INFORMATION FOR MMGEN-TOOL COMMANDS
pubhash2addr pubhashhex [str or STDIN]
pubhex2addr pubkeyhex [str or STDIN]
pubhex2redeem_script pubkeyhex [str or STDIN]
privhex2pair privhex [str or STDIN]
randpair
randwif
redeem_script2addr redeem_script_hex [str or STDIN]
@ -187,5 +188,5 @@ EXAMPLES:
Same as above, but supply input via STDIN:
$ echo "deadbeefcafe" | mmgen-tool hexreverse -
MMGEN v15.1.dev18 March 2025 MMGEN-TOOL(USAGE)(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-TOOL(USAGE)(1)
```

View file

@ -19,7 +19,9 @@
-t, --type t Specify address type (valid choices: 'legacy',
'compressed', 'segwit', 'bech32', 'zcash_z')
-v, --verbose Produce more verbose output
-X, --cached-balances Use cached balances (Ethereum only)
-x, --proxy P Proxy HTTP connections via SOCKS5h proxy ‘P’ (host:port).
Use special value ‘env’ to honor *_PROXY environment
vars instead.
-y, --yes Answer 'yes' to prompts, suppress non-essential output
@ -84,7 +86,9 @@
pubhex2addr - convert a hexadecimal pubkey to an address
pubhex2redeem_script - convert a hexadecimal pubkey to a Segwit
P2SH-P2WPKH redeem script
randpair - generate a random private key/address pair
privhex2pair - generate a wifkey/address pair from the provided
hexadecimal key
randpair - generate a random wifkey/address pair
randwif - generate a random private key in WIF format
redeem_script2addr - convert a Segwit P2SH-P2WPKH redeem script to an
address
@ -198,5 +202,5 @@
Type ‘mmgen-tool help <command>’ for help on a particular command
MMGEN v15.1.dev18 March 2025 MMGEN-TOOL(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-TOOL(1)
```

View file

@ -120,5 +120,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN-WALLET 15.1.dev44 June 2025 MMGEN-TXBUMP(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-TXBUMP(1)
```

View file

@ -124,5 +124,5 @@
$ mmgen-txcreate B
MMGEN-WALLET 15.1.dev44 June 2025 MMGEN-TXCREATE(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-TXCREATE(1)
```

View file

@ -190,5 +190,5 @@
$ mmgen-txdo B
MMGEN-WALLET 15.1.dev44 June 2025 MMGEN-TXDO(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-TXDO(1)
```

View file

@ -34,5 +34,5 @@
instead.
-y, --yes Answer 'yes' to prompts, suppress non-essential output
MMGEN-WALLET 15.1.dev37 May 2025 MMGEN-TXSEND(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-TXSEND(1)
```

View file

@ -5,8 +5,7 @@
-h, --help Print this help message
--longhelp Print help message for long (global) options
-a, --autosign Sign a transaction created for offline autosigning (see
‘mmgen-autosign’). The removable device is mounted and
unmounted automatically
‘mmgen-autosign’)
-b, --brain-params l,p Use seed length 'l' and hash preset 'p' for
brainwallet input
-d, --outdir d Specify an alternate directory 'd' for output
@ -85,5 +84,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN-WALLET 15.1.dev47 June 2025 MMGEN-TXSIGN(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-TXSIGN(1)
```

View file

@ -51,5 +51,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN v15.1.dev18 March 2025 MMGEN-WALLETCHK(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-WALLETCHK(1)
```

View file

@ -62,5 +62,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN v15.1.dev18 March 2025 MMGEN-WALLETCONV(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-WALLETCONV(1)
```

View file

@ -54,5 +54,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN v15.1.dev18 March 2025 MMGEN-WALLETGEN(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-WALLETGEN(1)
```

View file

@ -499,5 +499,5 @@
to delete your old hot wallets, make sure to do so securely using ‘shred’,
‘wipe’ or some other secure deletion utility.
MMGEN v15.1.dev18 March 2025 MMGEN-XMRWALLET(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-XMRWALLET(1)
```

View file

@ -1 +1 @@
15.1.dev55
15.1.dev56