# 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

```shell
$ ./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](/developer/wallet-core/developing-the-library/building.md).

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

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

## Commands

Here is a snapshot of the commands:

```shell
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)
dumpXpub                Dump the XPUB of the current mnemonic
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)
addrXpub <xpub> <index> Derive a new address from the given XPUB and address index (using current coin)
Coin-specific methods:
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:

```shell
> 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:

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

Check an ALGO address for validity:

```shell
> 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:

```shell
> 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):

```shell
> 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:

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developer.trustwallet.com/developer/wallet-core/developing-the-library/walletconsole.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
