update xmrwallet, autosign command help, py-scrypt install for Windows
parent
983ce02066
commit
5028f1dfdf
26 changed files with 460 additions and 128 deletions
|
|
@ -26,6 +26,11 @@ $ sudo pacman -S curl git gcc libtool make autoconf automake autogen pcre python
|
|||
$ python3 -m pip install --user --upgrade pip setuptools build wheel
|
||||
```
|
||||
|
||||
If you get an ‘externally-managed-environment’ error (with Debian bookworm,
|
||||
for example), add --break-system-packages to the command line. Note that this
|
||||
will not in fact break any system packages, as pip installs all packages under
|
||||
the user’s home directory when --user is in effect.
|
||||
|
||||
#### Install MMGen:
|
||||
|
||||
Make sure that `~/.local/bin` is in `PATH`. Existing MMGen users should delete
|
||||
|
|
|
|||
|
|
@ -273,38 +273,18 @@ Thanks to a faulty implementation of the `scrypt` function included in Python’
|
|||
password hashing, i.e. hash presets greater than `3`. Installing the package is
|
||||
therefore highly recommended.
|
||||
|
||||
On your online machine, download the tar archive:
|
||||
On your online machine, clone the Py-Scrypt source repository:
|
||||
|
||||
```text
|
||||
$ pip3 download --no-deps scrypt==0.8.20
|
||||
$ git clone https://github.com/holgern/py-scrypt.git
|
||||
```
|
||||
|
||||
On your offline machine, unpack and enter the archive:
|
||||
|
||||
```text
|
||||
$ tar fax scrypt-0.8.20.tar.gz
|
||||
$ cd scrypt-0.8.20
|
||||
```
|
||||
|
||||
Open the file `setup.py` in your text editor. Right before the line reading:
|
||||
|
||||
```python
|
||||
elif sys.platform.startswith('win32'):
|
||||
```
|
||||
|
||||
insert the following lines, carefully preserving indentation:
|
||||
|
||||
```python
|
||||
elif os.environ.get('MSYSTEM') == 'MSYS':
|
||||
define_macros = []
|
||||
includes = ['/mingw64/include']
|
||||
libraries = ['libcrypto']
|
||||
CFLAGS.append('-O2')
|
||||
```
|
||||
|
||||
Save the file and exit the editor. Now build and install:
|
||||
Copy the cloned repo to your offline machine.
|
||||
|
||||
On both online and offline machines, enter the repo root and install:
|
||||
|
||||
```text
|
||||
$ cd py-scrypt
|
||||
$ python3 setup.py install --user
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ $ test/test.py clean
|
|||
Run the test suite in fast mode, skipping altcoin tests:
|
||||
|
||||
```text
|
||||
$ test/test-release.sh -F noalt
|
||||
$ test/test-release.sh -FA
|
||||
```
|
||||
|
||||
### Complete testing (BTC plus all supported altcoins)
|
||||
|
|
|
|||
|
|
@ -115,5 +115,5 @@
|
|||
MMGenWallet .mmdat wallet,w
|
||||
PlainHexSeedFile .hex hex,rawhex,plainhex
|
||||
|
||||
MMGEN v13.2.0 August 2022 MMGEN-ADDRGEN(1)
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-ADDRGEN(1)
|
||||
```
|
||||
|
|
|
|||
|
|
@ -31,5 +31,5 @@
|
|||
|
||||
It’s recommended to use ‘--rpc-backend=aio’ with ‘--rescan’.
|
||||
|
||||
MMGEN v13.2.0 August 2022 MMGEN-ADDRIMPORT(1)
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-ADDRIMPORT(1)
|
||||
```
|
||||
|
|
|
|||
|
|
@ -1,13 +1,15 @@
|
|||
```text
|
||||
MMGEN-AUTOSIGN: Auto-sign MMGen transactions and message files
|
||||
USAGE: mmgen-autosign [opts] [command]
|
||||
MMGEN-AUTOSIGN: Auto-sign MMGen transactions, message files and XMR wallet output files
|
||||
USAGE: mmgen-autosign [opts] [operation]
|
||||
OPTIONS:
|
||||
-h, --help Print this help message
|
||||
--longhelp Print help message for long options (common options)
|
||||
-c, --coins c Coins to sign for (comma-separated list)
|
||||
-C, --clean Remove unneeded files on the removable device
|
||||
-I, --no-insert-check Don’t check for device insertion
|
||||
-l, --led Use status LED to signal standby, busy and error
|
||||
-m, --mountpoint M Specify an alternate mountpoint 'M' (default: '/mnt/tx')
|
||||
-m, --mountpoint M Specify an alternate mountpoint 'M'
|
||||
(default: '/mnt/mmgen_autosign')
|
||||
-M, --mnemonic-fmt F During setup, prompt for mnemonic seed phrase of format
|
||||
'F' (choices: 'mmgen','bip39'; default: 'mmgen')
|
||||
-n, --no-summary Don’t print a transaction summary
|
||||
|
|
@ -18,22 +20,27 @@
|
|||
will not be printed.
|
||||
-q, --quiet Produce quieter output
|
||||
-v, --verbose Produce more verbose output
|
||||
-w, --wallet-dir D Specify an alternate wallet dir
|
||||
(default: '/dev/shm/autosign')
|
||||
-x, --xmrwallets L Range or list of wallets to be used for XMR autosigning
|
||||
|
||||
|
||||
COMMANDS
|
||||
OPERATIONS
|
||||
|
||||
gen_key - generate the wallet encryption key and copy it to '/mnt/tx'
|
||||
setup - generate the wallet encryption key and wallet
|
||||
gen_key - generate the wallet encryption key and copy it to the mountpoint
|
||||
PosixPath('/mnt/mmgen_autosign') (as currently configured)
|
||||
setup - generate both wallet encryption key and temporary signing wallet
|
||||
wait - start in loop mode: wait-mount-sign-unmount-wait
|
||||
|
||||
|
||||
USAGE NOTES
|
||||
USAGE NOTES
|
||||
|
||||
If invoked with no command, the program mounts a removable device containing
|
||||
unsigned MMGen transactions and/or message files, signs them, unmounts the
|
||||
removable device and exits.
|
||||
If no operation is specified, this program mounts a removable device
|
||||
(typically a USB flash drive) containing unsigned MMGen transactions, message
|
||||
files, and/or XMR wallet output files, signs them, unmounts the removable
|
||||
device and exits.
|
||||
|
||||
If invoked with 'wait', the program waits in a loop, mounting the removable
|
||||
If invoked with ‘wait’, the program waits in a loop, mounting the removable
|
||||
device, performing signing operations and unmounting the device every time it
|
||||
is inserted.
|
||||
|
||||
|
|
@ -42,35 +49,58 @@
|
|||
ready for device insertion or removal.
|
||||
|
||||
The removable device must have a partition labeled MMGEN_TX with a user-
|
||||
writable root directory and a directory named '/tx', where unsigned MMGen
|
||||
transactions are placed. Optionally, the directory '/msg' may also be created
|
||||
and unsigned message files created by `mmgen-msg` placed in this directory.
|
||||
writable root directory and a directory named ‘/tx’, where unsigned MMGen
|
||||
transactions are placed. Optionally, the directory ‘/msg’ may be created
|
||||
and unsigned message files produced by ‘mmgen-msg’ placed there.
|
||||
|
||||
On the signing machine the mount point '/mnt/tx' must exist and /etc/fstab
|
||||
must contain the following entry:
|
||||
On both the signing and online machines the mountpoint ‘/mnt/mmgen_autosign’
|
||||
(as currently configured) must exist and ‘/etc/fstab’ must contain the
|
||||
following entry:
|
||||
|
||||
LABEL='MMGEN_TX' /mnt/tx auto noauto,user 0 0
|
||||
LABEL=MMGEN_TX /mnt/mmgen_autosign auto noauto,user 0 0
|
||||
|
||||
Transactions are signed with a wallet on the signing machine (in the directory
|
||||
'/dev/shm/autosign') encrypted with a 64-character hexadecimal password saved
|
||||
in the file `autosign.key` in the root of the removable device partition.
|
||||
Signing is performed with a temporary wallet created in volatile memory in
|
||||
the directory ‘/dev/shm/autosign’ (as currently configured). The wallet is
|
||||
encrypted with a 32-byte password saved in the file ‘autosign.key’ in the
|
||||
root of the removable device’s filesystem.
|
||||
|
||||
The password and wallet can be created in one operation by invoking the
|
||||
command with 'setup' with the removable device inserted. In this case, the
|
||||
user will be prompted for a seed mnemonic.
|
||||
The password and temporary wallet may be created in one operation by invoking
|
||||
‘mmgen-autosign setup’ with the removable device inserted. In this case, the
|
||||
temporary wallet is created from the user’s default wallet, if it exists and
|
||||
the user so desires. If not, the user is prompted to enter a seed phrase.
|
||||
|
||||
Alternatively, the password and wallet can be created separately by first
|
||||
invoking the command with 'gen_key' and then creating and encrypting the
|
||||
Alternatively, the password and temporary wallet may be created separately by
|
||||
first invoking ‘mmgen-autosign gen_key’ and then creating and encrypting the
|
||||
wallet using the -P (--passwd-file) option:
|
||||
|
||||
$ mmgen-walletconv -r0 -q -iwords -d/dev/shm/autosign -p1 -P/mnt/tx/autosign.key -Llabel
|
||||
$ mmgen-walletconv -iwords -d/dev/shm/autosign -p1 -N -P/mnt/mmgen_autosign/autosign.key -Lfoo
|
||||
|
||||
Note that the hash preset must be '1'. Multiple wallets are permissible.
|
||||
Note that the hash preset must be ‘1’. To use a wallet file as the source
|
||||
instead of an MMGen seed phrase, omit the ‘-i’ option and add the wallet
|
||||
file path to the end of the command line. Multiple temporary wallets may
|
||||
be created in this way and used for signing (note, however, that for XMR
|
||||
operations only one wallet is supported).
|
||||
|
||||
For good security, it's advisable to re-generate a new wallet and key for
|
||||
each signing session.
|
||||
Autosigning is currently available only on Linux-based platforms.
|
||||
|
||||
This command is currently available only on Linux-based platforms.
|
||||
|
||||
MMGEN v13.2.0 August 2022 MMGEN-AUTOSIGN(1)
|
||||
SECURITY NOTE
|
||||
|
||||
By placing wallet and password on separate devices, this program creates
|
||||
a two-factor authentication setup whereby an attacker must gain physical
|
||||
control of both the removable device and signing machine in order to sign
|
||||
transactions. It’s therefore recommended to always keep the removable device
|
||||
secure, separated from the signing machine and hidden (in your pocket, for
|
||||
example) when not transacting. In addition, since login access on the
|
||||
signing machine is required to steal the user’s seed, it’s good practice
|
||||
to lock the signing machine’s screen once the setup process is complete.
|
||||
|
||||
As a last resort, cutting power to the signing machine will destroy the
|
||||
volatile memory where the temporary wallet resides and foil any attack,
|
||||
even if you’ve lost control of the removable device.
|
||||
|
||||
Always remember to power off the signing machine when your signing session
|
||||
is over.
|
||||
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-AUTOSIGN(1)
|
||||
```
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
(default: 'L' or 'legacy')
|
||||
-U, --subwallet U Generate keys for subwallet 'U' (see SUBWALLETS
|
||||
below)
|
||||
-V, --viewkeys Print viewkeys, omitting secret keys
|
||||
-v, --verbose Produce more verbose output
|
||||
-x, --b16 Print secret keys in hexadecimal too
|
||||
|
||||
|
|
@ -119,5 +120,5 @@
|
|||
MMGenWallet .mmdat wallet,w
|
||||
PlainHexSeedFile .hex hex,rawhex,plainhex
|
||||
|
||||
MMGEN v13.2.0 August 2022 MMGEN-KEYGEN(1)
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-KEYGEN(1)
|
||||
```
|
||||
|
|
|
|||
|
|
@ -104,5 +104,5 @@
|
|||
Verify and display the exported JSON signature data:
|
||||
$ mmgen-msg verify signatures.json
|
||||
|
||||
MMGEN v13.2.0 August 2022 MMGEN-MSG(1)
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-MSG(1)
|
||||
```
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
for password hashing (default: '3')
|
||||
-z, --show-hash-presets Show information on available hash presets
|
||||
-P, --passwd-file f Get wallet passphrase from file 'f'
|
||||
-N, --passwd-file-new-only Use passwd file only for new, not existing, wallet
|
||||
-q, --quiet Produce quieter output; suppress some warnings
|
||||
-r, --usr-randchars n Get 'n' characters of additional randomness from user
|
||||
(min=10, max=80, default=30)
|
||||
|
|
@ -51,5 +52,5 @@
|
|||
MMGenWallet .mmdat wallet,w
|
||||
PlainHexSeedFile .hex hex,rawhex,plainhex
|
||||
|
||||
MMGEN v13.2.0 August 2022 MMGEN-PASSCHG(1)
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-PASSCHG(1)
|
||||
```
|
||||
|
|
|
|||
|
|
@ -100,5 +100,5 @@
|
|||
MMGenWallet .mmdat wallet,w
|
||||
PlainHexSeedFile .hex hex,rawhex,plainhex
|
||||
|
||||
MMGEN v13.2.0 August 2022 MMGEN-PASSGEN(1)
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-PASSGEN(1)
|
||||
```
|
||||
|
|
|
|||
|
|
@ -24,5 +24,5 @@
|
|||
wallet_cli - execute a wallet RPC call with supplied arguments (wallet
|
||||
is first argument)
|
||||
|
||||
MMGEN v13.2.0 August 2022 MMGEN-REGTEST(1)
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-REGTEST(1)
|
||||
```
|
||||
|
|
|
|||
|
|
@ -61,5 +61,5 @@
|
|||
MMGenWallet .mmdat wallet,w
|
||||
PlainHexSeedFile .hex hex,rawhex,plainhex
|
||||
|
||||
MMGEN v13.2.0 August 2022 MMGEN-SEEDJOIN(1)
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-SEEDJOIN(1)
|
||||
```
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
for password hashing (default: '3')
|
||||
-z, --show-hash-presets Show information on available hash presets
|
||||
-P, --passwd-file f Get wallet passphrase from file 'f'
|
||||
-N, --passwd-file-new-only Use passwd file only for new, not existing, wallet
|
||||
-q, --quiet Produce quieter output; suppress some warnings
|
||||
-r, --usr-randchars n Get 'n' characters of additional randomness from user
|
||||
(min=10, max=80, default=30)
|
||||
|
|
@ -142,5 +143,5 @@
|
|||
MMGenWallet .mmdat wallet,w
|
||||
PlainHexSeedFile .hex hex,rawhex,plainhex
|
||||
|
||||
MMGEN v13.2.0 August 2022 MMGEN-SEEDSPLIT(1)
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-SEEDSPLIT(1)
|
||||
```
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@
|
|||
for password hashing (default: '3')
|
||||
-z, --show-hash-presets Show information on available hash presets
|
||||
-P, --passwd-file f Get wallet passphrase from file 'f'
|
||||
-N, --passwd-file-new-only Use passwd file only for new, not existing, wallet
|
||||
-q, --quiet Produce quieter output; suppress some warnings
|
||||
-r, --usr-randchars n Get 'n' characters of additional randomness from user
|
||||
(min=10, max=80, default=30)
|
||||
|
|
@ -95,5 +96,5 @@
|
|||
MMGenWallet .mmdat wallet,w
|
||||
PlainHexSeedFile .hex hex,rawhex,plainhex
|
||||
|
||||
MMGEN v13.2.0 August 2022 MMGEN-SUBWALLETGEN(1)
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-SUBWALLETGEN(1)
|
||||
```
|
||||
|
|
|
|||
|
|
@ -725,6 +725,18 @@ Required ARG (type shown in square brackets):
|
|||
mmgen_keyaddrfile [str]
|
||||
```
|
||||
|
||||
### `mmgen-tool viewkeyaddrfile_chksum`
|
||||
|
||||
```text
|
||||
Compute checksum for MMGen key-address file
|
||||
|
||||
USAGE: mmgen-tool [OPTS] viewkeyaddrfile_chksum ARG
|
||||
|
||||
Required ARG (type shown in square brackets):
|
||||
|
||||
mmgen_viewkeyaddrfile [str]
|
||||
```
|
||||
|
||||
### `mmgen-tool passwdfile_chksum`
|
||||
|
||||
```text
|
||||
|
|
@ -1209,5 +1221,5 @@ Optional KEYWORD ARGS (type and default value shown in square brackets):
|
|||
```
|
||||
|
||||
```text
|
||||
MMGEN v13.3.dev24 December 2022 MMGEN-TOOL(DETAIL)(1)
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-TOOL(DETAIL)(1)
|
||||
```
|
||||
|
|
|
|||
|
|
@ -103,10 +103,11 @@ GENERAL USAGE INFORMATION FOR MMGEN-TOOL COMMANDS
|
|||
|
||||
Utilities for viewing/checking MMGen address and transaction files:
|
||||
|
||||
addrfile_chksum mmgen_addrfile [str]
|
||||
keyaddrfile_chksum mmgen_keyaddrfile [str]
|
||||
passwdfile_chksum mmgen_passwdfile [str]
|
||||
txview mmgen_tx_file(s) [str] pager [bool=False] terse [bool=False] sort [str='addr'] filesort [str='mtime']
|
||||
addrfile_chksum mmgen_addrfile [str]
|
||||
keyaddrfile_chksum mmgen_keyaddrfile [str]
|
||||
viewkeyaddrfile_chksum mmgen_viewkeyaddrfile [str]
|
||||
passwdfile_chksum mmgen_passwdfile [str]
|
||||
txview mmgen_tx_file(s) [str] pager [bool=False] terse [bool=False] sort [str='addr'] filesort [str='mtime']
|
||||
|
||||
|
||||
File encryption and decryption:
|
||||
|
|
@ -185,5 +186,5 @@ EXAMPLES:
|
|||
Same as above, but supply input via STDIN:
|
||||
$ echo "deadbeefcafe" | mmgen-tool hexreverse -
|
||||
|
||||
MMGEN v13.3.dev24 December 2022 MMGEN-TOOL(USAGE)(1)
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-TOOL(USAGE)(1)
|
||||
```
|
||||
|
|
|
|||
|
|
@ -129,11 +129,12 @@
|
|||
|
||||
Utilities for viewing/checking MMGen address and transaction files:
|
||||
|
||||
addrfile_chksum - compute checksum for MMGen address file
|
||||
keyaddrfile_chksum - compute checksum for MMGen key-address file
|
||||
passwdfile_chksum - compute checksum for MMGen password file
|
||||
txview - display specified raw or signed MMGen transaction
|
||||
files in human-readable form
|
||||
addrfile_chksum - compute checksum for MMGen address file
|
||||
keyaddrfile_chksum - compute checksum for MMGen key-address file
|
||||
viewkeyaddrfile_chksum - compute checksum for MMGen key-address file
|
||||
passwdfile_chksum - compute checksum for MMGen password file
|
||||
txview - display specified raw or signed MMGen transaction
|
||||
files in human-readable form
|
||||
|
||||
File encryption and decryption:
|
||||
|
||||
|
|
@ -196,5 +197,5 @@
|
|||
|
||||
Type ‘mmgen-tool help <command>’ for help on a particular command
|
||||
|
||||
MMGEN v13.3.dev23 November 2022 MMGEN-TOOL(1)
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-TOOL(1)
|
||||
```
|
||||
|
|
|
|||
|
|
@ -87,5 +87,5 @@
|
|||
MMGenWallet .mmdat wallet,w
|
||||
PlainHexSeedFile .hex hex,rawhex,plainhex
|
||||
|
||||
MMGEN v13.3.dev23 November 2022 MMGEN-TXBUMP(1)
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-TXBUMP(1)
|
||||
```
|
||||
|
|
|
|||
|
|
@ -22,7 +22,8 @@
|
|||
-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, --locktime t Lock time (block height or unix seconds) (default: 0)
|
||||
-l, --locktime t Lock time (block height or unix seconds) (default: 0)
|
||||
-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
|
||||
|
|
@ -97,5 +98,5 @@
|
|||
|
||||
$ mmgen-txcreate S
|
||||
|
||||
MMGEN v13.3.dev23 November 2022 MMGEN-TXCREATE(1)
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-TXCREATE(1)
|
||||
```
|
||||
|
|
|
|||
|
|
@ -33,7 +33,8 @@
|
|||
-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, --locktime t Lock time (block height or unix seconds) (default: 0)
|
||||
-l, --locktime t Lock time (block height or unix seconds) (default: 0)
|
||||
-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-
|
||||
|
|
@ -163,5 +164,5 @@
|
|||
|
||||
$ mmgen-txdo S
|
||||
|
||||
MMGEN v13.3.dev23 November 2022 MMGEN-TXDO(1)
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-TXDO(1)
|
||||
```
|
||||
|
|
|
|||
|
|
@ -9,5 +9,5 @@
|
|||
-s, --status Get status of a sent transaction
|
||||
-y, --yes Answer 'yes' to prompts, suppress non-essential output
|
||||
|
||||
MMGEN v13.2.0 August 2022 MMGEN-TXSEND(1)
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-TXSEND(1)
|
||||
```
|
||||
|
|
|
|||
|
|
@ -79,5 +79,5 @@
|
|||
MMGenWallet .mmdat wallet,w
|
||||
PlainHexSeedFile .hex hex,rawhex,plainhex
|
||||
|
||||
MMGEN v13.2.0 August 2022 MMGEN-TXSIGN(1)
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-TXSIGN(1)
|
||||
```
|
||||
|
|
|
|||
|
|
@ -50,5 +50,5 @@
|
|||
MMGenWallet .mmdat wallet,w
|
||||
PlainHexSeedFile .hex hex,rawhex,plainhex
|
||||
|
||||
MMGEN v13.2.0 August 2022 MMGEN-WALLETCHK(1)
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-WALLETCHK(1)
|
||||
```
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@
|
|||
for password hashing (default: '3')
|
||||
-z, --show-hash-presets Show information on available hash presets
|
||||
-P, --passwd-file f Get wallet passphrase from file 'f'
|
||||
-N, --passwd-file-new-only Use passwd file only for new, not existing, wallet
|
||||
-q, --quiet Produce quieter output; suppress some warnings
|
||||
-r, --usr-randchars n Get 'n' characters of additional randomness from user
|
||||
(min=10, max=80, default=30)
|
||||
|
|
@ -60,5 +61,5 @@
|
|||
MMGenWallet .mmdat wallet,w
|
||||
PlainHexSeedFile .hex hex,rawhex,plainhex
|
||||
|
||||
MMGEN v13.2.0 August 2022 MMGEN-WALLETCONV(1)
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-WALLETCONV(1)
|
||||
```
|
||||
|
|
|
|||
|
|
@ -53,5 +53,5 @@
|
|||
MMGenWallet .mmdat wallet,w
|
||||
PlainHexSeedFile .hex hex,rawhex,plainhex
|
||||
|
||||
MMGEN v13.2.0 August 2022 MMGEN-WALLETGEN(1)
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-WALLETGEN(1)
|
||||
```
|
||||
|
|
|
|||
|
|
@ -1,18 +1,28 @@
|
|||
```text
|
||||
MMGEN-XMRWALLET: Perform various Monero wallet operations for addresses
|
||||
in an MMGen XMR key-address file
|
||||
USAGE: mmgen-xmrwallet [opts] create <xmr_keyaddrfile> [wallets]
|
||||
mmgen-xmrwallet [opts] sync <xmr_keyaddrfile> [wallets]
|
||||
mmgen-xmrwallet [opts] list <xmr_keyaddrfile> [wallets]
|
||||
mmgen-xmrwallet [opts] new <xmr_keyaddrfile> NEW_ADDRESS_SPEC
|
||||
mmgen-xmrwallet [opts] transfer <xmr_keyaddrfile> TRANSFER_SPEC
|
||||
mmgen-xmrwallet [opts] sweep <xmr_keyaddrfile> SWEEP_SPEC
|
||||
MMGEN-XMRWALLET: Perform various Monero wallet and transacting operations for
|
||||
addresses in an MMGen XMR key-address file
|
||||
USAGE: mmgen-xmrwallet [opts] create | sync | list | dump | restore [xmr_keyaddrfile] [wallets]
|
||||
mmgen-xmrwallet [opts] label [xmr_keyaddrfile] LABEL_SPEC
|
||||
mmgen-xmrwallet [opts] new [xmr_keyaddrfile] NEW_ADDRESS_SPEC
|
||||
mmgen-xmrwallet [opts] transfer [xmr_keyaddrfile] TRANSFER_SPEC
|
||||
mmgen-xmrwallet [opts] sweep [xmr_keyaddrfile] SWEEP_SPEC
|
||||
mmgen-xmrwallet [opts] submit [TX_file]
|
||||
mmgen-xmrwallet [opts] relay <TX_file>
|
||||
mmgen-xmrwallet [opts] txview <TX_file> ...
|
||||
mmgen-xmrwallet [opts] resubmit
|
||||
mmgen-xmrwallet [opts] txview | txlist [TX_file] ...
|
||||
mmgen-xmrwallet [opts] export-outputs [wallets]
|
||||
mmgen-xmrwallet [opts] import-key-images [wallets]
|
||||
OPTIONS:
|
||||
-h, --help Print this help message
|
||||
--longhelp Print help message for long options (common
|
||||
options)
|
||||
-a, --autosign Use appropriate outdir and other params for
|
||||
autosigning operations (implies --watch-only).
|
||||
When this option is in effect, filename argu-
|
||||
ments must be omitted, as files are located
|
||||
automatically.
|
||||
-m, --autosign-mountpoint P Specify the autosign mountpoint (defaults to
|
||||
‘/mnt/mmgen_autosign’, implies --autosign)
|
||||
-b, --rescan-blockchain Rescan the blockchain if wallet fails to sync
|
||||
-d, --outdir D Save transaction files to directory 'D'
|
||||
instead of the working directory
|
||||
|
|
@ -22,20 +32,28 @@
|
|||
-k, --use-internal-keccak-module Force use of the internal keccak module
|
||||
-p, --hash-preset P Use scrypt hash preset 'P' for password
|
||||
hashing (default: '3')
|
||||
-r, --restore-height H Scan from height 'H' when creating wallets
|
||||
-r, --restore-height H Scan from height 'H' when creating wallets.
|
||||
Use special value ‘current’ to create empty
|
||||
wallet at current blockchain height.
|
||||
-R, --no-relay Save transaction to file instead of relaying
|
||||
-s, --no-start-wallet-daemon Don’t start the wallet daemon at startup
|
||||
-S, --no-stop-wallet-daemon Don’t stop the wallet daemon at exit
|
||||
-W, --watch-only Create or operate on watch-only wallets
|
||||
-w, --wallet-dir D Output or operate on wallets in directory 'D'
|
||||
instead of the working directory
|
||||
-H, --wallet-rpc-host host Wallet RPC hostname (default: 'localhost')
|
||||
-U, --wallet-rpc-user user Wallet RPC username (default: 'monero')
|
||||
-P, --wallet-rpc-password pass Wallet RPC password (default: '')
|
||||
-U, --wallet-rpc-user user Wallet RPC username (currently: 'monero')
|
||||
-P, --wallet-rpc-password pass Wallet RPC password (currently: [scrubbed])
|
||||
|
||||
|
||||
All operations except for ‘relay’ require a running Monero daemon. Unless
|
||||
--daemon is specified, the monerod is assumed to be listening on localhost at
|
||||
the default RPC port.
|
||||
Many operations take an optional ‘wallets’ argument: one or more address
|
||||
indexes (expressed as a comma-separated list and/or hyphenated range) in
|
||||
the default or specified key-address file, each corresponding to a Monero
|
||||
wallet with the same index. If the argument is omitted, all wallets are
|
||||
operated upon.
|
||||
|
||||
All operations except for ‘relay’ require a running Monero daemon (monerod).
|
||||
Unless --daemon is specified, the daemon is assumed to be listening on
|
||||
localhost at the default RPC port.
|
||||
|
||||
If --tx-relay-daemon is specified, the monerod at HOST:PORT will be used to
|
||||
relay any created transactions. PROXY_HOST:PROXY_PORT, if specified, may
|
||||
|
|
@ -47,29 +65,43 @@
|
|||
|
||||
SUPPORTED OPERATIONS
|
||||
|
||||
create - create wallet for all or specified addresses in key-address file
|
||||
sync - sync wallet for all or specified addresses in key-address file
|
||||
list - same as 'sync', but also list detailed address info for accounts
|
||||
create - create wallets for all or specified addresses in key-address file
|
||||
sync - sync wallets for all or specified addresses in key-address file
|
||||
list - same as ‘sync’, but also list detailed address info for accounts
|
||||
label - set a label for an address
|
||||
new - create a new account in a wallet, or a new address in an account
|
||||
transfer - transfer specified XMR amount from specified wallet:account to
|
||||
specified address
|
||||
sweep - sweep funds in specified wallet:account to new address in same
|
||||
account or new account in another wallet
|
||||
relay - relay a transaction from a transaction file created using 'sweep'
|
||||
or 'transfer' with the --no-relay option
|
||||
txview - view a transaction file or files created using 'sweep' or
|
||||
'transfer' with the --no-relay option
|
||||
relay - relay a transaction from a transaction file created using ‘sweep’
|
||||
or ‘transfer’ with the --no-relay option
|
||||
submit - submit an autosigned transaction to a wallet and the network
|
||||
resubmit - resubmit most recently submitted autosigned transaction (other
|
||||
actions are required: see Exporting Outputs below)
|
||||
txview - display detailed information about a transaction file or files
|
||||
txlist - same as above, but display terse information in tabular format
|
||||
dump - produce JSON dumps of wallet metadata (accounts, addresses and
|
||||
labels) for a list or range of wallets
|
||||
restore - same as ‘create’, but additionally restore wallet metadata from
|
||||
the corresponding JSON dump files created with ‘dump’
|
||||
export-outputs - export outputs of watch-only wallets for later import
|
||||
into their corresponding offline wallets
|
||||
import-key-images - import key images signed by offline wallets into their
|
||||
corresponding watch-only wallets
|
||||
|
||||
|
||||
'CREATE', 'SYNC' AND 'LIST' OPERATION NOTES
|
||||
‘LABEL’ OPERATION NOTES
|
||||
|
||||
These operations take an optional `wallets` argument: one or more address
|
||||
indexes (expressed as a comma-separated list, hyphenated range, or both)
|
||||
in the specified key-address file, each corresponding to a Monero wallet
|
||||
to be created, synced or listed. If omitted, all wallets are operated upon.
|
||||
This operation takes a LABEL_SPEC arg with the following format:
|
||||
|
||||
WALLET:ACCOUNT:ADDRESS,"label text"
|
||||
|
||||
where WALLET is a wallet number, ACCOUNT an account index, and ADDRESS an
|
||||
address index.
|
||||
|
||||
|
||||
'NEW' OPERATION NOTES
|
||||
‘NEW’ OPERATION NOTES
|
||||
|
||||
This operation takes a NEW_ADDRESS_SPEC arg with the following format:
|
||||
|
||||
|
|
@ -81,7 +113,7 @@
|
|||
appended to the spec following a comma.
|
||||
|
||||
|
||||
'TRANSFER' OPERATION NOTES
|
||||
‘TRANSFER’ OPERATION NOTES
|
||||
|
||||
The transfer operation takes a TRANSFER_SPEC arg with the following format:
|
||||
|
||||
|
|
@ -91,7 +123,7 @@
|
|||
and AMOUNT the destination Monero address and XMR amount, respectively.
|
||||
|
||||
|
||||
'SWEEP' OPERATION NOTES
|
||||
‘SWEEP’ OPERATION NOTES
|
||||
|
||||
The sweep operation takes a SWEEP_SPEC arg with the following format:
|
||||
|
||||
|
|
@ -112,24 +144,49 @@
|
|||
in an account.
|
||||
|
||||
|
||||
'RELAY' OPERATION NOTES
|
||||
‘SUBMIT’ AND ‘RELAY’ OPERATION NOTES
|
||||
|
||||
By default, transactions are relayed to a monerod running on localhost at the
|
||||
default RPC port. To relay transactions to a remote or non-default monerod
|
||||
via optional SOCKS proxy, use the --tx-relay-daemon option described above.
|
||||
|
||||
When ‘submit’ is used with --autosign, the transaction filename must be
|
||||
omitted.
|
||||
|
||||
WARNING
|
||||
|
||||
To avoid exposing your private keys on a network-connected machine, you’re
|
||||
strongly advised to create all transactions offline using the --no-relay
|
||||
option. For this, a monerod with a fully synced blockchain must be running
|
||||
on the offline machine. The resulting transaction files are then sent using
|
||||
the 'relay' operation.
|
||||
‘DUMP’ AND ‘RESTORE’ OPERATION NOTES
|
||||
|
||||
These commands produce and read JSON wallet dump files with the same
|
||||
filenames as their source wallets, plus a .dump extension.
|
||||
|
||||
It’s highly advisable to make regular dumps of your Monero wallets and back
|
||||
up the dump files, which can be used to easily regenerate the wallets using
|
||||
the ‘restore’ operation, should the need arise. For watch-only autosigning
|
||||
wallets, creating the dumps is as easy as executing ‘mmgen-xmrwallet
|
||||
--autosign dump’ from your wallet directory. The dump files are formatted
|
||||
JSON and thus suitable for efficient incremental backup using git.
|
||||
|
||||
|
||||
‘TXVIEW’ AND ‘TXLIST’ OPERATION NOTES
|
||||
|
||||
Transactions are displayed in chronological order based on submit time or
|
||||
creation time. With --autosign, submitted transactions on the removable
|
||||
device are displayed.
|
||||
|
||||
|
||||
SECURITY WARNING
|
||||
|
||||
If you have an existing MMGen Monero hot wallet setup, you’re strongly
|
||||
advised to migrate to offline autosigning to avoid further exposing your
|
||||
private keys on your network-connected machine. See OFFLINE AUTOSIGNING
|
||||
and ‘Replacing Existing Hot Wallets with Watch-Only Wallets’ below.
|
||||
|
||||
|
||||
EXAMPLES
|
||||
|
||||
Note that the transacting examples in this section apply for a hot wallet
|
||||
setup, which is now deprecated. See OFFLINE AUTOSIGNING below.
|
||||
|
||||
Generate an XMR key-address file with 5 addresses from your default wallet:
|
||||
$ mmgen-keygen --coin=xmr 1-5
|
||||
|
||||
|
|
@ -168,5 +225,244 @@
|
|||
to pager:
|
||||
$ mmgen-xmrwallet --pager txview *XMR*.sigtx
|
||||
|
||||
MMGEN v13.3.dev16 November 2022 MMGEN-XMRWALLET(1)
|
||||
|
||||
OFFLINE AUTOSIGNING
|
||||
|
||||
Tutorial
|
||||
|
||||
Master the basic concepts of the MMGen wallet system and the processes of
|
||||
wallet creation, conversion and backup described in the Getting Started
|
||||
guide. Optionally create a default MMGen wallet on your offline machine
|
||||
using ‘mmgen-walletgen’. If you choose not to do this, you’ll be prompted
|
||||
for a seed phrase at the start of each signing session.
|
||||
|
||||
Familiarize yourself with the autosigning setup process as described in
|
||||
‘mmgen-autosign --help’. Prepare your removable device and set up the
|
||||
mountpoints on your offline and online machines according to the instructions
|
||||
therein. Install ‘monero-wallet-rpc’ on your offline machine and the Monero
|
||||
CLI wallet and daemon binaries on your online machine.
|
||||
|
||||
On the offline machine, insert the removable device and execute:
|
||||
|
||||
$ mmgen-autosign --xmrwallets=1-2,7 setup
|
||||
|
||||
This will create 3 Monero signing wallets with indexes 1, 2 and 7 and primary
|
||||
addresses matching your seed’s Monero addresses with the same indexes. (Note
|
||||
that these particular indexes are arbitrary, for purposes of illustration
|
||||
only. Feel free to choose your own list and/or range – or perhaps just the
|
||||
number ‘1’ if one wallet is all you require).
|
||||
|
||||
These signing wallets are written to volatile memory and exist only for the
|
||||
duration of the signing session, just like the temporary MMGen signing wallet
|
||||
they’re generated from (see ‘mmgen-autosign --help’).
|
||||
|
||||
A viewkey-address file for the 3 addresses will also be written to the
|
||||
removable device. The data in this file will be used to create and access
|
||||
watch-only wallets on your online machine that match the signing wallets
|
||||
you’ve just created.
|
||||
|
||||
When the setup operation completes, extract the removable device and restart
|
||||
the autosign script in wait mode:
|
||||
|
||||
$ mmgen-autosign --coins=xmr --stealth-led wait
|
||||
|
||||
Your only further physical interaction with the offline signing machine now
|
||||
(assuming everything goes as planned) will be inserting and extracting the
|
||||
removable device on it. And this is the whole point of autosigning: to make
|
||||
cold signing as convenient as possible, almost like transacting with a hot
|
||||
wallet.
|
||||
|
||||
If your signing machine is an SoC with MMGen LED support (see ‘mmgen-autosign
|
||||
--help’), a quickly flashing LED will indicate that signing is in progress, a
|
||||
slowly flashing LED an error condition, and no LED that the program is idle
|
||||
and waiting for device insertion.
|
||||
|
||||
On your online machine, start monerod, wait until it’s fully synced with the
|
||||
network, insert the removable device and execute:
|
||||
|
||||
$ mmgen-xmrwallet --autosign --restore-height=current create
|
||||
|
||||
This will create 3 watch-only wallets matching your 3 offline signing wallets
|
||||
and write them to the current directory (an alternate wallet directory may be
|
||||
specified with the --wallet-dir option).
|
||||
|
||||
Note that --restore-height=current is required to prevent a time-consuming
|
||||
full sync of the wallets from the Genesis block, a meaningless waste of time
|
||||
in this case since the wallets contain no funds.
|
||||
|
||||
Also make note of the --autosign option, a requirement for ALL autosigning
|
||||
operations with ‘mmgen-xmrwallet’.
|
||||
|
||||
Now list your newly created wallets:
|
||||
|
||||
$ mmgen-xmrwallet --autosign list
|
||||
|
||||
Note that you can also use the ‘sync’ operation here, which produces more
|
||||
abbreviated output than ‘list’.
|
||||
|
||||
Send some XMR (preferably a tiny amount) to the primary address of wallet #7.
|
||||
Once the transaction has confirmed, invoke ‘sync’ or ‘list’ again to verify
|
||||
the funds have arrived.
|
||||
|
||||
Since offline wallet #7 has no knowledge of the funds received by its online
|
||||
counterpart, we need to update its state. Export the outputs of watch-only
|
||||
wallet #7 as follows:
|
||||
|
||||
$ mmgen-xmrwallet --autosign export-outputs 7
|
||||
|
||||
The outputs are now saved to the removable device and will be imported into
|
||||
offline wallet #7 when you sign your first transaction.
|
||||
|
||||
Now you’re ready to begin transacting. Let’s start by sweeping your funds in
|
||||
wallet #7’s primary address (account 0) to a new address in the same account:
|
||||
|
||||
$ mmgen-xmrwallet --autosign sweep 7:0
|
||||
|
||||
This operation creates an unsigned sweep transaction and saves it to the
|
||||
removable device.
|
||||
|
||||
Now extract the removable device and insert it on the offline machine. Wait
|
||||
for the quick LED flashing to stop (or the blue ‘safe to extract’ message, in
|
||||
the absence of LED support), signalling that signing is complete.
|
||||
|
||||
Note that the offline wallet has performed two operations in one go here:
|
||||
an import of wallet outputs from the previous step and the signing of your
|
||||
just-created sweep transaction.
|
||||
|
||||
Extract the removable device, insert it on your online machine and submit the
|
||||
signed sweep transaction to the watch-only wallet, which will broadcast it to
|
||||
the network:
|
||||
|
||||
$ mmgen-xmrwallet --autosign submit
|
||||
|
||||
Note that you may also relay the transaction to a remote daemon, optionally
|
||||
via a Tor proxy, using the --tx-relay-daemon option documented above.
|
||||
|
||||
Once your transaction has confirmed, invoke ‘list’ or ‘sync’ to view your
|
||||
wallets’ balances.
|
||||
|
||||
Congratulations, you’ve performed your first autosigned Monero transaction!
|
||||
|
||||
For other examples, consult the EXAMPLES section above, noting the following
|
||||
differences that apply to autosigning:
|
||||
|
||||
1) The --autosign option must always be included.
|
||||
2) The key-address file argument must always be omitted.
|
||||
3) The ‘relay’ operation is replaced by ‘submit’, with TX filename omitted.
|
||||
4) Always remember to sign your transactions after a ‘sweep’ or ‘transfer’
|
||||
operation.
|
||||
5) Always remember to export a wallet’s outputs when it has received funds
|
||||
from an outside source.
|
||||
|
||||
|
||||
Exporting Outputs
|
||||
|
||||
Exporting outputs from a watch-only wallet is generally required in only
|
||||
three cases:
|
||||
|
||||
a) at the start of each signing session (after ‘mmgen-autosign setup’);
|
||||
b) after the wallet has received funds from an outside source or another
|
||||
wallet; and
|
||||
c) after performing a ‘resubmit’ operation.
|
||||
|
||||
You might also need to do it, however, if an offline wallet is unable to sign
|
||||
a transaction due to missing outputs.
|
||||
|
||||
Export outputs from a wallet as follows (note that the --rescan-blockchain
|
||||
option is required only after a ‘resubmit’ – otherwise it should be omitted):
|
||||
|
||||
$ mmgen-xmrwallet --autosign --rescan-blockchain export-outputs <wallet index>
|
||||
|
||||
At the start of a new signing session, you must export outputs from ALL
|
||||
wallets you intend to transact with. This is necessary because the offline
|
||||
signing wallets have just been created and know nothing about the state of
|
||||
their watch-only counterparts.
|
||||
|
||||
Then insert the removable device on the offline machine to import the outputs
|
||||
into the corresponding signing wallet(s) (and optionally redo any failed
|
||||
transaction signing operation). The signing wallet(s) will also create
|
||||
signed key images.
|
||||
|
||||
Following a ‘resubmit’, you must then import the signed key images into your
|
||||
online wallet as follows:
|
||||
|
||||
$ mmgen-xmrwallet --autosign import-key-images
|
||||
|
||||
|
||||
Replacing Existing Hot Wallets with Watch-Only Wallets
|
||||
|
||||
If you have an existing MMGen Monero hot wallet setup, you can migrate to
|
||||
offline transaction signing by ‘cloning’ your existing hot wallets as
|
||||
watch-only ones via the ‘dump’ and ‘restore’ operations described below.
|
||||
|
||||
For additional security, it’s also wise to create new watch-only wallets that
|
||||
have never had keys exposed on an online machine and gradually transfer all
|
||||
funds from your ‘cloned’ wallets to them. The creation of new wallets is
|
||||
explained in the Tutorial above.
|
||||
|
||||
Start the cloning process by making dump files of your hot wallets’ metadata
|
||||
(accounts, subaddresses and labels). ‘cd’ to the wallet directory (or use
|
||||
--wallet-dir) and execute:
|
||||
|
||||
$ mmgen-xmrwallet dump /path/to/key-address-file.akeys{.mmenc}
|
||||
|
||||
If you’ve been transacting with the wallets, you know where their key-address
|
||||
file is along with its encryption password, if any. Supply an additional
|
||||
index range and/or list at the end of the command line if the key-address
|
||||
file contains more wallets than exist on disk or there are wallets you wish
|
||||
to ignore.
|
||||
|
||||
Do a directory listing to verify that the dump files are present alongside
|
||||
their source wallet files ending with ‘MoneroWallet’. Then execute:
|
||||
|
||||
$ mmgen-xmrwallet --watch-only restore /path/to/key-address-file.akeys{.mmenc}
|
||||
|
||||
This will create watch-only wallets that “mirror” the old hot wallets and
|
||||
populate them with the metadata saved in the dump files.
|
||||
|
||||
Note that watch-only wallet filenames end with ‘MoneroWatchOnlyWallet’. Your
|
||||
old hot wallets will be ignored from here on. Eventually, you’ll want to
|
||||
destroy them.
|
||||
|
||||
Your new wallets must now be synced with the blockchain. Begin by starting
|
||||
monerod and synchronizing with the network.
|
||||
|
||||
Mount ‘/mnt/mmgen_autosign’ and locate the file in the ‘xmr’ directory with
|
||||
the .vkeys extension, which contains the passwords you’ll need to log into
|
||||
the wallets. This is a plain text file viewable with ‘cat’, ‘less’ or your
|
||||
favorite text editor.
|
||||
|
||||
Then log into each watch-only wallet in turn as follows:
|
||||
|
||||
$ monero-wallet-cli --wallet <wallet filename>
|
||||
|
||||
Upon login, each wallet will begin syncing, a process which can take more
|
||||
than an hour depending on your hardware. Note, however, that the process
|
||||
is interruptible: you may exit ‘monero-wallet-cli’ at any point, log back
|
||||
in again and resume where you left off.
|
||||
|
||||
Once your watch-only wallets are synced, you need to export their outputs:
|
||||
|
||||
$ mmgen-xmrwallet --autosign export-outputs
|
||||
|
||||
Now insert the removable device on the offline machine and wait until the LED
|
||||
stops flashing (or ‘safe to extract’). The wallet outputs are now imported
|
||||
into the signing wallets and corresponding signed key images have been
|
||||
written to the removable device.
|
||||
|
||||
Insert the removable device on your online machine and import the key images
|
||||
into your watch-only wallets:
|
||||
|
||||
$ mmgen-xmrwallet --autosign import-key-images
|
||||
|
||||
Congratulations, your watch-only wallets are now complete and you may begin
|
||||
transacting! First perform a ‘sync’ or ‘list’ to ensure that your balances
|
||||
are correct. Then you might try sweeping some funds as described in the
|
||||
Tutorial above.
|
||||
|
||||
Once you’ve gained proficiency with the autosigning process and feel ready
|
||||
to delete your old hot wallets, make sure to do so securely using ‘shred’,
|
||||
‘wipe’ or some other secure deletion utility.
|
||||
|
||||
MMGEN v13.3.dev55 May 2023 MMGEN-XMRWALLET(1)
|
||||
```
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue