update for v16.0.0

The MMGen Project 2025-09-17 09:13:30 +00:00
commit babfc01446
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
36 changed files with 1091 additions and 291 deletions

@ -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
[bi]: Install-Bitcoind#a_d
[p8]: Install-Bitcoind#a_r
[gh]: https://geth.ethereum.org
[ge]: https://github.com/ethereum/go-ethereum
[mx]: command-help-xmrwallet
[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

@ -48,8 +48,8 @@ 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>
@ -170,8 +170,8 @@ 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>
@ -326,7 +326,7 @@ 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 showempty=0
$ mmgen-tool listaddresses
MMGenID Address Comment Balance
89ABCDEF:S:1 36bNmyYISiptuvJG3X7MPwiiS4HYvD7ksE Donations 0.1
89ABCDEF:S:2 3AmkUxrfy5dMrfmeYwTxLxfIswUCcpeysc Storage 1 0.2
@ -453,7 +453,7 @@ Once the transaction is broadcast to the network and confirmed, your address
listing should look something like this:
```text
$ mmgen-tool listaddresses showempty=0
$ mmgen-tool listaddresses
MMGenID Address Comment Balance
89ABCDEF:S:1 36bNmyYISiptuvJG3X7MPwiiS4HYvD7ksE Donations 0.1
89ABCDEF:S:3 3HgYCsfqYzIg7LVVfDTp7gYJocJEiDAy6N Storage 2 0.3
@ -1127,7 +1127,7 @@ $ python3 -m pip install user --upgrade dist/*.whl
[07]: command-help-autosign
[08]: Install-Bitcoind
[09]: Altcoin-and-Forkcoin-Support
[ax]: Altcoin-and-Forkcoin-Support#a_xmr
[x]: Altcoin-and-Forkcoin-Support#a_xmr
[cp]: ../commits/master
[mx]: command-help-xmrwallet
[li]: Install-MMGen-Wallet-on-Linux-or-macOS

@ -16,6 +16,8 @@ within the pager are performed via the `/` key.
> #### [Install on Linux or macOS](wiki/Install-MMGen-Wallet-on-Linux-or-macOS)
> #### [Install on Nix/NixOS](wiki/Install-MMGen-Wallet-on-Nix)
### Using MMGen Wallet

@ -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
[ec]: https://github.com/bitcoin-core/secp256k1.git
[vv]: https://docs.python.org/3/library/venv.html
[rs]: https://rustup.rs

@ -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

@ -0,0 +1,24 @@
Perform the following steps:
```text
$ git clone https://github.com/mmgen/mmgen-wallet.git
$ cd mmgen-wallet
$ mkdir -p ~/.mmgen
$ cp nix/user-packages.nix ~/.mmgen
```
For altcoin support, edit `~/.mmgen/user-packages.nix` to taste, uncommenting
the relevant lines for whatever support you require. For a BTC-only setup,
you can leave the file untouched.
Build required derivations and enter the custom Nix shell environment:
```text
$ nix-shell nix # for full isolation, add the ‘--pure’ option
```
Within nix-shell you may now test and use MMGen Wallet as with any normal
installation.
Refer to `nix/README` in the MMGen Wallet repo for more information, including
a speedup tip and instructions for installation on NixOS.

@ -1,6 +1,7 @@
* [mmgen-addrgen](command-help-addrgen)
* [mmgen-addrimport](command-help-addrimport)
* [mmgen-autosign](command-help-autosign)
* [mmgen-cli](command-help-cli)
* [mmgen-keygen](command-help-keygen)
* [mmgen-msg](command-help-msg)
* [mmgen-passchg](command-help-passchg)
@ -9,6 +10,8 @@
* [mmgen-seedjoin](command-help-seedjoin)
* [mmgen-seedsplit](command-help-seedsplit)
* [mmgen-subwalletgen](command-help-subwalletgen)
* [mmgen-swaptxcreate](command-help-swaptxcreate)
* [mmgen-swaptxdo](command-help-swaptxdo)
* [mmgen-tool](command-help-tool)
* [mmgen-tool (usage)][u]
* [mmgen-tool (detailed usage)][d]

@ -38,20 +38,8 @@ Every time the container is started, you may need to create the files afresh:
### BTC-only testing
Clone the Bitcoin Core repo somewhere on your system:
```text
$ git clone https://github.com/bitcoin/bitcoin
```
Install the Bitcoin Core daemon [(source)][sd] [(binaries)][bd].
Point the test suite to your copy of the Bitcoin Core repo:
```text
$ export CORE_REPO_ROOT=/path/to/bitcoin/core/repo
```
Install Pycoin:
```text
@ -63,13 +51,8 @@ $ python3 -m pip download pycoin # online
$ python3 -m pip install --no-build-isolation pycoin-*.tar.gz # offline
```
Install Pylint:
```text
$ python3 -m pip install pylint
```
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
@ -82,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
@ -95,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):
@ -132,26 +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 pycryptodomex ipaddress varint
$ python3 -m pip install pycryptodome ipaddress varint
$ python3 -m pip install --no-deps monero
```
#### Vanitygen PlusPlus (forked from Vanitygen Plus)
#### 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
```
#### 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
@ -169,20 +182,6 @@ $ sudo install --strip ./zcash-mini /usr/local/bin
$ cd ..
```
#### Ethkey
On Arch Linux and ArchLinuxArm systems, the ‘ethkey’ utility is included in the
OpenEthereum package:
```text
$ pacman -S openethereum
```
For 64-bit Windows, Linux and macOS systems, ‘ethkey’ can be found in the zip
archives distributed with [this release][oz].
For other systems (i.e. Debian/Ubuntu ARM), tests involving ‘ethkey’ are skipped.
#### Monero note
The Monero test (`test/test-release.sh xmr`) creates a private network and
@ -191,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
@ -233,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#a_ed
[rg]: Altcoin-and-Forkcoin-Support#a_geth
[sc]: Altcoin-and-Forkcoin-Support#a_dt
[xr]: Altcoin-and-Forkcoin-Support#a_xmr_req
[oz]: https://github.com/openethereum/openethereum/releases/tag/v3.1.0

@ -2,19 +2,26 @@ Homepage:
[Clearnet](https://mmgen-wallet.cc) |
[I2P](http://mmgen-wallet.i2p) |
[Onion](http://mmgen55rtcahqfp2hn3v7syqv2wqanks5oeezqg3ykwfkebmouzjxlad.onion)
Code repository:
Code Repository:
[Clearnet](https://mmgen.org/project/mmgen/mmgen-wallet) |
[I2P](http://mmgen-wallet.i2p/project/mmgen/mmgen-wallet) |
[Onion](http://mmgen55rtcahqfp2hn3v7syqv2wqanks5oeezqg3ykwfkebmouzjxlad.onion/project/mmgen/mmgen-wallet)
Code repository mirrors:
Code Repository Mirrors:
[Github](https://github.com/mmgen/mmgen-wallet) |
[Gitlab](https://gitlab.com/mmgen/mmgen-wallet) |
[Codeberg](https://codeberg.org/mmgen/mmgen-wallet)
[Keybase](https://keybase.io/mmgen) |
IRC:
**#mmgen-wallet** ([OFTC](https://oftc.net) | postman.i2p) &nbsp; | &nbsp;
E-Mail:
[Tuta](mailto:mmgen@tuta.io) |
[Proton](mailto:mmgen-wallet@proton.me)
Accounts:
[Twitter](https://twitter.com/TheMMGenProject) |
[Bitcointalk](https://bitcointalk.org/index.php?topic=567069.new#new) |
[Dread](http://dreadytofatroptsdj6io7l3xptbet6onoyno2yv7jicoxknyazubrad.onion/u/MMGen) |
[Reddit](https://www.reddit.com/user/mmgen-py) |
[Bitcointalk](https://bitcointalk.org/index.php?topic=567069.new#new)
[PGP Signing Key](MMGen-Signing-Keys): 5C84 CB45 AEE2 250F 31A6 A570 3F8B 1861 E32B 7DA2
[Keybase](https://keybase.io/mmgen)
PGP Signing Key: [5C84 CB45 AEE2 250F 31A6 A570 3F8B 1861 E32B 7DA2][5]
Donate:
&nbsp;⊙&nbsp;BTC:&nbsp;*bc1qxmymxf8p5ckvlxkmkwgw8ap5t2xuaffmrpexap*
&nbsp;⊙&nbsp;BCH:&nbsp;*15TLdmi5NYLdqmtCqczUs5pBPkJDXRs83w*

@ -4,6 +4,7 @@
* [Install on Microsoft Windows][1]
* [Install on Linux or macOS][2]
* [Install on Nix/NixOS][n]
#### Using MMGen Wallet
@ -19,6 +20,7 @@
[1]: Install-MMGen-Wallet-on-Microsoft-Windows
[2]: Install-MMGen-Wallet-on-Linux-or-macOS
[n]: Install-MMGen-Wallet-on-Nix
[3]: Getting-Started-with-MMGen-Wallet
[4]: MMGen-Wallet-Quick-Start-with-Regtest-Mode
[5]: MMGen-Wallet-command-help

@ -4,7 +4,7 @@
USAGE: mmgen-addrgen [opts] [seed source] <index list or range(s)>
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long options (common options)
--longhelp Print help message for long (global) options
-c, --print-checksum Print address list checksum and exit
-d, --outdir d Output files to directory 'd' instead of working dir
-e, --echo-passphrase Echo passphrase or mnemonic to screen upon entry
@ -40,15 +40,6 @@
If available, the libsecp256k1 library will be used for address generation.
ADDRESS TYPES:
'L','legacy' - Legacy uncompressed address
'C','compressed' - Compressed P2PKH address
'S','segwit' - Segwit P2SH-P2WPKH address
'B','bech32' - Native Segwit (Bech32) address
'E','ethereum' - Ethereum address
'Z','zcash_z' - Zcash z-address
'M','monero' - Monero address
NOTES FOR ALL GENERATOR COMMANDS
@ -99,6 +90,21 @@
with brainwallets. For a brainwallet passphrase to generate the correct
seed, the same seed length and hash preset parameters must always be used.
ADDRESS TYPES:
Code Type Description
---- ---- -----------
‘L’ legacy - Legacy uncompressed address
‘C’ compressed - Compressed P2PKH address
‘S’ segwit - Segwit P2SH-P2WPKH address
‘B’ bech32 - Native Segwit (Bech32) address
‘X’ bech32x - Cross-chain Bech32 address
‘E’ ethereum - Ethereum address
‘Z’ zcash_z - Zcash z-address
‘M’ monero - Monero address
FMT CODES:
Format FileExt Valid codes
@ -115,5 +121,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN v15.0.0 September 2024 MMGEN-ADDRGEN(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-ADDRGEN(1)
```

@ -3,7 +3,7 @@
USAGE: mmgen-addrimport [opts] [MMGen address file]
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long options (common options)
--longhelp Print help message for long (global) options
-a, --address a Import the single coin address 'a'
-b, --batch Import all addresses in one RPC call
-l, --addrlist Address source is a flat list of non-MMGen coin addresses
@ -31,5 +31,5 @@
It’s recommended to use ‘--rpc-backend=aio’ with ‘--rescan’.
MMGEN v15.0.0 September 2024 MMGEN-ADDRIMPORT(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-ADDRIMPORT(1)
```

@ -3,9 +3,15 @@
USAGE: mmgen-autosign [opts] [operation]
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long options (common options)
--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'
@ -27,6 +33,8 @@
-v, --verbose Produce more verbose output
-w, --wallet-dir D Specify an alternate wallet dir
(default: '/dev/shm/autosign')
-W, --allow-non-wallet-swap Allow signing of swap transactions that send funds
to non-wallet addresses
-x, --xmrwallets L Range or list of wallets to be used for XMR autosigning
@ -125,5 +133,5 @@
Always remember to power off the signing machine when your signing session
is over.
MMGEN v15.0.0 September 2024 MMGEN-AUTOSIGN(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-AUTOSIGN(1)
```

35
command-help-cli.md Normal file

@ -0,0 +1,35 @@
```text
MMGEN-CLI: Communicate with a coin daemon via its JSON-RPC interface
USAGE: mmgen-cli [opts] <command> <command args>
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long (global) options
-a, --ascii-output Ensure that output is ASCII encoded
-w, --wallet NAME Use tracking wallet with name NAME
The utility accepts all MMGen global configuration options and sources the user
config file, allowing users to preconfigure hosts, ports, passwords, datadirs,
tracking wallets and so forth, thus saving a great deal of typing at the
command line. This behavior may be overridden with the --skip-cfg-file option.
Arguments are given in JSON format, with lowercase ‘true’, ‘false’ and ‘null’
for booleans and None, and double-quoted strings in dicts and lists.
EXAMPLES
$ mmgen-cli --wallet=wallet2 listreceivedbyaddress 0 true
$ mmgen-cli --coin=ltc --rpc-host=orion getblockcount
$ mmgen-cli --regtest=1 --wallet=bob getbalance
$ mmgen-cli --coin=eth eth_getBalance 0x00000000219ab540356cBB839Cbe05303d7705Fa latest
$ mmgen-cli createrawtransaction \
'[{"txid":"832f5aa9af55dc453314e26869c8f96db1f2a9acac9f23ae18d396903971e0c6","vout":0}]' \
'[{"1111111111111111111114oLvT2":0.001}]'
MMGEN-WALLET 16.0.0 September 2025 MMGEN-CLI(1)
```

@ -4,7 +4,7 @@
USAGE: mmgen-keygen [opts] [seed source] <index list or range(s)>
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long options (common options)
--longhelp Print help message for long (global) options
-A, --no-addresses Print only secret keys, no addresses
-c, --print-checksum Print address list checksum and exit
-d, --outdir d Output files to directory 'd' instead of working dir
@ -45,15 +45,6 @@
If available, the libsecp256k1 library will be used for address generation.
ADDRESS TYPES:
'L','legacy' - Legacy uncompressed address
'C','compressed' - Compressed P2PKH address
'S','segwit' - Segwit P2SH-P2WPKH address
'B','bech32' - Native Segwit (Bech32) address
'E','ethereum' - Ethereum address
'Z','zcash_z' - Zcash z-address
'M','monero' - Monero address
NOTES FOR ALL GENERATOR COMMANDS
@ -104,6 +95,21 @@
with brainwallets. For a brainwallet passphrase to generate the correct
seed, the same seed length and hash preset parameters must always be used.
ADDRESS TYPES:
Code Type Description
---- ---- -----------
‘L’ legacy - Legacy uncompressed address
‘C’ compressed - Compressed P2PKH address
‘S’ segwit - Segwit P2SH-P2WPKH address
‘B’ bech32 - Native Segwit (Bech32) address
‘X’ bech32x - Cross-chain Bech32 address
‘E’ ethereum - Ethereum address
‘Z’ zcash_z - Zcash z-address
‘M’ monero - Monero address
FMT CODES:
Format FileExt Valid codes
@ -120,5 +126,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN v15.0.0 September 2024 MMGEN-KEYGEN(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-KEYGEN(1)
```

@ -7,7 +7,7 @@
mmgen-msg [opts] export MESSAGE_FILE [MMGen ID]
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long options (common options)
--longhelp Print help message for long (global) options
-d, --outdir d Output file to directory 'd' instead of working dir
-t, --msghash-type T Specify the message hash type. Supported values:
'eth_sign' (ETH default), 'raw' (non-ETH default)
@ -30,22 +30,25 @@
The `create` operation takes one or more ADDRESS_SPEC arguments with the
following format:
SEED_ID:ADDR_TYPE:ADDR_IDX_SPEC
SEED_ID:ADDRTYPE_CODE:ADDR_IDX_SPEC
where ADDR_TYPE is an address type letter from the list below, and
ADDR_IDX_SPEC is a comma-separated list of address indexes or hyphen-
separated address index ranges.
where ADDRTYPE_CODE is a one-letter address type code from the list below, and
ADDR_IDX_SPEC is a comma-separated list of address indexes or hyphen-separated
address index ranges.
ADDRESS TYPES
ADDRESS TYPES:
'L','legacy' - Legacy uncompressed address
'C','compressed' - Compressed P2PKH address
'S','segwit' - Segwit P2SH-P2WPKH address
'B','bech32' - Native Segwit (Bech32) address
'E','ethereum' - Ethereum address
'Z','zcash_z' - Zcash z-address
'M','monero' - Monero address
Code Type Description
---- ---- -----------
‘L’ legacy - Legacy uncompressed address
‘C’ compressed - Compressed P2PKH address
‘S’ segwit - Segwit P2SH-P2WPKH address
‘B’ bech32 - Native Segwit (Bech32) address
‘X’ bech32x - Cross-chain Bech32 address
‘E’ ethereum - Ethereum address
‘Z’ zcash_z - Zcash z-address
‘M’ monero - Monero address
NOTES
@ -104,5 +107,5 @@
Verify and display the exported JSON signature data:
$ mmgen-msg verify signatures.json
MMGEN v15.0.0 September 2024 MMGEN-MSG(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-MSG(1)
```

@ -3,7 +3,7 @@
USAGE: mmgen-passchg [opts] [infile]
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long options (common options)
--longhelp Print help message for long (global) options
-d, --outdir d Output files to directory 'd' instead of working dir
-e, --echo-passphrase Echo passphrases and other user input to screen
-f, --force-update Force update of wallet even if nothing has changed
@ -36,6 +36,7 @@
trailing space are ignored. This permits reading passphrase or brainwallet
data from a multi-line file with free spacing and indentation.
FMT CODES:
Format FileExt Valid codes
@ -52,5 +53,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN v15.0.0 September 2024 MMGEN-PASSCHG(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-PASSCHG(1)
```

@ -4,7 +4,7 @@
USAGE: mmgen-passgen [opts] [seed source] <ID string> <index list or range(s)>
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long options (common options)
--longhelp Print help message for long (global) options
-d, --outdir d Output files to directory 'd' instead of working dir
-e, --echo-passphrase Echo passphrase or mnemonic to screen upon entry
-f, --passwd-fmt f Generate passwords of format 'f'. Default: b58.
@ -33,7 +33,7 @@
NOTES FOR THIS COMMAND
ID string must be a valid UTF-8 string not longer than 256 characters and
not containing the symbols ' ', ':', '/', '\'.
not containing the symbols ' ", ":", "/", "\'.
Password indexes are given as a comma-separated list and/or hyphen-separated
range(s).
@ -84,6 +84,7 @@
with brainwallets. For a brainwallet passphrase to generate the correct
seed, the same seed length and hash preset parameters must always be used.
FMT CODES:
Format FileExt Valid codes
@ -100,5 +101,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN v15.0.0 September 2024 MMGEN-PASSGEN(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-PASSGEN(1)
```

@ -3,7 +3,7 @@
USAGE: mmgen-regtest [opts] <command>
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long options (common options)
--longhelp Print help message for long (global) options
-b, --bdb-wallet Create and use a legacy Berkeley DB coin daemon wallet
-e, --empty Don't fund Bob and Alice's wallets on setup
-n, --setup-no-stop-daemon Don't stop daemon after setup is finished
@ -25,5 +25,5 @@
wallet_cli - execute a wallet RPC call with supplied arguments (wallet
is first argument)
MMGEN v15.0.0 September 2024 MMGEN-REGTEST(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-REGTEST(1)
```

@ -4,7 +4,7 @@
USAGE: mmgen-seedjoin [options] share1 share2 [...shareN]
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long options (common options)
--longhelp Print help message for long (global) options
-d, --outdir d Output file to directory 'd' instead of working dir
-e, --echo-passphrase Echo passphrases and other user input to screen
-i, --id-str s ID String of split (required for master share join only)
@ -45,6 +45,7 @@
trailing space are ignored. This permits reading passphrase or brainwallet
data from a multi-line file with free spacing and indentation.
FMT CODES:
Format FileExt Valid codes
@ -61,5 +62,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN v15.0.0 September 2024 MMGEN-SEEDJOIN(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-SEEDJOIN(1)
```

@ -3,7 +3,7 @@
USAGE: mmgen-seedsplit [opts] [infile] [<Split ID String>:]<index>:<share count>
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long options (common options)
--longhelp Print help message for long (global) options
-d, --outdir d Output files to directory 'd' instead of working dir
-e, --echo-passphrase Echo passphrases and other user input to screen
-i, --in-fmt f Input from wallet format 'f' (see FMT CODES below)
@ -127,6 +127,7 @@
with brainwallets. For a brainwallet passphrase to generate the correct
seed, the same seed length and hash preset parameters must always be used.
FMT CODES:
Format FileExt Valid codes
@ -143,5 +144,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN v15.0.0 September 2024 MMGEN-SEEDSPLIT(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-SEEDSPLIT(1)
```

@ -3,7 +3,7 @@
USAGE: mmgen-subwalletgen [opts] [infile] <Subseed Index>
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long options (common options)
--longhelp Print help message for long (global) options
-d, --outdir d Output files to directory 'd' instead of working dir
-e, --echo-passphrase Echo passphrases and other user input to screen
-i, --in-fmt f Input from wallet format 'f' (see FMT CODES below)
@ -80,6 +80,7 @@
with brainwallets. For a brainwallet passphrase to generate the correct
seed, the same seed length and hash preset parameters must always be used.
FMT CODES:
Format FileExt Valid codes
@ -96,5 +97,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN v15.0.0 September 2024 MMGEN-SUBWALLETGEN(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-SUBWALLETGEN(1)
```

@ -0,0 +1,258 @@
```text
MMGEN-SWAPTXCREATE: Create a DEX swap transaction from one MMGen tracking wallet to another
USAGE: mmgen-swaptxcreate [opts] COIN1 [AMT CHG_ADDR] COIN2 [ADDR] [addr file ...]
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long (global) options
-a, --autosign Create a transaction for offline autosigning (see
‘mmgen-autosign’). The removable device is mounted and
unmounted automatically
-A, --fee-adjust f Adjust transaction fee by factor ‘f’ (see below)
-B, --no-blank Don't blank screen before displaying unspent outputs
-c, --comment-file f Source the transaction's comment from file 'f'
-C, --fee-estimate-confs c Desired number of confirmations for fee estimation
(default: 3)
-d, --outdir d Specify an alternate directory 'd' for output
-E, --fee-estimate-mode M Specify the network fee estimate mode. Choices:
'conservative','economical'. Default: 'conservative'
-f, --fee f Transaction fee, as a decimal BTC amount or as
satoshis per byte (an integer followed by ‘s’).
See FEE SPECIFICATION below. If omitted, fee will be
calculated using network fee estimation.
-g, --gas N Set the gas limit for Ethereum (see GAS LIMIT below)
-G, --router-gas N Set the gas limit for the Ethereum router contract
(integer). When unset, a hardcoded default will be
used. Applicable only for swaps from token assets.
-i, --info Display unspent outputs and exit
-I, --inputs i Specify transaction inputs (comma-separated list of
MMGen IDs or coin addresses). Note that ALL unspent
outputs associated with each address will be included.
-l, --trade-limit L Minimum swap amount, as either percentage or absolute
coin amount (see TRADE LIMIT below)
-L, --autochg-ignore-labels Ignore labels when autoselecting change addresses
-m, --minconf n Minimum number of confirmations required to spend
outputs (default: 1)
-q, --quiet Suppress warnings; overwrite files without prompting
-r, --stream-interval N Set block interval for streaming swap (default: 3)
-s, --swap-proto Swap protocol to use (Default: thorchain,
Choices: 'thorchain')
-S, --list-assets List available swap assets
-v, --verbose Produce more verbose output
-V, --vsize-adj f Adjust transaction's estimated vsize by factor 'f'
-x, --proxy P Fetch the swap quote 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
This script is similar in operation to ‘mmgen-txcreate’, only with additional
steps. Users are advised to first familiarize themselves with the use of that
script before attempting to perform a swap with this one.
The tracking wallets of both the send and receive coins must be available when
the script is invoked. If the two coin daemons are running on different hosts
than the script, or with non-standard ports, coin-specific RPC options may be
required (see EXAMPLES below).
The swap protocol’s quote server on the Internet must be reachable either
directly or via the SOCKS5 proxy specified with the --proxy option. To improve
privacy, it’s recommended to proxy requests to the quote server via Tor or
some other anonymity network.
The resulting transaction file is saved, signed, sent, and optionally bumped,
exactly the same way as one created with ‘mmgen-txcreate’. Autosign with
automount is likewise supported via the --autosign option.
The command line must contain at minimum a send coin (COIN1) and receive coin
(COIN2) symbol. Currently supported coins are BTC, LTC, BCH and ETH. All
other arguments are optional. If AMT is specified, the specified value of
send coin will be swapped and the rest returned to a change address in the
originating tracking wallet. Otherwise, the entire value of the interactively
selected inputs will be swapped.
By default, the change (if applicable) and destination addresses are chosen
automatically by finding the lowest-indexed unused addresses of the preferred
address types in the send and receive tracking wallets. For Bitcoin and
forks, types ‘B’, ‘S’ and ‘C’ (see ADDRESS TYPES below) are searched in that
order for unused addresses. Note that sending to an unused address may be
undesirable for Ethereum, where address (i.e. account) reuse is the norm. In
that case, the user should specify a destination address on the command line.
If the wallet contains eligible unused addresses with multiple Seed IDs, the
user will be presented with a list of the lowest-indexed addresses of
preferred type for each Seed ID and prompted to choose from among them.
Change and destination addresses may also be specified manually with the
CHG_ADDR and ADDR arguments. These may be given as full MMGen IDs or in the
form ADDRTYPE_CODE or SEED_ID:ADDRTYPE_CODE (see EXAMPLES below and the
‘mmgen-txcreate’ help screen for details). For Ethereum, the CHG_ADDR
argument is not supported.
While discouraged, sending change or swapping to non-wallet addresses is also
supported, in which case the signing script (‘mmgen-txsign’ or ‘mmgen-
autosign’, as applicable) must be invoked with the --allow-non-wallet-swap
option.
Rather than specifying a transaction fee on the command line, it’s advisable
to start with the fee suggested by the swap protocol quote server (the script
does this automatically) and then adjust the fee interactively if desired.
When choosing a fee, bear in mind that the longer the transaction remains
unconfirmed, the greater the risk that the vault address will expire, leading
to loss of funds. It’s therefore recommended to learn how to create, sign and
send replacement transactions with ‘mmgen-txbump’ before performing a swap
with this script. When bumping a stuck swap transaction, the safest option
is to create a replacement transaction with one output that returns funds back
to the originating tracking wallet, thus aborting the swap, rather than one
that merely increases the fee (see EXAMPLES below).
Before broadcasting the transaction, it’s a good idea to double-check the
vault address on a block explorer such as thorchain.net or runescan.io.
The MMGen Node Tools suite contains two useful tools to help with fine-tuning
transaction fees, ‘mmnode-feeview’ and ‘mmnode-blocks-info’, in addition to
‘mmnode-ticker’, which can be used to calculate the current cross-rate between
the asset pair of a swap, as well as the total receive value in terms of send
value.
TRADE LIMIT
A target value for the swap may be set, known as the “trade limit”. If
this target cannot be met, the network will refund the user’s coins, minus
transaction fees (note that the refund goes to the address associated with the
transaction’s first input, leading to coin reuse). Since under certain
circumstances large amounts of slippage can occur, resulting in significant
losses, setting a trade limit is highly recommended.
The target may be given as either an absolute coin amount or percentage value.
In the latter case, it’s interpreted as the percentage below the “expected
amount out” returned by the swap quote server. Zero or negative percentage
values are also accepted, but are likely to result in your coins being
refunded.
The trade limit is rounded to four digits of precision in order to reduce
transaction size.
ADDRESS TYPES:
Code Type Description
---- ---- -----------
‘L’ legacy - Legacy uncompressed address
‘C’ compressed - Compressed P2PKH address
‘S’ segwit - Segwit P2SH-P2WPKH address
‘B’ bech32 - Native Segwit (Bech32) address
‘X’ bech32x - Cross-chain Bech32 address
‘E’ ethereum - Ethereum address
‘Z’ zcash_z - Zcash z-address
‘M’ monero - Monero address
GAS LIMIT
This option specifies the maximum gas allowance for an Ethereum transaction.
It’s generally of interest only for token transactions or swap transactions
from token assets.
Parameter must be an integer or one of the special values ‘fallback’ (for a
locally computed sane default) or ‘auto’ (for gas estimate via an RPC call,
in the case of a token transaction, or locally computed default, in the case
of a standard transaction). The default is ‘auto’.
FEE SPECIFICATION
Transaction fees, both on the command line and at the interactive prompt, may
be specified as either absolute coin amounts, using a plain decimal number, or
as satoshis per byte, using an integer followed by ‘s’, for satoshi (for
Bitcoin, Litecoin and Bitcoin Cash), or gas price, using an integer followed
by ‘w’,‘K’,‘M’,‘G’,‘s’ or ‘f’, for wei, Kwei, Mwei, Gwei, szabo and finney,
respectively (for Ethereum)
EXAMPLES:
Display available swap assets:
$ mmgen-swaptxcreate -S
Create a BTC-to-LTC swap transaction, prompting the user for transaction
inputs. The full value of the inputs, minus miner fees, will be swapped
and sent to an unused address in the user’s LTC tracking wallet:
$ mmgen-swaptxcreate BTC LTC
Same as above, but swap 0.123 BTC, minus miner fees, and send the change to
an unused address in the BTC tracking wallet:
$ mmgen-swaptxcreate BTC 0.123 LTC
Same as above, but specify that the change address be a Segwit P2SH (‘S’)
address:
$ mmgen-swaptxcreate BTC 0.123 S LTC
Same as above, but additionally specify that the destination LTC address be
a compressed P2PKH (‘C’) address:
$ mmgen-swaptxcreate BTC 0.123 S LTC C
Same as above, but specify the BTC change address explicitly and the
destination LTC address by Seed ID and address type:
$ mmgen-swaptxcreate BTC 0.123 BEADCAFE:S:6 LTC BEADCAFE:C
Abort the above swap by creating a replacement transaction that returns the
funds to the originating tracking wallet (omit the transaction filename if
using --autosign):
$ mmgen-txbump BEADCAFE:S:6 [raw transaction file]
Swap 0.123 BTC to a non-wallet address (not recommended):
$ mmgen-swaptxcreate BTC 0.123 LTC ltc1qaq8t3pakcftpk095tnqfv5cmmczysls0xx9388
Create an LTC-to-BCH swap transaction, with the Litecoin daemon running on
host ‘orion’ and Bitcoin Cash Node daemon on host ‘gemini’ with non-standard
RPC port 8332. Communicate with the swap quote server via Tor.
$ mmgen-swaptxcreate --ltc-rpc-host=orion --bch-rpc-host=gemini --bch-rpc-port=8332 --proxy=localhost:9050 LTC BCH
After sending, check the status of the above swap’s LTC deposit transaction
(omit the transaction filename if using --autosign):
$ mmgen-txsend --ltc-rpc-host=orion --status [transaction file]
Check whether the funds have arrived in the BCH destination wallet:
$ mmgen-tool --coin=bch --bch-rpc-host=gemini twview minconf=0
Create a Tether-to-LTC swap transaction for autosigning, connecting to the
swap quote server via Tor:
$ mmgen-swaptxcreate --autosign --proxy=localhost:9050 ETH.USDT 1000 LTC
After signing, send the transaction via public Etherscan proxy over Tor:
$ mmgen-txsend --autosign --quiet --tx-proxy=etherscan --proxy=localhost:9050
After sending, check the transaction status:
$ mmgen-txsend --autosign --verbose --status
Create a Tether-to-DAI swap transaction, with explicit destination account:
$ mmgen-swaptxcreate ETH.USDT 1000 ETH.DAI E:01234ABC:3
Create a RUNE-to-BTC swap transaction, proxying requests to the remote
Thornode server via Tor:
$ mmgen-swaptxcreate --proxy=localhost:9050 RUNE 1000 BTC
Same as above, but proxy requests via the I2P router running on host gw1:
$ https_proxy=http://gw1:4444 mmgen-swaptxcreate --proxy=env RUNE 1000 BTC
MMGEN-WALLET 16.0.0 September 2025 MMGEN-SWAPTXCREATE(1)
```

320
command-help-swaptxdo.md Normal file

@ -0,0 +1,320 @@
```text
MMGEN-SWAPTXDO: Create, sign and send a DEX swap transaction from one MMGen tracking wallet to another
USAGE: mmgen-swaptxdo [opts] COIN1 [AMT CHG_ADDR] COIN2 [ADDR] [addr file ...] [seed source ...]
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long (global) options
-A, --fee-adjust f Adjust transaction fee by factor ‘f’ (see below)
-b, --brain-params l,p Use seed length 'l' and hash preset 'p' for
brainwallet input
-B, --no-blank Don't blank screen before displaying unspent outputs
-c, --comment-file f Source the transaction's comment from file 'f'
-C, --fee-estimate-confs c Desired number of confirmations for fee estimation
(default: 3)
-d, --outdir d Specify an alternate directory 'd' for output
-e, --echo-passphrase Print passphrase to screen when typing it
-E, --fee-estimate-mode M Specify the network fee estimate mode. Choices:
'conservative','economical'. Default: 'conservative'
-f, --fee f Transaction fee, as a decimal BTC amount or as
satoshis per byte (an integer followed by ‘s’).
See FEE SPECIFICATION below. If omitted, fee will be
calculated using network fee estimation.
-g, --gas N Set the gas limit for Ethereum (see GAS LIMIT below)
-G, --router-gas N Set the gas limit for the Ethereum router contract
(integer). When unset, a hardcoded default will be
used. Applicable only for swaps from token assets.
-H, --hidden-incog-input-params f,o Read hidden incognito data from file
'f' at offset 'o' (comma-separated)
-i, --in-fmt f Input is from wallet format 'f' (see FMT CODES below)
-I, --inputs i Specify transaction inputs (comma-separated list of
MMGen IDs or coin addresses). Note that ALL unspent
outputs associated with each address will be included.
-l, --seed-len l Specify wallet seed length of 'l' bits. This option
is required only for brainwallet and incognito inputs
with non-standard (< 256-bit) seed lengths.
-k, --keys-from-file f Provide additional keys for non-MMGen addresses
-K, --keygen-backend n Use backend 'n' for public key generation. Options
for BTC: 1:libsecp256k1 [default] 2:python-ecdsa
-l, --trade-limit L Minimum swap amount, as either percentage or absolute
coin amount (see TRADE LIMIT below)
-L, --autochg-ignore-labels Ignore labels when autoselecting change addresses
-m, --minconf n Minimum number of confirmations required to spend
outputs (default: 1)
-M, --mmgen-keys-from-file f Provide keys for MMGen addresses in a key-
address file (output of 'mmgen-keygen'). Permits
online signing without an MMGen seed source. The
key-address file is also used to verify MMGen-to-BTC
mappings, so the user should record its checksum.
-O, --old-incog-fmt Specify old-format incognito input
-p, --hash-preset p Use the scrypt hash parameters defined by preset 'p'
for password hashing (default: '3')
-P, --passwd-file f Get MMGen wallet passphrase from file 'f'
-q, --quiet Suppress warnings; overwrite files without prompting
-r, --stream-interval N Set block interval for streaming swap (default: 3)
-s, --swap-proto Swap protocol to use (Default: thorchain,
Choices: 'thorchain')
-T, --txhex-idx N Send only part ‘N’ of a multi-part transaction.
Indexing begins with one.
-u, --subseeds n The number of subseed pairs to scan for (default: 100,
maximum: 1000000). Only the default or first supplied
wallet is scanned for subseeds.
-v, --verbose Produce more verbose output
-V, --vsize-adj f Adjust transaction's estimated vsize by factor 'f'
-x, --proxy P Fetch the swap quote 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
-z, --show-hash-presets Show information on available hash presets
This script is similar in operation to ‘mmgen-txcreate’, only with additional
steps. Users are advised to first familiarize themselves with the use of that
script before attempting to perform a swap with this one.
The tracking wallets of both the send and receive coins must be available when
the script is invoked. If the two coin daemons are running on different hosts
than the script, or with non-standard ports, coin-specific RPC options may be
required (see EXAMPLES below).
The swap protocol’s quote server on the Internet must be reachable either
directly or via the SOCKS5 proxy specified with the --proxy option. To improve
privacy, it’s recommended to proxy requests to the quote server via Tor or
some other anonymity network.
The resulting transaction file is saved, signed, sent, and optionally bumped,
exactly the same way as one created with ‘mmgen-txcreate’. Autosign with
automount is likewise supported via the --autosign option.
The command line must contain at minimum a send coin (COIN1) and receive coin
(COIN2) symbol. Currently supported coins are BTC, LTC, BCH and ETH. All
other arguments are optional. If AMT is specified, the specified value of
send coin will be swapped and the rest returned to a change address in the
originating tracking wallet. Otherwise, the entire value of the interactively
selected inputs will be swapped.
By default, the change (if applicable) and destination addresses are chosen
automatically by finding the lowest-indexed unused addresses of the preferred
address types in the send and receive tracking wallets. For Bitcoin and
forks, types ‘B’, ‘S’ and ‘C’ (see ADDRESS TYPES below) are searched in that
order for unused addresses. Note that sending to an unused address may be
undesirable for Ethereum, where address (i.e. account) reuse is the norm. In
that case, the user should specify a destination address on the command line.
If the wallet contains eligible unused addresses with multiple Seed IDs, the
user will be presented with a list of the lowest-indexed addresses of
preferred type for each Seed ID and prompted to choose from among them.
Change and destination addresses may also be specified manually with the
CHG_ADDR and ADDR arguments. These may be given as full MMGen IDs or in the
form ADDRTYPE_CODE or SEED_ID:ADDRTYPE_CODE (see EXAMPLES below and the
‘mmgen-txcreate’ help screen for details). For Ethereum, the CHG_ADDR
argument is not supported.
While discouraged, sending change or swapping to non-wallet addresses is also
supported, in which case the signing script (‘mmgen-txsign’ or ‘mmgen-
autosign’, as applicable) must be invoked with the --allow-non-wallet-swap
option.
Rather than specifying a transaction fee on the command line, it’s advisable
to start with the fee suggested by the swap protocol quote server (the script
does this automatically) and then adjust the fee interactively if desired.
When choosing a fee, bear in mind that the longer the transaction remains
unconfirmed, the greater the risk that the vault address will expire, leading
to loss of funds. It’s therefore recommended to learn how to create, sign and
send replacement transactions with ‘mmgen-txbump’ before performing a swap
with this script. When bumping a stuck swap transaction, the safest option
is to create a replacement transaction with one output that returns funds back
to the originating tracking wallet, thus aborting the swap, rather than one
that merely increases the fee (see EXAMPLES below).
Before broadcasting the transaction, it’s a good idea to double-check the
vault address on a block explorer such as thorchain.net or runescan.io.
The MMGen Node Tools suite contains two useful tools to help with fine-tuning
transaction fees, ‘mmnode-feeview’ and ‘mmnode-blocks-info’, in addition to
‘mmnode-ticker’, which can be used to calculate the current cross-rate between
the asset pair of a swap, as well as the total receive value in terms of send
value.
TRADE LIMIT
A target value for the swap may be set, known as the “trade limit”. If
this target cannot be met, the network will refund the user’s coins, minus
transaction fees (note that the refund goes to the address associated with the
transaction’s first input, leading to coin reuse). Since under certain
circumstances large amounts of slippage can occur, resulting in significant
losses, setting a trade limit is highly recommended.
The target may be given as either an absolute coin amount or percentage value.
In the latter case, it’s interpreted as the percentage below the “expected
amount out” returned by the swap quote server. Zero or negative percentage
values are also accepted, but are likely to result in your coins being
refunded.
The trade limit is rounded to four digits of precision in order to reduce
transaction size.
ADDRESS TYPES:
Code Type Description
---- ---- -----------
‘L’ legacy - Legacy uncompressed address
‘C’ compressed - Compressed P2PKH address
‘S’ segwit - Segwit P2SH-P2WPKH address
‘B’ bech32 - Native Segwit (Bech32) address
‘X’ bech32x - Cross-chain Bech32 address
‘E’ ethereum - Ethereum address
‘Z’ zcash_z - Zcash z-address
‘M’ monero - Monero address
GAS LIMIT
This option specifies the maximum gas allowance for an Ethereum transaction.
It’s generally of interest only for token transactions or swap transactions
from token assets.
Parameter must be an integer or one of the special values ‘fallback’ (for a
locally computed sane default) or ‘auto’ (for gas estimate via an RPC call,
in the case of a token transaction, or locally computed default, in the case
of a standard transaction). The default is ‘auto’.
FEE SPECIFICATION
Transaction fees, both on the command line and at the interactive prompt, may
be specified as either absolute coin amounts, using a plain decimal number, or
as satoshis per byte, using an integer followed by ‘s’, for satoshi.
SIGNING NOTES
Transactions may contain both MMGen or non-MMGen input addresses.
To sign non-MMGen inputs, a coin daemon wallet dump or flat key list is used
as the key source (--keys-from-file option).
To sign MMGen inputs, key data is generated from a seed as with the
mmgen-addrgen and mmgen-keygen commands. Alternatively, a key-address file
may be used (--mmgen-keys-from-file option).
Multiple wallets or other seed files can be listed on the command line in
any order. If the seeds required to sign the transaction’s inputs are not
found in these files (or in the default wallet), the user will be prompted
for seed data interactively.
To prevent an attacker from crafting transactions with bogus MMGen-to-Bitcoin
address mappings, all outputs to MMGen addresses are verified with a seed
source. Therefore, seed files or a key-address file for all MMGen outputs
must also be supplied on the command line if the data can’t be found in the
default wallet.
Seed source files must have the canonical extensions listed in the 'FileExt'
column below:
FMT CODES:
Format FileExt Valid codes
------ ------- -----------
BIP39Mnemonic .bip39 bip39
Brainwallet .mmbrain mmbrain,brainwallet,brain,bw
DieRollWallet .b6d b6d,die,dieroll
IncogWallet .mmincog mmincog,incog,icg,i
IncogWalletHex .mmincox mmincox,incox,incog_hex,ix,xi
IncogWalletHidden None incog_hidden,hincog,ih,hi
MMGenHexSeedFile .mmhex seedhex,hexseed,mmhex
MMGenMnemonic .mmwords mmwords,words,mnemonic,mn,m
MMGenSeedFile .mmseed mmseed,seed,s
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
EXAMPLES:
Display available swap assets:
$ mmgen-swaptxdo -S
Create a BTC-to-LTC swap transaction, prompting the user for transaction
inputs. The full value of the inputs, minus miner fees, will be swapped
and sent to an unused address in the user’s LTC tracking wallet:
$ mmgen-swaptxdo BTC LTC
Same as above, but swap 0.123 BTC, minus miner fees, and send the change to
an unused address in the BTC tracking wallet:
$ mmgen-swaptxdo BTC 0.123 LTC
Same as above, but specify that the change address be a Segwit P2SH (‘S’)
address:
$ mmgen-swaptxdo BTC 0.123 S LTC
Same as above, but additionally specify that the destination LTC address be
a compressed P2PKH (‘C’) address:
$ mmgen-swaptxdo BTC 0.123 S LTC C
Same as above, but specify the BTC change address explicitly and the
destination LTC address by Seed ID and address type:
$ mmgen-swaptxdo BTC 0.123 BEADCAFE:S:6 LTC BEADCAFE:C
Abort the above swap by creating a replacement transaction that returns the
funds to the originating tracking wallet (omit the transaction filename if
using --autosign):
$ mmgen-txbump BEADCAFE:S:6 [raw transaction file]
Swap 0.123 BTC to a non-wallet address (not recommended):
$ mmgen-swaptxdo BTC 0.123 LTC ltc1qaq8t3pakcftpk095tnqfv5cmmczysls0xx9388
Create an LTC-to-BCH swap transaction, with the Litecoin daemon running on
host ‘orion’ and Bitcoin Cash Node daemon on host ‘gemini’ with non-standard
RPC port 8332. Communicate with the swap quote server via Tor.
$ mmgen-swaptxdo --ltc-rpc-host=orion --bch-rpc-host=gemini --bch-rpc-port=8332 --proxy=localhost:9050 LTC BCH
After sending, check the status of the above swap’s LTC deposit transaction
(omit the transaction filename if using --autosign):
$ mmgen-txsend --ltc-rpc-host=orion --status [transaction file]
Check whether the funds have arrived in the BCH destination wallet:
$ mmgen-tool --coin=bch --bch-rpc-host=gemini twview minconf=0
Create a Tether-to-LTC swap transaction for autosigning, connecting to the
swap quote server via Tor:
$ mmgen-swaptxdo --autosign --proxy=localhost:9050 ETH.USDT 1000 LTC
After signing, send the transaction via public Etherscan proxy over Tor:
$ mmgen-txsend --autosign --quiet --tx-proxy=etherscan --proxy=localhost:9050
After sending, check the transaction status:
$ mmgen-txsend --autosign --verbose --status
Create a Tether-to-DAI swap transaction, with explicit destination account:
$ mmgen-swaptxdo ETH.USDT 1000 ETH.DAI E:01234ABC:3
Create a RUNE-to-BTC swap transaction, proxying requests to the remote
Thornode server via Tor:
$ mmgen-swaptxdo --proxy=localhost:9050 RUNE 1000 BTC
Same as above, but proxy requests via the I2P router running on host gw1:
$ https_proxy=http://gw1:4444 mmgen-swaptxdo --proxy=env RUNE 1000 BTC
MMGEN-WALLET 16.0.0 September 2025 MMGEN-SWAPTXDO(1)
```

@ -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.0.0 September 2024 MMGEN-TOOL(DETAIL)(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-TOOL(DETAIL)(1)
```

@ -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.0.0 September 2024 MMGEN-TOOL(USAGE)(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-TOOL(USAGE)(1)
```

@ -4,7 +4,7 @@
OPTIONS:
-d, --outdir d Specify an alternate directory 'd' for output
-h, --help Print this help message
--longhelp Print help message for long options (common options)
--longhelp Print help message for long (global) options
-e, --echo-passphrase Echo passphrase or mnemonic to screen upon entry
-k, --use-internal-keccak-module Force use of the internal keccak module
-K, --keygen-backend n Use backend 'n' for public key generation. Options
@ -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.0.0 September 2024 MMGEN-TOOL(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-TOOL(1)
```

@ -1,11 +1,11 @@
```text
MMGEN-TXBUMP: Increase the fee on a replaceable (RBF) MMGen transaction,
creating a new transaction, and optionally sign and send the
new transaction
MMGEN-TXBUMP: Create, and optionally send and sign, a replacement transaction
on supporting networks
USAGE: mmgen-txbump [opts] [MMGen TX file] [seed source] ...
mmgen-txbump [opts] [ADDR,AMT ... | DATA_SPEC] ADDR [MMGen TX file] [seed source] ...
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long options (common options)
--longhelp Print help message for long (global) options
-a, --autosign Bump the most recent transaction created and sent with
the --autosign option. The removable device is mounted
and unmounted automatically. The transaction file
@ -19,7 +19,7 @@
-d, --outdir d Specify an alternate directory 'd' for output
-e, --echo-passphrase Print passphrase to screen when typing it
-f, --fee f Transaction fee, as a decimal BTC amount or as
satoshis per byte (an integer followed by 's').
satoshis per byte (an integer followed by ‘s’).
See FEE SPECIFICATION below.
-H, --hidden-incog-input-params f,o Read hidden incognito data from file
'f' at offset 'o' (comma-separated)
@ -44,20 +44,45 @@
-q, --quiet Suppress warnings; overwrite files without prompting
-s, --send Sign and send the transaction (the default if seed
data is provided)
-T, --txhex-idx N Send only part ‘N’ of a multi-part transaction.
Indexing begins with one.
-v, --verbose Produce more verbose output
-y, --yes Answer 'yes' to prompts, suppress non-essential output
-W, --allow-non-wallet-swap Allow signing of swap transactions that send funds
to non-wallet addresses
-x, --proxy P Fetch the swap quote 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
-z, --show-hash-presets Show information on available hash presets
With --autosign, the TX file argument is omitted, and the last submitted TX
file on the removable device will be used.
If no outputs are specified, the original outputs will be used for the
replacement transaction, otherwise a new transaction will be created with the
outputs listed on the command line. The syntax for the output arguments is
identical to that of ‘mmgen-txcreate’.
The user should take care to select a fee sufficient to ensure the original
transaction is replaced in the mempool.
When bumping a swap transaction, the swap protocol’s quote server on the
Internet must be reachable either directly or via the SOCKS5 proxy specified
with the --proxy option. To improve privacy, it’s recommended to proxy
requests to the quote server via Tor or some other anonymity network.
FEE SPECIFICATION
Transaction fees, both on the command line and at the interactive prompt, may
be specified as either absolute BTC amounts, using a plain decimal number, or
as satoshis per byte, using an integer followed by 's', for satoshi.
be specified as either absolute coin amounts, using a plain decimal number, or
as satoshis per byte, using an integer followed by ‘s’, for satoshi.
Transactions may contain both MMGen or non-MMGen input addresses.
To sign non-MMGen inputs, a bitcoind wallet dump or flat key list is used
To sign non-MMGen inputs, a coin daemon wallet dump or flat key list is used
as the key source (--keys-from-file option).
To sign MMGen inputs, key data is generated from a seed as with the
@ -78,6 +103,7 @@
Seed source files must have the canonical extensions listed in the 'FileExt'
column below:
FMT CODES:
Format FileExt Valid codes
@ -94,5 +120,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN v15.0.0 September 2024 MMGEN-TXBUMP(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-TXBUMP(1)
```

@ -1,26 +1,24 @@
```text
MMGEN-TXCREATE: Create a transaction with outputs to specified coin or MMGen addresses
USAGE: mmgen-txcreate [opts] [<addr,amt> ...] <change addr, addrlist ID or addr type> [addr file ...]
USAGE: mmgen-txcreate [opts] [ADDR,AMT ... | DATA_SPEC] ADDR [addr file ...]
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long options (common options)
--longhelp Print help message for long (global) options
-a, --autosign Create a transaction for offline autosigning (see
‘mmgen-autosign’). The removable device is mounted and
unmounted automatically
-A, --fee-adjust f Adjust transaction fee by factor 'f' (see below)
-A, --fee-adjust f Adjust transaction fee by factor ‘f’ (see below)
-B, --no-blank Don't blank screen before displaying unspent outputs
-c, --comment-file f Source the transaction's comment from file 'f'
-C, --fee-estimate-confs c Desired number of confirmations for fee estimation
(default: 3)
-d, --outdir d Specify an alternate directory 'd' for output
-D, --contract-data D Path to hex-encoded contract data (ETH only)
-E, --fee-estimate-mode M Specify the network fee estimate mode. Choices:
'conservative','economical'. Default: 'conservative'
-f, --fee f Transaction fee, as a decimal BTC amount or as
satoshis per byte (an integer followed by 's').
satoshis per byte (an integer followed by ‘s’).
See FEE SPECIFICATION below. If omitted, fee will be
calculated using network fee estimation.
-g, --gas g Specify start gas amount in Wei (ETH only)
-i, --info Display unspent outputs and exit
-I, --inputs i Specify transaction inputs (comma-separated list of
MMGen IDs or coin addresses). Note that ALL unspent
@ -35,21 +33,36 @@
-v, --verbose Produce more verbose output
-V, --vsize-adj f Adjust transaction's estimated vsize by factor 'f'
-y, --yes Answer 'yes' to prompts, suppress non-essential output
-X, --cached-balances Use cached balances (Ethereum only)
The transaction’s outputs are listed on the command line, while its inputs
are chosen from a list of the wallet’s unspent outputs via an interactive
menu. Alternatively, inputs may be specified using the --inputs option.
All addresses on the command line can be either Bitcoin addresses or MMGen
IDs in the form <seed ID>:<address type letter>:<index>.
Addresses on the command line can be either native coin addresses or MMGen
IDs in the form SEED_ID:ADDRTYPE_CODE:INDEX.
Outputs are specified in the form <address>,<amount>, with the change output
specified by address only. Alternatively, the change output may be an
addrlist ID in the form <seed ID>:<address type letter>, in which case the
first unused address in the tracking wallet matching the requested ID will
be automatically selected as the change output.
Outputs are specified in the form ADDRESS,AMOUNT or ADDRESS. The first form
creates an output sending the given amount to the given address. The bare
address form designates the given address as either the change output or the
sole output of the transaction (excluding any data output). Exactly one bare
address argument is required.
For convenience, the bare address argument may be given as ADDRTYPE_CODE or
SEED_ID:ADDRTYPE_CODE (see ADDRESS TYPES below). In the first form, the first
unused address of type ADDRTYPE_CODE for each Seed ID in the tracking wallet
will be displayed in a menu, with the user prompted to select one. In the
second form, the user specifies the Seed ID as well, allowing the script to
select the transaction’s change output or single output without prompting.
See EXAMPLES below.
A single DATA_SPEC argument may also be given on the command line to create
an OP_RETURN data output with a zero spend amount. This is the preferred way
to embed data in the blockchain. DATA_SPEC may be of the form "data":DATA
or "hexdata":DATA. In the first form, DATA is a string in your system’s native
encoding, typically UTF-8. In the second, DATA is a hexadecimal string (with
the leading ‘0x’ omitted) encoding the binary data to be embedded. In both
cases, the resulting byte string must not exceed 80 bytes in length.
If the transaction fee is not specified on the command line (see FEE
SPECIFICATION below), it will be calculated dynamically using network fee
@ -59,17 +72,26 @@
Network-estimated fees will be multiplied by the value of --fee-adjust, if
specified.
To send the value of all inputs (minus TX fee) to a single output, specify
a single address with no amount on the command line. Alternatively, an
addrlist ID may be specified, and the address will be chosen automatically
as described above for the change output.
ADDRESS TYPES:
Code Type Description
---- ---- -----------
‘L’ legacy - Legacy uncompressed address
‘C’ compressed - Compressed P2PKH address
‘S’ segwit - Segwit P2SH-P2WPKH address
‘B’ bech32 - Native Segwit (Bech32) address
‘X’ bech32x - Cross-chain Bech32 address
‘E’ ethereum - Ethereum address
‘Z’ zcash_z - Zcash z-address
‘M’ monero - Monero address
FEE SPECIFICATION
Transaction fees, both on the command line and at the interactive prompt, may
be specified as either absolute BTC amounts, using a plain decimal number, or
as satoshis per byte, using an integer followed by 's', for satoshi.
be specified as either absolute coin amounts, using a plain decimal number, or
as satoshis per byte, using an integer followed by ‘s’, for satoshi.
EXAMPLES:
@ -77,30 +99,30 @@
Send 0.123 BTC to an external Bitcoin address, returning the change to a
specific MMGen address in the tracking wallet:
$ mmgen-txcreate 35N9FntsNwy98TmjFHyCpsBVDVUs5wDPfB,0.123 01ABCDEF:S:7
$ mmgen-txcreate bc1qj87nveegsvwmz8yj759xgua2vx2tzsywlny44t,0.123 01ABCDEF:B:7
Same as above, but select the change address automatically:
$ mmgen-txcreate 35N9FntsNwy98TmjFHyCpsBVDVUs5wDPfB,0.123 01ABCDEF:S
$ mmgen-txcreate bc1qj87nveegsvwmz8yj759xgua2vx2tzsywlny44t,0.123 01ABCDEF:B
Same as above, but select the change address automatically by address type:
$ mmgen-txcreate 35N9FntsNwy98TmjFHyCpsBVDVUs5wDPfB,0.123 S
$ mmgen-txcreate bc1qj87nveegsvwmz8yj759xgua2vx2tzsywlny44t,0.123 B
Same as above, but reduce verbosity and specify fee of 20 satoshis
per byte:
$ mmgen-txcreate -q -f 20s 35N9FntsNwy98TmjFHyCpsBVDVUs5wDPfB,0.123 S
$ mmgen-txcreate -q -f 20s bc1qj87nveegsvwmz8yj759xgua2vx2tzsywlny44t,0.123 B
Send entire balance of selected inputs minus fee to an external Bitcoin
address:
$ mmgen-txcreate 35N9FntsNwy98TmjFHyCpsBVDVUs5wDPfB
$ mmgen-txcreate bc1qj87nveegsvwmz8yj759xgua2vx2tzsywlny44t
Send entire balance of selected inputs minus fee to first unused wallet
address of specified type:
$ mmgen-txcreate S
$ mmgen-txcreate B
MMGEN v15.0.0 September 2024 MMGEN-TXCREATE(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-TXCREATE(1)
```

@ -1,10 +1,10 @@
```text
MMGEN-TXDO: Create, sign and send an MMGen transaction
USAGE: mmgen-txdo [opts] [<addr,amt> ...] <change addr, addrlist ID or addr type> [addr file ...] [seed source ...]
USAGE: mmgen-txdo [opts] [ADDR,AMT ... | DATA_SPEC] ADDR [addr file ...] [seed source ...]
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long options (common options)
-A, --fee-adjust f Adjust transaction fee by factor 'f' (see below)
--longhelp Print help message for long (global) options
-A, --fee-adjust f Adjust transaction fee by factor ‘f’ (see below)
-b, --brain-params l,p Use seed length 'l' and hash preset 'p' for
brainwallet input
-B, --no-blank Don't blank screen before displaying unspent outputs
@ -12,15 +12,13 @@
-C, --fee-estimate-confs c Desired number of confirmations for fee estimation
(default: 3)
-d, --outdir d Specify an alternate directory 'd' for output
-D, --contract-data D Path to hex-encoded contract data (ETH only)
-e, --echo-passphrase Print passphrase to screen when typing it
-E, --fee-estimate-mode M Specify the network fee estimate mode. Choices:
'conservative','economical'. Default: 'conservative'
-f, --fee f Transaction fee, as a decimal BTC amount or as
satoshis per byte (an integer followed by 's').
satoshis per byte (an integer followed by ‘s’).
See FEE SPECIFICATION below. If omitted, fee will be
calculated using network fee estimation.
-g, --gas g Specify start gas amount in Wei (ETH only)
-H, --hidden-incog-input-params f,o Read hidden incognito data from file
'f' at offset 'o' (comma-separated)
-i, --in-fmt f Input is from wallet format 'f' (see FMT CODES below)
@ -46,15 +44,16 @@
-p, --hash-preset p Use the scrypt hash parameters defined by preset 'p'
for password hashing (default: '3')
-P, --passwd-file f Get MMGen wallet passphrase from file 'f'
-q, --quiet Suppress warnings; overwrite files without prompting
-R, --no-rbf Make transaction non-replaceable (non-replace-by-fee
according to BIP 125)
-q, --quiet Suppress warnings; overwrite files without prompting
-T, --txhex-idx N Send only part ‘N’ of a multi-part transaction.
Indexing begins with one.
-u, --subseeds n The number of subseed pairs to scan for (default: 100,
maximum: 1000000). Only the default or first supplied
wallet is scanned for subseeds.
-v, --verbose Produce more verbose output
-V, --vsize-adj f Adjust transaction's estimated vsize by factor 'f'
-X, --cached-balances Use cached balances (Ethereum only)
-y, --yes Answer 'yes' to prompts, suppress non-essential output
-z, --show-hash-presets Show information on available hash presets
@ -63,14 +62,30 @@
are chosen from a list of the wallet’s unspent outputs via an interactive
menu. Alternatively, inputs may be specified using the --inputs option.
All addresses on the command line can be either Bitcoin addresses or MMGen
IDs in the form <seed ID>:<address type letter>:<index>.
Addresses on the command line can be either native coin addresses or MMGen
IDs in the form SEED_ID:ADDRTYPE_CODE:INDEX.
Outputs are specified in the form <address>,<amount>, with the change output
specified by address only. Alternatively, the change output may be an
addrlist ID in the form <seed ID>:<address type letter>, in which case the
first unused address in the tracking wallet matching the requested ID will
be automatically selected as the change output.
Outputs are specified in the form ADDRESS,AMOUNT or ADDRESS. The first form
creates an output sending the given amount to the given address. The bare
address form designates the given address as either the change output or the
sole output of the transaction (excluding any data output). Exactly one bare
address argument is required.
For convenience, the bare address argument may be given as ADDRTYPE_CODE or
SEED_ID:ADDRTYPE_CODE (see ADDRESS TYPES below). In the first form, the first
unused address of type ADDRTYPE_CODE for each Seed ID in the tracking wallet
will be displayed in a menu, with the user prompted to select one. In the
second form, the user specifies the Seed ID as well, allowing the script to
select the transaction’s change output or single output without prompting.
See EXAMPLES below.
A single DATA_SPEC argument may also be given on the command line to create
an OP_RETURN data output with a zero spend amount. This is the preferred way
to embed data in the blockchain. DATA_SPEC may be of the form "data":DATA
or "hexdata":DATA. In the first form, DATA is a string in your system’s native
encoding, typically UTF-8. In the second, DATA is a hexadecimal string (with
the leading ‘0x’ omitted) encoding the binary data to be embedded. In both
cases, the resulting byte string must not exceed 80 bytes in length.
If the transaction fee is not specified on the command line (see FEE
SPECIFICATION below), it will be calculated dynamically using network fee
@ -80,24 +95,33 @@
Network-estimated fees will be multiplied by the value of --fee-adjust, if
specified.
To send the value of all inputs (minus TX fee) to a single output, specify
a single address with no amount on the command line. Alternatively, an
addrlist ID may be specified, and the address will be chosen automatically
as described above for the change output.
ADDRESS TYPES:
Code Type Description
---- ---- -----------
‘L’ legacy - Legacy uncompressed address
‘C’ compressed - Compressed P2PKH address
‘S’ segwit - Segwit P2SH-P2WPKH address
‘B’ bech32 - Native Segwit (Bech32) address
‘X’ bech32x - Cross-chain Bech32 address
‘E’ ethereum - Ethereum address
‘Z’ zcash_z - Zcash z-address
‘M’ monero - Monero address
FEE SPECIFICATION
Transaction fees, both on the command line and at the interactive prompt, may
be specified as either absolute BTC amounts, using a plain decimal number, or
as satoshis per byte, using an integer followed by 's', for satoshi.
be specified as either absolute coin amounts, using a plain decimal number, or
as satoshis per byte, using an integer followed by ‘s’, for satoshi.
SIGNING NOTES
Transactions may contain both MMGen or non-MMGen input addresses.
To sign non-MMGen inputs, a bitcoind wallet dump or flat key list is used
To sign non-MMGen inputs, a coin daemon wallet dump or flat key list is used
as the key source (--keys-from-file option).
To sign MMGen inputs, key data is generated from a seed as with the
@ -118,6 +142,7 @@
Seed source files must have the canonical extensions listed in the 'FileExt'
column below:
FMT CODES:
Format FileExt Valid codes
@ -140,30 +165,30 @@
Send 0.123 BTC to an external Bitcoin address, returning the change to a
specific MMGen address in the tracking wallet:
$ mmgen-txdo 35N9FntsNwy98TmjFHyCpsBVDVUs5wDPfB,0.123 01ABCDEF:S:7
$ mmgen-txdo bc1qj87nveegsvwmz8yj759xgua2vx2tzsywlny44t,0.123 01ABCDEF:B:7
Same as above, but select the change address automatically:
$ mmgen-txdo 35N9FntsNwy98TmjFHyCpsBVDVUs5wDPfB,0.123 01ABCDEF:S
$ mmgen-txdo bc1qj87nveegsvwmz8yj759xgua2vx2tzsywlny44t,0.123 01ABCDEF:B
Same as above, but select the change address automatically by address type:
$ mmgen-txdo 35N9FntsNwy98TmjFHyCpsBVDVUs5wDPfB,0.123 S
$ mmgen-txdo bc1qj87nveegsvwmz8yj759xgua2vx2tzsywlny44t,0.123 B
Same as above, but reduce verbosity and specify fee of 20 satoshis
per byte:
$ mmgen-txdo -q -f 20s 35N9FntsNwy98TmjFHyCpsBVDVUs5wDPfB,0.123 S
$ mmgen-txdo -q -f 20s bc1qj87nveegsvwmz8yj759xgua2vx2tzsywlny44t,0.123 B
Send entire balance of selected inputs minus fee to an external Bitcoin
address:
$ mmgen-txdo 35N9FntsNwy98TmjFHyCpsBVDVUs5wDPfB
$ mmgen-txdo bc1qj87nveegsvwmz8yj759xgua2vx2tzsywlny44t
Send entire balance of selected inputs minus fee to first unused wallet
address of specified type:
$ mmgen-txdo S
$ mmgen-txdo B
MMGEN v15.0.0 September 2024 MMGEN-TXDO(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-TXDO(1)
```

@ -2,21 +2,37 @@
MMGEN-TXSEND: Send a signed MMGen cryptocoin transaction
USAGE: mmgen-txsend [opts] [signed transaction file]
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long options (common options)
-a, --autosign Send an autosigned transaction created by ‘mmgen-txcreate
--autosign’. The removable device is mounted and unmounted
automatically. The transaction file argument must be omitted
when using this option
-A, --abort Abort an unsent transaction created by ‘mmgen-txcreate
--autosign’ and delete it from the removable device. The
transaction may be signed or unsigned.
-d, --outdir d Specify an alternate directory 'd' for output
-q, --quiet Suppress warnings; overwrite files without prompting
-s, --status Get status of a sent transaction (or the current transaction,
whether sent or unsent, when used with --autosign)
-v, --verbose Be more verbose
-y, --yes Answer 'yes' to prompts, suppress non-essential output
-h, --help Print this help message
--longhelp Print help message for long (global) options
-a, --autosign Send an autosigned transaction created by ‘mmgen-txcreate
--autosign’. The removable device is mounted and unmounted
automatically. The transaction file argument must be omitted
when using this option
-A, --abort Abort an unsent transaction created by ‘mmgen-txcreate
--autosign’ and delete it from the removable device. The
transaction may be signed or unsigned.
-d, --outdir d Specify an alternate directory 'd' for output
-H, --dump-hex F Instead of sending to the network, dump the transaction hex
to file ‘F’. Use filename ‘-’ to dump to standard output.
-m, --mark-sent Mark the transaction as sent by adding it to the removable
device. Used in combination with --autosign when a trans-
action has been successfully sent out-of-band.
-n, --tx-proxy P Send transaction via public TX proxy ‘P’ (supported proxies:
‘etherscan’). This is done via a publicly accessible web
page, so no API key or registration is required.
-q, --quiet Suppress warnings; overwrite files without prompting
-r, --receipt Print the receipt of the sent transaction (Ethereum only)
-s, --status Get status of a sent transaction (or current transaction,
whether sent or unsent, when used with --autosign)
-t, --test Test whether the transaction can be sent without sending it
-T, --txhex-idx N Send only part ‘N’ of a multi-part transaction. Indexing
begins with one.
-v, --verbose Be more verbose
-w, --wait Wait for transaction confirmation (Ethereum only)
-x, --proxy P Connect to TX proxy 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
MMGEN v15.0.0 September 2024 MMGEN-TXSEND(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-TXSEND(1)
```

@ -3,7 +3,9 @@
USAGE: mmgen-txsign [opts] <transaction file>... [seed source]...
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long options (common options)
--longhelp Print help message for long (global) options
-a, --autosign Sign a transaction created for offline autosigning (see
‘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
@ -37,12 +39,14 @@
wallet is scanned for subseeds.
-v, --verbose Produce more verbose output
-V, --vsize-adj f Adjust transaction's estimated vsize by factor 'f'
-W, --allow-non-wallet-swap Allow signing of swap transactions that send funds
to non-wallet addresses
-y, --yes Answer 'yes' to prompts, suppress non-essential output
Transactions may contain both MMGen or non-MMGen input addresses.
To sign non-MMGen inputs, a bitcoind wallet dump or flat key list is used
To sign non-MMGen inputs, a coin daemon wallet dump or flat key list is used
as the key source (--keys-from-file option).
To sign MMGen inputs, key data is generated from a seed as with the
@ -63,6 +67,7 @@
Seed source files must have the canonical extensions listed in the 'FileExt'
column below:
FMT CODES:
Format FileExt Valid codes
@ -79,5 +84,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN v15.0.0 September 2024 MMGEN-TXSIGN(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-TXSIGN(1)
```

@ -3,7 +3,7 @@
USAGE: mmgen-walletchk [opts] [infile]
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long options (common options)
--longhelp Print help message for long (global) options
-e, --echo-passphrase Echo passphrases and other user input to screen
-i, --in-fmt f Input from wallet format 'f' (see FMT CODES below)
-H, --hidden-incog-input-params f,o Read hidden incognito data from file
@ -34,6 +34,7 @@
with brainwallets. For a brainwallet passphrase to generate the correct
seed, the same seed length and hash preset parameters must always be used.
FMT CODES:
Format FileExt Valid codes
@ -50,5 +51,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN v15.0.0 September 2024 MMGEN-WALLETCHK(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-WALLETCHK(1)
```

@ -3,7 +3,7 @@
USAGE: mmgen-walletconv [opts] [infile]
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long options (common options)
--longhelp Print help message for long (global) options
-d, --outdir d Output files to directory 'd' instead of working dir
-e, --echo-passphrase Echo passphrases and other user input to screen
-i, --in-fmt f Convert from wallet format 'f' (see FMT CODES below)
@ -45,6 +45,7 @@
with brainwallets. For a brainwallet passphrase to generate the correct
seed, the same seed length and hash preset parameters must always be used.
FMT CODES:
Format FileExt Valid codes
@ -61,5 +62,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN v15.0.0 September 2024 MMGEN-WALLETCONV(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-WALLETCONV(1)
```

@ -3,7 +3,7 @@
USAGE: mmgen-walletgen [opts]
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long options (common options)
--longhelp Print help message for long (global) options
-d, --outdir d Output files to directory 'd' instead of working dir
-e, --echo-passphrase Echo passphrases and other user input to screen
-o, --out-fmt f Output to wallet format 'f' (see FMT CODES below)
@ -37,6 +37,7 @@
with brainwallets. For a brainwallet passphrase to generate the correct
seed, the same seed length and hash preset parameters must always be used.
FMT CODES:
Format FileExt Valid codes
@ -53,5 +54,5 @@
MMGenWallet .mmdat wallet,w
PlainHexSeedFile .hex hex,rawhex,plainhex
MMGEN v15.0.0 September 2024 MMGEN-WALLETGEN(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-WALLETGEN(1)
```

@ -13,8 +13,7 @@
mmgen-xmrwallet [opts] export-outputs | export-outputs-sign | import-key-images [wallets]
OPTIONS:
-h, --help Print this help message
--longhelp Print help message for long options (common
options)
--longhelp Print help message for long (global) options
-a, --autosign Use appropriate outdir and other params for
autosigning operations (implies --watch-only).
When this option is in effect, filename argu-
@ -500,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.0.0 September 2024 MMGEN-XMRWALLET(1)
MMGEN-WALLET 16.0.0 September 2025 MMGEN-XMRWALLET(1)
```