# FrostFS Admin Tool

## Overview

Admin tool provides an easier way to deploy and maintain private installation
of FrostFS. Private installation provides a set of N3 consensus nodes, FrostFS
Alphabet, and Storage nodes. Admin tool generates consensus keys, initializes
the sidechain, and provides functions to update the network and register new
Storage nodes.

## Build

To build binary locally, use `make bin/frostfs-adm` command.

For clean build inside a docker container, use `make docker/bin/frostfs-adm`.

Build docker image with `make image-adm`.

At FrostFS private install deployment, frostfs-adm requires compiled FrostFS
contracts. Find them in the latest release of
[frostfs-contract repository](https://git.frostfs.info/TrueCloudLab/frostfs-contract/releases).

## Commands

### Config

Config section provides `init` command that creates a configuration file for
private installation deployment and updates. Config file is optional, all
parameters can be passed by arguments or read from standard input (wallet
passwords).

Config example:
```yaml
rpc-endpoint: https://address:port # sidechain RPC node endpoint
alphabet-wallets: /path            # path to consensus node / alphabet wallets storage
network:
  max_object_size: 67108864 # max size of a single FrostFS object, bytes
  epoch_duration: 240       # duration of a FrostFS epoch in blocks, consider block generation frequency in the sidechain
  fee:
    candidate: 0 # inner ring candidate registration fee, for private installation consider 0
    container: 0 # container creation fee, for private installation consider 0
    container_alias: 0 # container nice-name registration fee, for private installation consider 0
    withdraw: 0  # withdraw fee, for private installation consider 0
credentials:     # passwords for consensus node / alphabet wallets
  az: password1
  buky: password2
  vedi: password3
  glagoli: password4
  dobro: password5
  yest: password6
  zhivete: password7
```

### Morph

#### Network deployment

- `generate-alphabet` generates a set of wallets for consensus and
  Alphabet nodes.

- `init` initializes the sidechain by deploying smart contracts and
  setting provided FrostFS network configuration.

- `generate-storage-wallet` generates a wallet for the Storage node that
  is ready for deployment. It also transfers a bit of sidechain GAS, so this
  wallet can be used for FrostFS bootstrap.

#### Network maintenance

- `set-config` add/update configuration values in the Netmap contract.

- `force-new-epoch` increments FrostFS epoch number and executes new epoch
  handlers in FrostFS nodes.

- `refill-gas` transfers sidechain GAS to the specified wallet.

- `update-contracts` updates contracts to a new version.

#### Container migration

If a network has to be redeployed, these commands will migrate all container meta
info. These commands **do not migrate actual objects**.

- `dump-containers` saves all containers and metadata registered in the container
  contract to a file.

- `restore-containers` restores previously saved containers by their repeated registration in
 the container contract.

- `list-containers` output all containers ids.

#### Network info

- `dump-config` prints FrostFS network configuration.

- `dump-hashes` prints FrostFS contract addresses stored in NNS.


## Private network deployment

Read step-by-step guide of private storage deployment [in docs](./docs/deploy.md).