diff --git a/Altcoin-and-Forkcoin-Support.md b/Altcoin-and-Forkcoin-Support.md
index 19df2b0..5fb9a06 100644
--- a/Altcoin-and-Forkcoin-Support.md
+++ b/Altcoin-and-Forkcoin-Support.md
@@ -1,67 +1,75 @@
## Table of Contents
-#### [Full support for Ethereum (ETH), Ethereum Classic (ETC) and ERC20 Tokens](#a_eth)
-* [Install and run OpenEthereum](#a_oe)
-* [Install Ethereum dependencies](#a_ed)
+***NOTE: the following instructions apply to the current master branch. If
+you’re running the stable version of MMGen, check out the stable tag and
+refer to the version of this file located in `doc/wiki/using-mmgen`.***
+
+#### [Introduction](#a_g)
+
+#### [Ethereum (ETH), Ethereum Classic (ETC) and ERC20 Tokens](#a_eth)
+* [Install the Ethereum dependencies](#a_ed)
+* [Install and run Geth or OpenEthereum](#a_oe)
* [Transacting and other basic operations](#a_tx)
* [Creating and deploying ERC20 tokens](#a_dt)
-#### [Full support for Bitcoin Cash Node (BCH) and Litecoin](#a_bch)
+#### [Bitcoin Cash Node (BCH) and Litecoin (LTC)](#a_bch)
+
+#### [Monero (XMR)](#a_xmr)
#### [Key/address generation for Zcash (ZEC)](#a_zec)
-#### [Key/address generation and wallet creation/syncing for Monero (XMR)](#a_xmr)
+#### [Key/address generation for 144 Bitcoin-derived altcoins](#a_kg)
-#### [Key/address generation support for 144 Bitcoin-derived altcoins](#a_kg)
+### Introduction
-### Full support for Ethereum (ETH), Ethereum Classic (ETC) and ERC20 Tokens
+Depending on your setup, the instructions on this page may apply to your
+offline machine, your online machine, or both. If you’re confused as to
+which, please familiarize yourself with the basics of MMGen by reading the
+[**Getting Started**][gs] guide.
-Ethereum, Ethereum Classic and ERC20 tokens are fully supported by MMGen, on the
-same level as Bitcoin. In addition, ERC20 token creation and deployment are
-supported via the `create-token.py` script.
+### Ethereum (ETH), Ethereum Classic (ETC) and ERC20 Tokens
-#### Install and run OpenEthereum
+MMGen supports all operations for Ethereum, Ethereum Classic and ERC20 tokens.
+In addition, ERC20 token creation and deployment are supported via the
+`create-token.py` script.
-MMGen uses OpenEthereum to communicate with the Ethereum blockchain. For
-information on installing OpenEthereum on your system, visit the OpenEthereum
-[wiki][ow] or [Git repository][og]. OpenEthereum is not used for transaction
-signing, so you needn’t install it on your offline machine.
+#### Install the Ethereum dependencies
-OpenEthereum has dropped support for Ethereum Classic, so MMGen now supports
-transacting this coin via the legacy [Parity][pd] daemon. Invoke parity with
-`--chain=classic --ports-shift=100`. Other command-line options are the same
-as for OpenEthereum.
+From the MMGen repository root, type:
-If you’re running your daemon and MMGen on different machines, add the
+ $ pip3 install --no-deps --user -r eth-requirements.txt
+
+#### Install and run Geth or OpenEthereum
+
+MMGen can use either Go-Ethereum (Geth) or OpenEthereum to communicate with
+the Ethereum network. For information on installing Geth or OE on your
+system, visit the the Geth [Github repo][ge], or the OpenEthereum [wiki][ow]
+or [Github repo][og]. The daemons are not used for transaction signing, so
+you needn’t install them on your offline machine.
+
+For Geth, the following command-line options are required:
+
+ --http --http.api=eth,web3,txpool --http.port=8745
+
+Geth and OE have dropped support for Ethereum Classic, but MMGen supports
+transacting ETC via the legacy [Parity][pd] daemon. Invoke Parity with
+`--chain=classic --jsonrpc-port=8645`. Other command-line options are the
+same as for OpenEthereum.
+
+If you’re running OE or Parity on a different machine from MMGen, add the
following options to the daemon command line:
- --jsonrpc-hosts=all --jsonrpc-interface=
+ --jsonrpc-hosts=all --jsonrpc-interface=
-To run the daemon offline, use `--mode=offline`, otherwise `--mode=active`.
+To run OE or Parity offline, use `--mode=offline`, otherwise `--mode=active`.
MMGen can also be used with Parity’s light client mode, which queries other
nodes on the network for blockchain data. 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. Consult `openethereum --help` or
-`parity --help` for the full list.
-
-#### Install Ethereum dependencies
-
-Ensure that Python version 3.6 or above is installed on your system:
-
- $ python3 --version
-
-If the version is below 3.6.0, then you must upgrade the Python interpreter and
-Python dependencies listed in the [Install wiki][iw] before proceeding. Ubuntu
-users can do this by adding the Bionic repository to 'sources.list' and
-reinstalling the relevant packages with '-t bionic'
-
-Install the Ethereum-specific Python dependencies. The `--no-deps` option
-will prevent pip from installing a lot of unneeded stuff:
-
- $ sudo -H pip3 install --no-deps py_ecc==1.6.0 mypy_extensions==0.4.1
+You may require other options as well. Invoke your daemon with the `--help`
+switch for more complete information.
#### Transacting and other basic operations
@@ -84,8 +92,8 @@ Basic operations with ETH, ETC and ERC20 tokens work as described in the
##### Transacting example:
-*Note: All addresses and filenames in the examples to follow are bogus. You
-must replace them with real ones.*
+*Note: All addresses and filenames in the examples to follow are bogus and
+must be replaced with real ones.*
Generate some ETH addresses with your default wallet:
@@ -127,44 +135,23 @@ To transact ETH instead of EOS, omit the `--token` and `--token-addr` arguments.
##### Install the Solidity compiler
-To deploy Ethereum contracts with MMGen, you need between **v0.5.1** and
-**v0.5.3** of the the Solidity compiler (`solc`) installed on your system. The
-best way to ensure you have the correct version is to compile it from source.
-Alternatively, on Ubuntu 18.04 systems a binary distribution is also available.
-Instructions for installing it are provided below.
-
-##### *To compile solc from source:*
+To deploy Ethereum contracts with MMGen, you need version **0.8.7** of the
+Solidity compiler (`solc`) installed on your system. Although binary builds
+may be available for some distributions, the best way to ensure you have the
+correct version is to compile it from source.
Clone the repository and build:
$ git clone --recursive https://github.com/ethereum/solidity.git
$ cd solidity
- $ git checkout v0.5.1 # or v0.5.3, if not Raspbian Stretch
- $ ./scripts/install_deps.sh # Raspbian Stretch: add `DISTRO='Debian'` after line 55
+ $ git checkout v0.8.7
+ $ ./scripts/install_deps.sh
$ mkdir build
$ cd build
$ cmake -DUSE_CVC4=OFF -DUSE_Z3=OFF ..
- $ make solc
+ $ make -j4 solc
$ sudo install -v --strip solc/solc /usr/local/bin
-##### *To install solc from binary distribution (Ubuntu 18.04):*
-
-First add the following line to your /etc/apt/sources.list:
-
- deb http://ppa.launchpad.net/ethereum/ethereum/ubuntu bionic main
-
-Now obtain the Ethereum PPA key `2A518C819BE37D2C2031944D1C52189C923F6CA9`
-from a PGP keyserver using your method of choice. Save the key to file, and
-then add it to your APT keyring as follows:
-
- $ sudo apt-key add
-
-Now you can proceed with the install:
-
- $ sudo apt-get update
- $ sudo apt-get install solc
- $ solc --version # make sure the version is correct!
-
##### Create and deploy a token
*Note: All addresses and filenames in the examples to follow are bogus. You
@@ -195,10 +182,10 @@ View your MFT tracking wallet:
$ mmgen-tool --coin=eth --token=mft twview
-Other token parameters can also be customized. Type `scripts/create-token.py --help`
+Other token parameters can be customized too. Type `scripts/create-token.py --help`
for details.
-### Full support for Bitcoin Cash Node (BCH) and Litecoin
+### Bitcoin Cash Node (BCH) and Litecoin (LTC)
Bitcoin Cash Node (BCH) and Litecoin are fully supported by MMGen, on the same
level as Bitcoin.
@@ -214,6 +201,50 @@ MMGen requires that the bitcoin-bchn daemon be listening on non-standard
Then just add the `--coin=bch` or `--coin=ltc` option to all your MMGen
commands. It’s that simple!
+### Monero (XMR)
+
+MMGen’s Monero support includes automated wallet creation/syncing and
+transaction creation/relaying via the `mmgen-xmrwallet` command. Make sure
+that [Monerod][M] is installed and running and that `monero-wallet-rpc` is
+located in your executable path.
+
+*NOTE: by storing the Monero blockchain on a removable drive and installing
+Monerod on both your online and offline machines, it’s possible to perform
+wallet and transaction creation operations offline and thus avoid exposing
+private data on your online machine.*
+
+To generate five Monero key/address pairs from your default wallet, invoke the
+following, making sure to answer ‘y’ at the Encrypt prompt:
+
+ $ mmgen-keygen --coin=xmr 1-5
+
+In addition to spend and view keys, the resulting key/address file also
+includes a wallet password for each address (the double SHA256 hash of the
+spend key, truncated to 16 bytes).
+
+Now create a Monero wallet for each address in the file by invoking the
+following command:
+
+ $ mmgen-xmrwallet create *XMR*.akeys.mmenc
+
+Each wallet will be uniquely named using the address index and encrypted with
+the address’ unique wallet password. No user interaction is required during
+the creation process. By default, wallets are synced to the current block
+height, as they’re assumed to be empty, but this behavior can be overridden:
+
+ $ mmgen-xmrwallet --restore-height=123456 create *XMR*.akeys.mmenc
+
+To keep your wallets in sync as the Monero blockchain grows, use the `sync`
+subcommand:
+
+ $ mmgen-xmrwallet sync *XMR*.akeys.mmenc
+
+No user interaction is required here either, which is very helpful when you
+have multiple wallets requiring long sync times.
+
+`mmgen-xmrwallet` supports transacting via the `sweep` and `transfer`
+subcommands. Type `mmgen-xmrwallet --help` for details.
+
### Key/address generation for Zcash (ZEC)
MMGen’s enhanced support for Zcash includes generation of **z-addresses.**
@@ -233,56 +264,7 @@ To generate Zcash t-addresses, just omit the `--type` argument:
$ mmgen-keygen --coin=zec 1-10
-### Key/address generation and wallet creation/syncing for Monero (XMR)
-
-Generate ten Monero key/address pairs from your default wallet:
-
- $ mmgen-keygen --coin=xmr 1-10
-
-MMGen’s enhanced support for Monero includes automated Monero wallet creation
-and syncing tools.
-
-*Note that the use of these tools requires private data to be exposed on a
-network-connected machine in order to unlock the Monero wallets, which is a
-violation of MMGen’s security policy.*
-
-Install the following dependencies:
-
- $ sudo -H pip3 install pysha3
- $ sudo -H pip3 install ed25519ll # optional, but greatly speeds up address generation
-
-In addition to spend and view keys, Monero key/address files also include a
-wallet password for each address (the password is the double SHA256 of the spend
-key, truncated to 16 bytes). This allows you to generate a wallet from each
-key in the key/address file by running the following command:
-
- $ monero-wallet-cli --generate-from-spend-key MyMoneroWallet
-
-and pasting in the key and password data when prompted. [Monerod][M] must be
-installed and running and `monero-wallet-cli` be located in your executable
-path. Launch monerod with the `--bg-mining-enable` switch.
-
-To save your time and labor, the `mmgen-tool` utility includes a command that
-completely automates this process:
-
- $ mmgen-tool keyaddrlist2monerowallets *XMR*.akeys.mmenc
-
-This will generate a uniquely-named Monero wallet for each key/address pair in
-the key/address file and encrypt it with its respective password. No user
-interaction is required. By default, wallets are synced to the current block
-height, as they’re assumed to be empty, but this behavior can be overridden:
-
- $ mmgen-tool keyaddrlist2monerowallets *XMR*.akeys.mmenc blockheight=123456
-
-To keep your wallets in sync as the Monero blockchain grows, `mmgen-tool`
-includes another utility:
-
- $ mmgen-tool syncmonerowallets *XMR*.akeys.mmenc
-
-This command also requires no user interaction, a very handy feature when you
-have a large batch of wallets requiring long sync times.
-
-### Key/address generation support for 144 Bitcoin-derived altcoins
+### Key/address generation for 144 Bitcoin-derived altcoins
To generate key/address pairs for these coins, just specify the coin’s symbol
with the `--coin` argument:
@@ -327,8 +309,9 @@ the MMGen Project.
[M]: https://getmonero.org/downloads/#linux
[U]: https://github.com/mmgen/MMGenLive/blob/master/home.mmgen/bin/mmlive-daemon-upgrade
[X]: autosign-[MMGen-command-help]
+[gs]: Getting-Started-with-MMGen
[bo]: Getting-Started-with-MMGen#a_bo
[si]: Install-Bitcoind-from-Source-on-Debian-or-Ubuntu-Linux
[bi]: Install-Bitcoind#a_d
[p8]: Install-Bitcoind#a_r
-[iw]: Install-MMGen-on-Debian-or-Ubuntu-Linux
+[ge]: https://github.com/ethereum/go-ethereum
diff --git a/Install-MMGen-on-Debian-or-Ubuntu-Linux.md b/Install-MMGen-on-Debian-or-Ubuntu-Linux.md
index b6f8b54..fffcd67 100644
--- a/Install-MMGen-on-Debian-or-Ubuntu-Linux.md
+++ b/Install-MMGen-on-Debian-or-Ubuntu-Linux.md
@@ -1,32 +1,36 @@
-#### Perform the following steps on both your online and offline computers:
+***NOTE: the following instructions apply to the current master branch. If
+you’re running the stable version of MMGen, check out the stable tag and
+refer to the version of this file located in `doc/wiki/using-mmgen`.***
-Install required Debian/Ubuntu packages:
+*NOTE: the instructions on this page are for a Bitcoin-only setup. For
+altcoin support, additional installation steps are required. See
+[**Altcoin and Forkcoin Support**][af] for more information.*
- $ sudo apt-get install autoconf git libgmp-dev libssl-dev libpcre3-dev libtool wipe curl
- $ sudo apt-get install python3-dev python3-ecdsa python3-pexpect python3-setuptools python3-cryptography python3-nacl python3-pip python3-gmpy2 python3-sha3 python3-requests python3-aiohttp python3-socks
+### Perform the following steps on both your online and offline computers:
-Using the [pip3][P] installer, install the scrypt Python package:
+For computers with no Internet connection, see **Note for offline machines** below.
- $ sudo -H pip3 install scrypt
+#### Install required packages:
-Install the secp256k1 library:
+##### Debian/Ubuntu:
- $ git clone https://github.com/bitcoin-core/secp256k1.git
- $ cd secp256k1
- $ ./autogen.sh
- $ ./configure
- $ make
- $ sudo make install
- $ sudo ldconfig
- $ cd ..
+ $ sudo apt-get install git gcc libtool make autoconf libgmp-dev libssl-dev libpcre3-dev libmpfr-dev libmpc-dev python3-dev python3-pip
-Install MMGen:
+##### Arch Linux:
+
+ $ sudo pacman -S git gcc libtool make autoconf automake autogen pcre python-pip
+
+#### Upgrade the build tools:
+
+ $ pip3 install --user --upgrade pip setuptools build wheel
+
+#### Install MMGen:
$ git clone https://github.com/mmgen/mmgen.git
$ cd mmgen
$ git checkout stable_linux # see 'Note' below
- $ ./setup.py build
- $ sudo ./setup.py install # see 'Testing Note' below
+ $ python3 -m build --no-isolation
+ $ pip3 install --user --upgrade dist/*.whl # see 'Testing Note' below
$ cd ..
**Note:** if you want to use features that have appeared since the latest
@@ -37,35 +41,44 @@ security vulnerabilities are more likely to be present in new code than in a
stable release. In addition, new code may require dependencies or installation
steps not yet covered in the documentation.
-**Testing Note:** MMGen may be tested in place prior to installation. Refer to
-the [Test Suite][ts] wiki page for details.
-
Install your coin daemon(s). To install prebuilt binaries, go [here][01]. To
install from source, go [here][02].
-#### *Note for offline machines:*
+**Testing Note:** MMGen may be tested in place prior to installation. Refer to
+the [Test Suite][ts] wiki page for details.
-> Your offline machine must be connected to the Internet to retrieve and install
-> the above packages as described above. This is normally not a problem, as you
-> can simply take the machine offline permanently after the install is done,
-> preferably removing or disabling its network interfaces.
+##### Note for offline machines:
-> However, if your machine is already offline and you wish to leave it that way,
-> or if it lacks a network interface entirely, then you’ll need to take roughly
-> the following steps:
+The computer you’ve designated for offline use must be connected to the
+Internet to retrieve and install the above packages as described above. This
+is normally not a problem, as you can simply take it offline permanently after
+the install is done, preferably removing or disabling its network interfaces.
->> If your offline and offline machines have the same architecture, then you can
->> download the Debian/Ubuntu packages and their dependencies on your online
->> machine using `apt-get download`. Otherwise, you must retrieve the packages
->> manually from `packages.debian.org` or `packages.ubuntu.com`.
->>
->> Download any required Python packages using `pip3 download`.
->>
->> Transfer the downloaded files and cloned Git repositories to your offline
->> computer using a USB stick or other removable medium. Install the
->> Debian/Ubuntu packages with `sudo dpkg -i` and the Python packages with `pip3
->> install`. Install MMGen and the secp256k1 library from the copied Git
->> repositories as described above.
+However, if your machine is already offline and you wish to leave it that way,
+or if it lacks a network interface entirely, then you’ll need to take roughly
+the following steps:
+
+> If your offline and offline computers have the same architecture, then
+> download the Debian/Ubuntu packages and their dependencies on the online
+> one using `apt-get download`. Otherwise, retrieve the packages manually
+> from `packages.debian.org` or `packages.ubuntu.com`.
+>
+> Download any required Python packages using `pip3 download`, or manually
+> from [pypi.org][pi] if your online and offline computers have different
+> architecture.
+>
+> Transfer the downloaded files and cloned Git repositories to your offline
+> computer using a USB stick or other removable medium. Install the
+> Debian/Ubuntu packages with `sudo dpkg -i` and the Python packages with `pip3
+> install --user`.
+>
+> Clone the [secp256k1][ec] repository and copy it to `~/.cache` directory on
+> the offline machine (or copy it from your online machine’s `~/.cache`).
+> Copy the MMGen repository to the offline machine and install MMGen as
+> described above. If your online and offline machines have different
+> architecture, then make sure to clean up any build/dist files in the
+> repositories before installing (in `secp256k1` this is accomplished by `make
+> clean`).
Congratulations, your installation is now complete! You can now proceed to
[**Getting Started with MMGen**][gs].
@@ -74,5 +87,6 @@ Congratulations, your installation is now complete! You can now proceed to
[02]: Install-Bitcoind-from-Source-on-Debian-or-Ubuntu-Linux
[ts]: Test-Suite
[gs]: Getting-Started-with-MMGen
-[03]: https://pypi.python.org/packages/source/p/pexpect/pexpect-3.1.tar.gz
-[P]: https://pypi.org/project/pip
+[pi]: https://pypi.org
+[af]: Altcoin-and-Forkcoin-Support
+[ec]: https://github.com/bitcoin-core/secp256k1.git
diff --git a/Install-MMGen-on-Microsoft-Windows.md b/Install-MMGen-on-Microsoft-Windows.md
index f6de9ba..12113bc 100644
--- a/Install-MMGen-on-Microsoft-Windows.md
+++ b/Install-MMGen-on-Microsoft-Windows.md
@@ -25,8 +25,8 @@ against the possibility of private data leakage.
With some extra steps, it’s possible to perform the installation on a machine
that’s *already* offline. These steps will be additionally outlined in
-sections entitled “Offline users”. When doing an online install you may skip
-over these sections.
+sections entitled **Offline install.** When doing an online install you may
+skip over these sections.
### 1. Install MSYS2
@@ -61,22 +61,21 @@ will produce a listing of the same directory.
#### Online users:
-> Optionally download and edit your mirror lists as described in **Offline
-> users** below.
+> Optionally edit your mirror lists as described in **Offline install** below.
> Update the package database and core system packages:
$ pacman -Syu
-> Exit and restart the terminal. If you’re using custom mirror lists, they were
-> overwritten by the update operation, so you must restore them from your
-> modified versions.
+> Exit and restart the terminal. If you’re using modified mirror lists, they
+> may have been overwritten by the update operation, in which case you should
+> restore them from your modified versions.
-> Now complete updating the packages:
+> Now complete upgrading the system:
$ pacman -Su
-#### Offline users:
+#### Offline install:
> You must now download the required database and package files from the
> Internet on your online computer and copy them to your offline box. A USB
@@ -97,53 +96,50 @@ will produce a listing of the same directory.
$ ls /var/lib/pacman/sync
-> Download up-to-date versions of these files from the MSYS2 project site:
+> Download up-to-date versions of these files from a fast MSYS2 mirror:
->>
->>
->>
->>
->>
->>
->>
->>
->>
->>
+>>
+>>
+>>
+>>
+>>
+>>
+>>
+>>
+>>
+>>
-> Copy the files to your offline machine as you did with the mirror files, replacing
-> the originals at `C:\msys64\var\lib\pacman\sync`.
+> Copy the files to your offline machine, replacing the originals at
+> `C:\msys64\var\lib\pacman\sync`.
> Now issue the following command:
$ pacman -Sup > urls.txt
-> This command may cause your MSYS terminal window to close. If so, simply
+> This command may cause your MSYS terminal window to close. If so, just
> reopen another one.
> The command's output is now saved in the file `urls.txt` (this redirection
> trick using '>' works for most shell commands, by the way). Copy `urls.txt`
-> to your online machine and download the URLs listed in it. Transfer the
-> downloaded files to your offline machine, copying them to the package cache
-> directory `C:\msys64\var\cache\pacman\pkg`.
+> to your online machine and download the URLs listed in it.
-> Now issue the following command to perform the initial upgrade:
-
- $ pacman -Su
-
-> When the process is finished, close your terminal window as requested and
-> reopen another one. If any mirror lists have have been added by the upgrade
-> operation, you may wish to edit them as you did above.
-
-> Now reissue the `pacman -Sup` command, which will generate a much longer list
-> of URLs this time. Download the listed files on your online machine. Create
-> a new folder on your offline machine:
+> Create a new folder on your offline machine:
$ mkdir packages1
-> Copy the downloaded package files to this folder and execute the following
-> command to install them:
+Transfer the downloaded package files to the offline machine and place them in
+this folder.
- $ (cd packages1; pacman -U *)
+> Now issue the following command to install the packages:
+
+ $ pacman -U packages1/*
+
+> When the process is finished, close your terminal window and reopen another
+> one.
+
+> Now reissue the `pacman -Sup` command, which will generate a much longer list
+> of URLs this time. Repeat the same download/copy/install procedure with the
+> new URLs, only using a new `packages2` directory instead of `packages1`.
> Your system upgrade is now complete.
@@ -152,30 +148,34 @@ will produce a listing of the same directory.
Now that your system’s fully up to date, you’re ready to install the packages
specifically required by MMGen.
-#### Offline users:
+#### Offline install:
-> The command `pacman -S ` installs the requested MSYS2 packages,
-> while `pacman -Sp ` prints a list of download URLs for the packages
-> and their dependencies. So before running the command shown below, you’ll
-> first need to issue it with `-Sp` instead of `-S` to produce a URL list.
-> Download these URLs on your online machine and copy and install the
-> downloaded files to the your offline machine just as you did in the previous
-> step, substituting `packages2` for `packages1` in both commands.
+> As you’ve probably noticed by now, the command `pacman -S `
+> installs MSYS2 packages and their dependencies, while `pacman -Sp
+> ` prints a list of download URLs for the same packages and
+> dependencies. So before running the command shown below, you must first
+> issue it with `-Sp` instead of `-S` to produce a URL list. Then repeat the
+> above download/copy/install steps once again with the new URLs, replacing
+> `packages2` with `packages3`.
-Install the packages and their dependencies:
+Install the MMGen requirements and their dependencies:
$ pacman -S tar git vim autoconf automake-wrapper autogen \
mingw64/mingw-w64-x86_64-libtool \
- mingw64/mingw-w64-x86_64-pcre \
+ mingw64/mingw-w64-x86_64-gcc \
mingw64/mingw-w64-x86_64-make \
- mingw64/mingw-w64-x86_64-python3-cryptography \
- mingw64/mingw-w64-x86_64-python3-six \
- mingw64/mingw-w64-x86_64-python3-pexpect \
- mingw64/mingw-w64-x86_64-python3-gmpy2 \
+ mingw64/mingw-w64-x86_64-pcre \
mingw64/mingw-w64-x86_64-libsodium \
- mingw64/mingw-w64-x86_64-python3-pynacl \
- mingw64/mingw-w64-x86_64-python3-pip \
- mingw64/mingw-w64-x86_64-gcc
+ mingw64/mingw-w64-x86_64-python-build \
+ mingw64/mingw-w64-x86_64-python-wheel \
+ mingw64/mingw-w64-x86_64-python-cryptography \
+ mingw64/mingw-w64-x86_64-python-six \
+ mingw64/mingw-w64-x86_64-python-pexpect \
+ mingw64/mingw-w64-x86_64-python-gmpy2 \
+ mingw64/mingw-w64-x86_64-python-pynacl \
+ mingw64/mingw-w64-x86_64-python-pip \
+ mingw64/mingw-w64-x86_64-python-pysocks \
+ mingw64/mingw-w64-x86_64-python-requests
### 5. Set up your environment
diff --git a/MMGen-Quick-Start-with-Regtest-Mode.md b/MMGen-Quick-Start-with-Regtest-Mode.md
index 696ef4f..8a2b64f 100644
--- a/MMGen-Quick-Start-with-Regtest-Mode.md
+++ b/MMGen-Quick-Start-with-Regtest-Mode.md
@@ -14,6 +14,7 @@ This tutorial provides a quick, hands-on introduction.
1. Initialize MMGen regtest mode and start the regtest daemon:
$ mmgen-regtest setup
+ $ mmgen-regtest start
2. Generate Bob’s MMGen wallet:
diff --git a/Test-Suite.md b/Test-Suite.md
index 84f46c9..19db654 100644
--- a/Test-Suite.md
+++ b/Test-Suite.md
@@ -16,6 +16,22 @@ platforms may be much slower.
## Quick start
+### Container setup (if applicable)
+
+The test suite requires the `/dev/loopX` devices to exist and be enabled. If
+you’re running in an LXC container, note that only privileged containers allow
+loop devices. You may enable them in the config file as follows:
+
+ lxc.cgroup2.devices.allow = b 7:0 rwm # /dev/loop0
+ lxc.cgroup2.devices.allow = b 7:1 rwm # /dev/loop1
+ lxc.cgroup2.devices.allow = b 7:2 rwm # /dev/loop2
+
+Every time the container is started, the files must be created afresh:
+
+ # mknod /dev/loop0 b 7 0
+ # mknod /dev/loop1 b 7 1
+ # mknod /dev/loop2 b 7 2
+
### BTC-only testing
Clone the Bitcoin Core repo somewhere on your system:
@@ -24,16 +40,16 @@ Clone the Bitcoin Core repo somewhere on your system:
Install the Bitcoin Core daemon [(source)][sd] [(binaries)][bd].
-Point the test suite to your copy of the Bitcoin Core repo:
+Point the test suite to your copy of the Bitcoin Core repo:
$ export CORE_REPO_ROOT=/path/to/bitcoin/core/repo
CD to the MMGen repository root and build without installing:
$ cd path/to/mmgen/repo
- $ python3 setup.py build
+ $ python3 setup.py build_ext --inplace
-Run the test suite, skipping altcoin tests:
+Run the test suite in fast mode, skipping altcoin tests:
$ test/test-release.sh -F noalt
@@ -42,8 +58,9 @@ Run the test suite, skipping altcoin tests:
Make sure the [Bitcoin Cash Node][cnd], [Litecoin][ld] and [Monero][md]
daemons are installed on your system.
-Install [OpenEthereum, Parity, the Ethereum dependencies][oe] and the
-[Solidity compiler][sc] as described on the Altcoin-and-Forkcoin-Support page.
+Install [OpenEthereum, Parity, Geth, the Ethereum dependencies][oe] and
+optionally the [Solidity compiler][sc] as described on the
+Altcoin-and-Forkcoin-Support page.
In addition, you must install the following helper programs and libraries (MSYS2
users can omit MoneroPy and Zcash-Mini):
@@ -75,8 +92,10 @@ users can omit MoneroPy and Zcash-Mini):
$ sudo apt-get install golang # skip this if Go is already installed
$ git clone https://github.com/FiloSottile/zcash-mini
$ cd zcash-mini
- $ make
- $ sudo install --strip ./bin/zcash-mini /usr/local/bin
+ $ go mod init zcash-mini
+ $ go mod tidy
+ $ go build -mod=mod
+ $ sudo install --strip ./zcash-mini /usr/local/bin
$ cd ..
#### Ethkey
@@ -94,6 +113,16 @@ Alternatively, you may build ethkey from source:
$ sudo install --strip ./target/release/ethkey /usr/local/bin
$ cd ..
+#### Monero note
+
+The Monero test (`test/test-release xmr`) creates a private network and mines
+coins, so is therefore non-deterministic and prone to random failures. If you
+experience one, just restart the test. To test relaying of transactions via
+SOCKS proxy, an SSH tunnel to `localhost` will be set up, so ensure that your
+SSH daemon is configured with the appropriate permissions.
+
+### Run the tests
+
Now you can run the test suite for all coins:
$ test/test-release.sh -F
@@ -111,7 +140,7 @@ arguments required by the tests are described in detail on their help screens.
High-level testing of the MMGen system is performed by `test/test.py`, which
uses the `pexpect` library to simulate interactive operation of MMGen user
-commands. Launching `test/test.py` with the `-e` option will display the
+commands. Running `test/test.py` with the `-e` option will display the
commands’ output on the screen as they’re being run.
| Test | What it tests |