an online/offline cryptocurrency wallet for the command line https://mmgen-wallet.cc

The MMGen Project 506e36a810 test/test-release.sh: add `-I` (install package) opt 11 months ago
.github b001c1a792 use `cryptography` library for pbkdf2 function 1 year ago
cmds 5522ffb169 main.py: launch(): make params keyword-only 1 year ago
doc 0b214922c4 minor help screen fixes, update docs from wiki 1 year ago
examples 48636ff2e0 update headers: `mmgen` -> `mmgen-wallet` 1 year ago
extmod 0c94427bcd secp256k1 extmod: add `pubkey_tweak_add()`, `pubkey_check()` functions 1 year ago
mmgen 0c94427bcd secp256k1 extmod: add `pubkey_tweak_add()`, `pubkey_check()` functions 1 year ago
scripts e847f8802d scripts/create-token.py: silence Solidity warnings 1 year ago
test 506e36a810 test/test-release.sh: add `-I` (install package) opt 11 months ago
INSTALL 8fb3efd99c mmgen-autosign: encrypt signing wallet with session key on removable device 7 years ago
LICENSE b7572c9946 new file: LICENSE 10 years ago
MANIFEST.in be1c8c4232 test/test-release.sh: minor cleanups 11 months ago
README.md a8a849f143 README.md: add Twitter link 1 year ago
SIGNING_KEYS.pub bf5334f4cb Update signing keys, links 6 years ago
alt-requirements.txt b001c1a792 use `cryptography` library for pbkdf2 function 1 year ago
eth-requirements.txt c7dc74744e add alt-requirements.txt 1 year ago
pyproject.toml 3524ee0932 minor cleanups 1 year ago
setup.cfg 525b54af8e altcoin.py -> altcoin/params.py, test/altcointest.py 1 year ago
setup.py 48636ff2e0 update headers: `mmgen` -> `mmgen-wallet` 1 year ago
test-requirements.txt 01783f63d5 improve pylint workflow, add build workflow 1 year ago
xmr-requirements.txt c7dc74744e add alt-requirements.txt 1 year ago

README.md

MMGen Wallet

An online/offline cryptocurrency wallet for the command line

build pylint

Description

MMGen Wallet is a wallet and cold storage solution for Bitcoin (and selected altcoins) implemented as a suite of lightweight Python scripts. The scripts work in tandem with a reference Bitcoin or altcoin daemon running on both online and offline computers to provide a robust solution for securely storing, tracking, sending and receiving your crypto assets.

The online computer is used for tracking balances and creating and sending transactions, while the offline machine (typically an air-gapped, low-power device such as a Raspberry Pi) takes care of wallet creation, address generation and transaction signing. All operations involving secret data are handled offline: your seed and private keys never come into contact with a network-connected device.

MMGen Wallet is designed for reliability by having the reference Bitcoin or altcoin daemon, rather than less-tested third-party software, do all the “heavy lifting” of tracking and signing transactions. It’s also designed with privacy in mind: unlike some other online/offline wallets, MMGen Wallet is a completely self-contained system that makes no connections to the Internet apart from the coin network itself: no information about which addresses you’re tracking is ever leaked to the outside world.

Like all deterministic wallets, MMGen Wallet can generate a virtually unlimited number of address/key pairs from a single seed. Your wallet never changes, so you need back it up only once.

At the heart of the MMGen system is the seed, the “master key” providing access to all your crypto assets. The seed can be stored in many different formats: as a password-encrypted wallet (the default), as a one-line base58 or hexadecimal seed file, as formatted “dieroll base6” data, as an Electrum-based or BIP39 mnemonic seed phrase, as a brainwallet passphrase, or as “incognito data” hideable within random data in a file or block device. Conversion among all formats is supported.

mmgen-txcreate running in a terminal window mmgen-txcreate running in a terminal window

Simplified key derivation and seed-phrase generation

To deterministically derive its keys, MMGen Wallet uses a non-hierarchical scheme differing from the BIP32 protocol on which most of today’s popular wallets are based. One advantage of this simple, hash-based scheme is that you can easily recover your private keys from your seed without the MMGen Wallet software using standard command-line utilities.

MMGen Wallet also differs from most cryptocurrency wallets today in its use of the original 1626-word Electrum wordlist for mnemonic seed phrases. Seed phrases are derived using ordinary base conversion, similarly allowing you to regenerate your seed from your seed phrase without the MMGen Wallet software should the need arise. An example of how to do this at the Python prompt is provided here.

The original Electrum wordlist was derived from a frequency list of words found in contemporary English poetry. The high emotional impact of these words makes seed phrases easy to memorize. Curiously, only 861 of them are shared by the more prosaic 2048-word BIP39 wordlist used in most wallets today.

Beginning with version 0.12.0, the BIP39 mnemonic format is also supported, allowing you to use MMGen Wallet as a master wallet for other wallets supporting that widespread standard.

A brief overview of MMGen Wallet’s unique feature set:

  • Full transaction and address tracking support for Bitcoin, Bcash, Litecoin, Ethereum, Ethereum Classic and ERC20 tokens.
  • Monero transacting and wallet management via the interactive mmgen-xmrwallet command.
  • Address generation support for the above coins, plus Zcash (t and z addresses) and 144 Bitcoin-derived altcoins.
  • Support for all Bitcoin address types including Segwit-P2SH and Bech32.
  • Independent key derivation for each address type: No two addresses ever share the same private key. Certain wallets in wide use today regrettably fail to guarantee this property, leading to the danger of inadvertent key reuse.
  • Coin control: You select the outputs your transaction will spend. An essential requirement for maintaining anonymity.
  • BIP69 transaction input and output ordering helps anonymize the “signature” of your transactions.
  • Full control over transaction fees: Fees are specified as absolute or satoshi/byte amounts and can be adjusted interactively, letting you round fees to improve anonymity. Network fee estimation (with selectable estimation mode), RBF and fee bumping are supported.
  • Support for nine wallet formats: three encrypted (native wallet, brainwallet, incognito wallet) and six unencrypted (native mnemonic, BIP39, mmseed, hexseed, plain hex, dieroll).
  • Interactive dieroll wallet generation via mmgen-walletconv -i dieroll.
  • Support for new-style Monero mnemonics in mmgen-tool and mmgen-passgen.
  • Subwallets: Subwallets have many applications, the most notable being online hot wallets, decoy wallets and travel wallets. MMGen subwallets are functionally and externally identical to ordinary wallets, which provides a key security benefit: only the user who generated the subwallet knows that it is indeed a subwallet. Subwallets don’t need to be backed up, as they can always be regenerated from their parent.
  • XOR (N-of-N) seed splitting with shares exportable to all MMGen wallet formats. The master share feature allows you to create multiple splits with a single master share.
  • Transaction autosigning: This feature puts your offline signing machine into “hands-off” mode, allowing you to transact directly from cold storage securely and conveniently. Additional LED signaling support is provided for Raspbian and Armbian platforms.
  • Password generation: MMGen Wallet can be used to generate and manage your online passwords. Password lists are identified by arbitrarily chosen strings like “alice@github” or “bob@reddit”. Passwords of different lengths and formats, including BIP39, are supported.
  • Message signing for BTC, BCH, LTC, ETH and ETC. Signing for multiple addresses and autosigning are supported.
  • Selectable seed lengths of 128, 192 or 256 bits. Subwallets may have shorter seeds than their parent.
  • User-enhanced entropy: All operations requiring random data will prompt you for additional entropy from the keyboard. Keystroke timings are used in addition to the characters typed.
  • Wallet-free operation: All wallet operations can be performed directly from your seed phrase at the prompt, allowing you to dispense with a physically stored wallet entirely if you wish.
  • Word-completing mnemonic entry modes customized for each of MMGen Wallet’s supported wordlists minimize keystrokes required during seed phrase entry.
  • Stealth mnemonic entry: This feature allows you to obfuscate your seed phrase with “dead” keystrokes to guard against acoustic side-channel attacks.
  • Network privacy: MMGen Wallet never “calls home” or checks for upgrades over the network. No information about your wallet installation or crypto assets is ever leaked to third parties.
  • Human-readable wallet files: All of MMGen Wallet’s wallet formats, with the exception of incognito wallets, can be printed or copied by hand.
  • Terminal-based: MMGen Wallet can be run in a screen or tmux session on your local network.
  • Scriptability: Most of MMGen Wallet’s commands can be made non-interactive, allowing you to automate repetitive tasks using shell scripts.
  • The project also includes the mmgen-tool utility, a handy “pocket knife” for cryptocurrency developers, along with an easy-to-use tool API interface providing access to a subset of its commands from within Python.

Supported platforms:

Linux, Armbian, Raspbian, Windows/MSYS2

Download/Install

Install on Microsoft Windows

Install on Debian, Ubuntu, Raspbian, Armbian or Arch Linux

Using MMGen Wallet

Getting Started with MMGen Wallet

MMGen Wallet Quick Start with Regtest Mode

MMGen Wallet command help

Recovering your keys without the MMGen Wallet software

Altcoin and Forkcoin support (ETH,ETC,XMR,ZEC,LTC,BCH and 144 Bitcoin-derived alts)

Subwallets

XOR Seed Splitting

Test Suite

Tool API


Homepage: Clearnet | I2P | Onion
Code repository: Clearnet | I2P | Onion
Code repository mirrors: Github | Gitlab | Gitflic
Keybase | Twitter | Reddit | Bitcointalk
PGP Signing Key: 5C84 CB45 AEE2 250F 31A6 A570 3F8B 1861 E32B 7DA2
Donate:
 ⊙ BTC: bc1qxmymxf8p5ckvlxkmkwgw8ap5t2xuaffmrpexap
 ⊙ BCH: 15TLdmi5NYLdqmtCqczUs5pBPkJDXRs83w
 ⊙ XMR: 8B14zb8wgLuKDdse5p8f3aKpFqRdB4i4xj83b7BHYABHMvHifWxiDXeKRELnaxL5FySfeRRS5girgUvgy8fQKsYMEzPUJ8h