mkchain 6.25.0
A utility to generate k8s configs for a Tezos blockchain
Requires Python: >=3.7

- [Install mkchain](#install-mkchain)
- [Generate Helm Values](#generate-helm-values)
  - [mkchain parameters](#mkchain-parameters)
- [Create Tezos Chain](#create-tezos-chain)

# mkchain

Helper program to generate values for the Tezos chain Helm chart

## Prerequisites

To run `mkchain`, you must either have docker or pytezos installed.

### Installing Docker

To be consistent with other documentation in this project, we describe
how to install docker with minikube. We need to install:

    - [docker](https://docs.docker.com/get-docker/),
    - [minikube](https://minikube.sigs.k8s.io/docs/),
    - [helm](https://helm.sh/),
    - and `python3`.

Start minikube and configure your shell environment to use minikube's
Docker daemon:

```shell
minikube start

eval $(minikube docker-env)
```

### Installing pytezos

This is documented at:
https://pytezos.org/quick_start.html#requirements

## Install mkchain

```shell
mkdir mkchain && cd mkchain
python3 -m venv .venv
. .venv/bin/activate
pip install wheel && pip install mkchain
```

Set [unbuffered IO](https://docs.python.org/3.6/using/cmdline.html#envvar-PYTHONUNBUFFERED) for python:

```shell
export PYTHONUNBUFFERED=x
```

## Generate Helm Values

Set as an environment variable the name you would like to give to your chain:

```shell
export CHAIN_NAME=my-chain
```

Your chain is uniquely defined by a set of values such as bootstrap account keys, chain id, timestamp...

To generate these values run:

```shell
mkchain $CHAIN_NAME
```

This command will create a yaml file in your current working directory: `<$CHAIN_NAME>_values.yaml`

### mkchain parameters

You can explicitly specify some values by:

- passing CLI parameters to `mkchain`
- directly modifying the values yaml file generated by `mkchain`
- passing arguments to [helm install](https://helm.sh/docs/helm/helm_install/) or [helm upgrade](https://helm.sh/docs/helm/helm_upgrade/) commands using the `--set` flag, which will selectively override the current yaml values

| YAML Key                         | mkchain argument         | Description                                                    | Default                 |
| -------------------------------- | ------------------------ | -------------------------------------------------------------- | ----------------------- |
|                                  | -h                       | mkchain help message                                           |                         |
|                                  | -v                       | mkchain version                                                |                         |
|                                  | --number-of-bakers       | Number of baking nodes in the cluster                          | 1                       |
|                                  | --number-of-nodes        | Number of non-baking nodes in the cluster                      | 0                       |
| bootstrap_peers                  | --bootstrap-peers        | Peer ips to connect to                                         | []                      |
| expected_proof_of_work           | --expected-proof-of-work | Node identity generation difficulty                            | 0                       |
| images.octez                     | --octez-docker-image     | Version of the Octez docker image to run                       | tezos/tezos:v17.3 |
|                                  | --use-docker (--no...)   | Use (or don't use) docker to generate keys rather than pytezos | autodetect              |

## Create Tezos Chain

Make sure you have the Tezos Helm chart repo:

```shell
helm repo add oxheadalpha https://oxheadalpha.github.io/tezos-helm-charts
```

Then install the Tezos Helm chart:

```shell
helm install $CHAIN_NAME oxheadalpha/tezos-chain \
--values ./${CHAIN_NAME}_values.yaml \
--namespace oxheadalpha --create-namespace
```