npm package: @nexm-io/cryst-cli
Description: Cryst CLI tool for miner
Author: Violet
Latest version: 1.0.2

# CRYST CLI

Cryst CLI tool for miner

---

## Requirements

For development, you will only need Node.js and a node global package, Yarn, installed in your environement.

### Node

- #### Node installation on Windows

  Just go on [official Node.js website](https://nodejs.org/) and download the installer.
  Also, be sure to have `git` available in your PATH, `npm` might need it (You can find git [here](https://git-scm.com/)).

- #### Node installation on Ubuntu

  You can install nodejs and npm easily with apt install, just run the following commands.

      $ sudo apt install nodejs
      $ sudo apt install npm

- #### Other Operating Systems
  You can find more information about the installation on the [official Node.js website](https://nodejs.org/) and the [official NPM website](https://npmjs.org/).

If the installation was successful, you should be able to run the following command.

    $ node --version
    v18.19.1

    $ npm --version
    10.2.4

If you need to update `npm`, you can make it using `npm`! Cool right? After running the following command, just open again the command line and be happy.

    $ npm install npm -g

###

### Yarn installation

After installing node, this project will need yarn too, so just run the following command.

    $ npm install -g yarn

---

## Install CLI from NPM

    $ yarn global add @nexm-io/cryst-cli@1.0.1

**Note:** You should add `export PATH="$PATH:$(yarn global bin)"` to your `~/.bash_profile` or whatever you use

If the installation was successful, you should be able to run the following command.

```
$ cryst --version

   ____ ______   ______ _____    ____ _     ___
  / ___|  _ \ \ / / ___|_   _|  / ___| |   |_ _|
 | |   | |_) \ V /\___ \ | |   | |   | |    | |
 | |___|  _ < | |  ___) || |   | |___| |___ | |
  \____|_| \_\|_| |____/ |_|    \____|_____|___|

1.0.1
```

---

## About CLI

### List commands

- `cryst --help`
- `cryst account <account_command>`
  - `generate` Generate new empty Aptos account
  - `import <private_key>` Import Aptos account from private key
  - `list` List all imported accounts
  - `active <address>` Change active account by address
  - `help [command]` display help for command
- `cryst mining <mining_command>`
  - `register [options]` Purchase mining pass
  - `mine [options]` Start mining
  - `stats [options]` Check current miner stats
  - `claim [options]` claim pending reward
  - `help [command]` display help for command
- `cryst balance <balance_command>`
  - `withdraw-apt [options] <to_address> [amount]` withdraw APT to specific address
  - `withdraw-cryst [options] <to_address> [amount]` withdraw CRYST to specific address
  - `help [command]` display help for command

### Local storage files

All keys and configuration file is located at `$HOME/.cryst`. Please note to have a backup somewhere or you will lost your miner private keys. **MUST** keep these keys save from the others.

- `active.json`: default account info
- `config.json`: configuration needed for run your mining
- `keys.json`: all your (generated + imported) private keys + address

---

## Getting started

### 1. Load miner account

Generate new account

    $ cryst account generate

Or import existing account

    $ cryst account import 0x...

### 2. Deposit $APT to miner account

The local (generated + imported) account address can be showed by the below command. The **minimum $APT** need to be deposited is `2 $APT` (which used for register and pay gas fee)

    # cryst account list

### 3. Register miner credential onchain

You will need miner credential to start mining. This will cost `1 $APT` and will be deducted from your miner balance **_(Price is considered to be changed in the future)_**.

    # cryst mining register --address <0x...miner_address>

### 4. Start mining

Please keep this process running to earn `$CRYST`

    # cryst mining mine --address <0x...miner_address>

### (Optional) Check your mining status

    # cryst mining stats

### 5. Claim (withdraw) your mining reward ($CRYST)

    # cryst balanace withdraw-cryst --address <0x...miner_address> <0x...to_address> <amount>