WalletConsole utility

The Wallet Core library comes with an interactive command-line utility, for accessing key- and address management functionality of the library.

Quick Start

$ ./build/walletconsole/walletconsole
Wallet-Core Console (c) TrustWallet
Type 'help' for list of commands.
> help
Commands:
. . .
newKey Create new pseudo-random 32-byte key (secret!)
. . .
> coin btc
Set active coin to: bitcoin
> addrDefault
Result: bc1q2kecrqfvzj7l6phet956whxkvathsvsgn7twav

Starting

The utility builds together with the library and can be started from: build/walletconsole/walletconsole . See build instructions.

Walletconsole can be also executed 'off the shelf' using the Docker image:

docker run -i -t trustwallet/wallet-core /wallet-core/build/walletconsole/walletconsole

Commands

Here is a snapshot of the commands:

Commands:
exit Exit
quit Exit
help This help
Inputs, buffer:
# Take last result
#<n> Take nth previous result
buffer Take buffer values
Coins:
coins List known coins
coin <coin> Set active coin, selected by its ID or symbol or name
Keys:
newKey Create new pseudo-random 32-byte key (secret!)
pubPri <priKey> Derive public key from a secret private key (type is coin-dependent)
priPub <pubKey> Derive private key from public key :)
setMnemonic <word1> ... Set current mnemonic, several words (secret!)
newMnemonic <strength> Create and store a new mnemonic, of strength (128 -- 256) (secret!)
dumpSeed Dump the seed of the current mnemonic (secret!)
dumpMnemonic Dump the current mnemonic (secret!)
dumpDP Dump the default derivation path of the current coin (ex.: m/84'/0'/0'/0/0)
priDP [<derivPath>] Derive a new private key for the coin, from the current mnemonic and given derivation path.
If derivation path is missing, the default one is used (see dumpDP).
Addresses:
addrPub <pubKey> Create <coin> address from public key
addrPri <priKey> Create <coin> address from private key
addr <addr> Check string <coin> address
addrDefault Derive default address, for current coin, fom current mnemonic; see dumpDP
addrDP <derivPath> Derive a new address with the given derivation path (using current coin and mnemonic)
Coin-specific methods:
tonInitMsg <priKey> Build TON account initialization message.
Transformations:
hex <inp> Encode given string to hex
base64Encode <inp> Encode given hex data to Base64
base64Decode <inp> Decode given Base64 string to hex data
File methods:
fileW <fileName> <data> Write data to a (new) binary file.
fileR <fileName> Read data from a binary file.

Examples

Here are various sample usages.

Create a new private key, derive a BTC address from it, write it to a file:

> coin bitcoin
Set active coin to: bitcoin Use 'coin' to change. (name: 'bitcoin' symbol: btc numericalid: 0)
> newKey
Result: 4e8c1773ce1ca447594fa23a445d9952236c7a15e96802b880aab4d918bdcfd9
> addrPri #
Result: bc1qvjf93nc80f3fu7j2ehqv6xw6zqa5cny32hl90y
> fileW btcaddr.txt #
Written to file 'btcaddr.txt', 21 bytes.

Create a new private key, derive the public key from it, derive a BTC address from it:

> newKey
Result: ef8f76035c4d4dd29ed4bbe3fc7c0db45d81cd616f2ac8b038cb982bec2a63ad
> pubPri #
Result: 0381277ec943a6cd4033171da547bbe93585a8905fb3dad108e8e51e88a4e136ea
> addrPub #
Result: bc1qvf6gzfhcelpugw84ks677x5zuke46jm946dtpx

Check an ALGO address for validity:

> coin algo
Set active coin to: algorand Use 'coin' to change. (name: 'algorand' symbol: algo numericalid: 283)
> addr LCSUSBOLNVT6BND6DWWGM4DLVUYJN3PGBT4T7LTCMDMKS7TR7FZAOHOVPE
Address is a valid algorand address: LCSUSBOLNVT6BND6DWWGM4DLVUYJN3PGBT4T7LTCMDMKS7TR7FZAOHOVPE

Derive private keys using different BIP39 derivation paths, and create address from it:

> coin btc
Set active coin to: bitcoin Use 'coin' to change. (name: 'bitcoin' symbol: btc numericalid: 0)
> dumpDP
Result: m/84'/0'/0'/0/0
> priDP
Using derivation path "m/84'/0'/0'/0/0" for coin bitcoin
Result: df6a78d65fe3c82f020c25be12debd46e58f5f4366381102485ce26c52416a96
> priDP m/84'/0'/0'/0/1
Using derivation path "m/84'/0'/0'/0/1" for coin bitcoin
Result: 19c44359b4953bb3084dd73ba2854f6822de3b6f8f358055a16a1b19e533e37c
> pubPri #
Result: 02222d3889870d36e0c9e788c69a6509eddfb2105309e7733cfa669bb52ba996d1
> addrPub #
Result: bc1q7ghe6xyx38vdkzs9ryv3gz47mgvpa747z2mcvy
> addr #
Address is a valid bitcoin address: bc1q7ghe6xyx38vdkzs9ryv3gz47mgvpa747z2mcvy

Derive several NANO addresses (BIP39):

> coin nano
Set active coin to: nano Use 'coin' to change. (name: 'nano' symbol: nano numericalid: 165)
> dumpDP
Result: m/44'/165'/0'
> setMnemonic edge defense waste choose enrich upon flee junk siren film clown finish luggage leader kid quick brick print evidence swap drill paddle truly occur
Mnemonic set (24 words).
> addrDefault
Result: nano_3yyipbgtnd7183k61nkh5mxnt9wpsfhto95mksdqj6s7p45mwj9osai7asad
> addrDP m/44'/165'/0'
Result: nano_3yyipbgtnd7183k61nkh5mxnt9wpsfhto95mksdqj6s7p45mwj9osai7asad
> addrDP m/44'/165'/1'
Result: nano_3zni7o8m4dq1aphffnaq5pwseh7rrzhkrz5mpr8bcm68n6u775pbk7csedam

Hex and Base64 encoding example:

> hex Hello
Result: 48656c6c6f
> base64Encode #
Result: SGVsbG8=
> base64Decode #
Result: 48656c6c6f
> buffer
Last value: 48656c6c6f
3 previous values:
#1 48656c6c6f
#2 SGVsbG8=
#3 48656c6c6f