# Summary

<https://github.com/MinaProtocol/mina/releases/tag/1.3.1.1>

Every docker image is built for each of the supported platforms, replace `CODENAME` in the images below with your choice of `bionic`, `focal`, `stretch`, `buster`, or `bullseye` to select the base docker image.

{% hint style="success" %}
**Version:** Mainnet\
**Release date:** 05.08.2022 at 05:43 UTC\
**Current version:** f361ba19d78ba930b5b551f58d1a82942c0f724b\
\
**Mina node:**\
\&#xNAN;*Latest:*\
**Image:** minaprotocol/mina-daemon:1.3.1.1-f361ba1-bionic-mainnet\
**Package:** mina-mainnet=1.3.1.1-f361ba1\
\
**Archive:**\
**Image:** minaprotocol/mina-archive:1.3.1.1-f361ba1-bionic\
**Package:** mina-archive=1.3.1.1-f361ba1\
\
**Sidecar:**\
\&#xNAN;*Release date: 11.05.2021 at 17:06 UTC*\
**Image:** minaprotocol/mina-bp-stats-sidecar:1.1.6-386c5ac\
**Package:** mina-bp-stats-sidecar=1.1.6-386c5ac\
\
**Peer list url:** <https://storage.googleapis.com/mina-seed-lists/mainnet_seeds.txt>
{% endhint %}

{% hint style="success" %}
**Version:** Devnet\
**Release date:** 10.06.2022 at 21:02 UTC\
**Current version:** ccaa43c5a3258444d79cb0293898ee13161dfe87\
**New image:** minaprotocol/mina-daemon:1.3.2alpha1-ccaa43c-bionic-devnet\
**New package:** mina-devnet=1.3.2alpha1-ccaa43c

**Peer list url:** <https://storage.googleapis.com/seed-lists/devnet_seeds.txt>
{% endhint %}

## Russian

Данное руководство поможет установить ноду Mina в мейннет.&#x20;

{% content-ref url="/pages/-MGxMVSmGZ0R8oPADK-s" %}
[Варианты запуска ноды](/russian/varianty-zapuska-nody)
{% endcontent-ref %}

## English

This tutorial will help you install the Mina mainnet.

{% content-ref url="/pages/-MH7WYDIcvWoPel5DlHY" %}
[Node launch options](/english/node-launch-options)
{% endcontent-ref %}

## Contacts

If you have any problems with the installation, you can contact at the following contacts:

Discord - Ducca | StakeTab#5707

Discord - garethtdavies#4963

Discord - whataday2day#1271 - Snark Stopper Creator

Twitter - <https://twitter.com/staketab>

Github - <https://github.com/icohigh>


# Technical Requirements

The characteristics required to run a Mina node.

### Block Producer recommended specifications

* Ubuntu 18.04 LTS
* 8 CPU, 16 Gb RAM, 50 GB SSD
* Use SSH Client, (iTerm in MacOS or MobaXterm, PuTTY for Windows or others)

### Snark Worker recommended specifications

* Ubuntu 18.04 LTS
* 8+ CPU, 16+ Gb RAM, 50 GB SSD
* Use SSH Client, (iTerm in MacOS or MobaXterm, PuTTY for Windows or others)

{% hint style="info" %}
If you use the **Producer** + **Snark worker** on the same server, you will need more than 16GB RAM. I recommend using a server with 32GB+ RAM.
{% endhint %}

### SSH clients for connecting to the server:

iTerm - <https://iterm2.com/downloads/stable/latest>

MobaXterm - <https://mobaxterm.mobatek.net/download.html>

Termius - <https://termius.com/>

PuTTY - <https://www.putty.org/>


# Создание и проверка ключей

## 1. Установка

### Установка пакетов

```
echo "deb [trusted=yes] http://packages.o1test.net $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/mina.list
sudo apt-get update
sudo apt-get install -y curl unzip mina-mainnet=1.3.0-9b0369c
```

### Установка генератора ключей

```
sudo apt-get install mina-generate-keypair=1.3.0-9b0369c
```

## 2. Создание ключей

При создании ключей вас попросят создать пароль.

### Вариант 1 с помощью пакета:

```
mina-generate-keypair -privkey-path ~/keys/my-wallet
```

### Вариант 2 с помощью докера:

```
sudo docker run  --interactive --tty --rm --volume $(pwd)/keys:/keys minaprotocol/mina-generate-keypair:1.3.0-9b0369c --privkey-path /keys/my-wallet
```

### Устанавливаем права:

```
chmod 700 $HOME/keys
chmod 600 $HOME/keys/my-wallet
```

## 3. Проверка ключей

При проверке ключа вас попросят ввести пароль от него.

### Вариант 1 с помощью пакета:

```
mina-validate-keypair -privkey-path ~/keys/my-wallet
```

### Вариант 2 с помощью докера:

```
sudo docker run --interactive --tty --rm --entrypoint=mina-validate-keypair --volume $(pwd)/keys:/keys minaprotocol/mina-generate-keypair:1.3.0-9b0369c --privkey-path /keys/my-wallet
```

В обоих случаях, если все в порядке с вашими ключами вы получите сообщение:

```
Verified a transaction using specified keypair
```

Оно означает, что ваши ключи проверены.

## 4. Экспорт ключей

Теперь запишем ваш публичный ключ на сервер в файл `.bashrc`, чтобы в следующий раз больше их не экспортировать.

```
echo 'export KEYPATH=$HOME/keys/my-wallet' >> $HOME/.bashrc
echo 'export MINA_PUBLIC_KEY=$(cat $HOME/keys/my-wallet.pub)' >> $HOME/.bashrc
source ~/.bashrc
```


# Варианты запуска ноды

{% hint style="warning" %}
ВАЖНО! Внимательно прочитайте каждый пункт гайда, чтобы не было проблем с запуском.
{% endhint %}

Существует 2 варианта запуска ноды Mina на данный момент.\
Выберите ниже подходящий для вас вариант:

{% content-ref url="/pages/-MH2-f1M6gj9V-mYPz4x" %}
[Broken mention](broken://pages/-MH2-f1M6gj9V-mYPz4x)
{% endcontent-ref %}

### Запуск Mina с Докером

{% content-ref url="/pages/-MGvuPgYF-PjUwG5JIqv" %}
[Запуск Mina с Докером](/russian/varianty-zapuska-nody/zapusk-coda-s-docker)
{% endcontent-ref %}

### Запуск Mina без Докера

{% content-ref url="/pages/-MGvudgBmjl8Etr\_eoCp" %}
[Запуск Mina без Докера](/russian/varianty-zapuska-nody/zapusk-coda-bez-docker)
{% endcontent-ref %}


# Запуск Mina с Докером

## 1. Подготовка к запуску

### 1.1 Настройка Ubuntu

Обновляем пакеты на сервере до новейших версий:

```
sudo apt update && sudo apt upgrade -y
```

Установим и активируем Докер:

```
sudo apt install docker.io curl -y \
&& sudo systemctl start docker \
&& sudo systemctl enable docker
```

### 1.2 Настройка Фаервола

{% hint style="info" %}
Если на вашем VPS сервере есть встроенный Фаервол, то следует там открыть порты 8302 и 8303.\
\
Если же его нет, то следуйте командам ниже:
{% endhint %}

Открываем порты 8302 и 8303:

```
sudo iptables -A INPUT -p tcp --dport 8302:8303 -j ACCEPT
```

## 2. Варианты запуска ноды

{% hint style="warning" %}
Выберите только один вариант запуска из 2-х предложенных ниже (пункт 2.1 или 2.2).
{% endhint %}

### 2.1 Запуск только Производителя блоков (Block Producer):

Описание изменяемых переменных:

`--name mina` - имя для контейнера можно использовать любое, либо оставить так, как есть;\
`--env MINA_PRIVKEY_PASS='YOUR PASS'` - вместо `YOUR PASS` укажите пароль от вашего ключа.\
`--env UPTIME_PRIVKEY_PASS='YOUR PASS'` - вместо `YOUR PASS` укажите пароль от вашего ключа для программы делегации.\
`$KEYPATH` - путь к файлу с приватным ключем `my-wallet`. \
\
! Обязательно:\
`--coinbase-receiver B62qp...` - флаг перенаправления награды за блок на другой адрес.

```
sudo docker run --name mina -d \
--restart always \
-p 8302:8302 \
-p 127.0.0.1:3085:3085 \
-v $(pwd)/keys:/root/keys:ro \
-v $(pwd)/.mina-config:/root/.mina-config \
--env MINA_PRIVKEY_PASS='YOUR PASS' \
--env UPTIME_PRIVKEY_PASS='YOUR PASS' \
minaprotocol/mina-daemon:1.3.1.1-f361ba1-bionic-mainnet daemon \
--block-producer-key $KEYPATH \
--coinbase-receiver $YOUR_ADDRESS \
--peer-list-url https://storage.googleapis.com/mina-seed-lists/mainnet_seeds.txt \
--uptime-submitter-key $KEYPATH \
--uptime-url https://uptime-backend.minaprotocol.com/v1/submit \
--insecure-rest-server \
--open-limited-graphql-port \
--limited-graphql-port 3095 \
--file-log-level Debug \
-log-level Info
```

### 2.1.1 Запуск Снарк Воркера (Snark Worker) к Производителю Блоков:

{% hint style="warning" %}
Если вы не хотите запускать Snark Worker вместе с Производителем Блоков. Вы можете сразу перейти к шагу 3.
{% endhint %}

Установим комиссию Воркера:\
`set-snark-work-fee 0.025` - значение комиссии `0.025` можно сменить на любое другое.

```
sudo docker exec -it mina mina client set-snark-work-fee 0.025
```

Запустим Воркер:

```
sudo docker exec -it mina mina client set-snark-worker -address $MINA_PUBLIC_KEY
```

{% hint style="info" %}
Для работы одновременно Производителя блоков (Block Producer) и Снарк Воркера (Snark Worker) можно настраивать Снарк Стоппер. Чтобы ненадолго останавливать Воркера во время производства блока.

Перейдите по ссылке ниже, чтобы настроить Снарк Стоппер.
{% endhint %}

{% content-ref url="/pages/-MH7JtIQH\_Rkp4cXEkA9" %}
[Настройка Снарк Стоппера](/russian/nastroika-snark-stoppera)
{% endcontent-ref %}

### 2.2 Запуск только Снарк Воркера (без Производителя Блоков)

Описание изменяемых переменных:

`--name mina` - имя для контейнера можно использовать любое, либо оставить так, как есть;

По умолчанию `-work-selection` для Снарк Воркера является случайным `rand`.\
Вы можете изменить это, добавив флаг `-work-selection seq` в конец команды запуска, которая будет работать с заданиями в том порядке, в котором они должны быть включены из состояния сканирования и скорее всего приведет к включению ваших снарков без потенциально длительной задержки;

`set-snark-work-fee 0.025` - значение комиссии Воркера `0.025` можно сменить на любое другое.

```
sudo docker run --name mina -d \
--restart always \
-p 8302:8302 \
-p 127.0.0.1:3085:3085 \
-v $(pwd)/keys:/root/keys:ro \
-v $(pwd)/.mina-config:/root/.mina-config \
minaprotocol/mina-daemon:1.3.1.1-f361ba1-bionic-mainnet daemon \
--peer-list-url https://storage.googleapis.com/mina-seed-lists/mainnet_seeds.txt \
--snark-worker-fee 0.025 \
--run-snark-worker $MINA_PUBLIC_KEY \
--insecure-rest-server \
--file-log-level Debug \
-log-level Info
```

## 3. Просмотр логов

Посмотреть запущенные контейнеры:

```
sudo docker ps -a
```

Логи контейнера с нодой:

```
sudo docker logs --follow mina -f --tail 1000
```

Статус ноды:

```
sudo docker exec -it mina mina client status
```

### 3.1 Альтернативный вывод логов

```
sudo docker exec -it mina mina client status | grep "Block producers"
```

Вывод покажет только строку с запущенным производителем блоков. Пример ниже:

{% code title="#ПРИМЕР" %}

```
root@Mina:~# sudo docker exec -it mina mina client status | grep "Block producers"
Block producers running:         1 (B62qpSphT9prqYrJFio82WmV3u29DkbzGprLAM3pZQM2ZEaiiBmyY82)
```

{% endcode %}

![](/files/-MGxJtwv19_xI6CuqnlT)

## 4. Команды Докера

Остановка контейнера осуществляется командой:

```
sudo docker stop mina
```

Рестарт контейнера

```
sudo docker restart mina
```

Удаление контейнера:

```
sudo docker rm mina
```

Удаление запущенного контейнера:

```
sudo docker rm -f mina
```

## 5. Разное

Удаление папки с конфигом:

```
rm -rf $HOME/.mina-config
```


# Запуск Mina без Докера

{% hint style="warning" %}
Рекомендуем перед запуском использовать `tmux` для запуска нескольких сессий в одном терминале.
{% endhint %}

{% content-ref url="/pages/-MH7JonXY3a0hE\_2YRaL" %}
[Настройка TMUX](/russian/nastroika-tmux)
{% endcontent-ref %}

## 1. Настройка Фаервола

Открываем порты 22, 8302 и 8303 и активируем Firewall:

```
sudo ufw allow 22 \
&& sudo ufw allow 8302 \
&& sudo ufw allow 8303 \
&& yes | sudo ufw enable
```

Проверяем статус открытых портов командой:

```
sudo ufw status
```

{% hint style="info" %}
Если у вас на сервере не установлен UFW, установите его используя команду `sudo apt install ufw`
{% endhint %}

## 2. Установка для macOS

Нужно установить [Homebrew](https://brew.sh/).

```
brew install wget
```

Установка пакетов `coda`.

```
brew install minaprotocol/mina/mina
```

Запуск ноды:

```
brew services start mina
```

Если у вас уже установлен пакет `mina` его нужно обновить командой ниже. Если вы ранее не устанавливали `mina`, то можно эту команду не запускать.

```
brew upgrade mina
```

## 3. Подготовка для `Ubuntu 18.04 / Debian 9`

Создадим папку `.coda-config`:

```
mkdir .mina-config
```

Скачиваем дистрибутив `Mina`:

```
echo "deb [trusted=yes] http://packages.o1test.net $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/mina.list
sudo apt-get update
sudo apt-get install -y curl unzip mina-mainnet=1.3.0-9b0369c
```

## 4. Варианты запуска

### 4.1 Запуск в Сервисе

Настройка файла с флагами:

```
nano .mina-env
```

Копируем и вставляем переменные в файл предварительно вписав ваш пароль от ключа вместо `ВАШ ПАРОЛЬ ДЛЯ КЛЮЧЕЙ и ПУТЬ_К_КЛЮЧУ`:

```
MINA_PRIVKEY_PASS="ВАШ ПАРОЛЬ ДЛЯ КЛЮЧА"
LOG_LEVEL=Info
FILE_LOG_LEVEL=Debug
EXTRA_FLAGS=" --block-producer-key $ПУТЬ_К_КЛЮЧУ"
PEER_LIST_URL=https://storage.googleapis.com/mina-seed-lists/mainnet_seeds.txt
```

Сохраняем и выходим: CTRL+S и CTRL+X

### 4.1.1 Добавление флагов Снарк Воркера (если нужно)

Добавляем в файл `.mina-env` флаги Снарк воркера с вашим ключем и комиссией:

```
EXTRA_FLAGS=" -snark-worker-fee 0.025 -run-snark-worker B62qkWFkU9PDSzAxWWXVcxxHe1nJnfGqLeYbtxDLv5BxPiekGcxLTpj -work-selection seq
```

По умолчанию `-work-selection` для Снарк Воркера является случайным `rand`.\
Вы можете изменить это, добавив флаг `-work-selection seq` в конец команды запуска, которая будет работать с заданиями в том порядке, в котором они должны быть включены из состояния сканирования и скорее всего приведет к включению ваших снарков без потенциально длительной задержки.

### 4.1.2 Запускаем сервис

```
systemctl --user daemon-reload
systemctl --user start mina
systemctl --user enable mina
sudo loginctl enable-linger
```

Просмотр логов:

```
journalctl --user-unit mina -n 1000 -f
```

### 4.2 Запуск ноды в TMUX

Запускаем пустую сессию в Tmux:

```
tmux new -s session
```

Подробнее о TMUX:

{% content-ref url="/pages/-MH7JonXY3a0hE\_2YRaL" %}
[Настройка TMUX](/russian/nastroika-tmux)
{% endcontent-ref %}

И запуск в сессии производим командой:

```
mina daemon \
--peer-list-url https://storage.googleapis.com/mina-seed-lists/mainnet_seeds.txt \
--generate-genesis-proof true
```

**Выходим из сессии командой CTRL+B и теперь жмем D.**

Перед запуском производителя нужно импортировать и разблокировать ключи:

```
mina accounts import -privkey-path $KEYPATH
mina accounts unlock -public-key $MINA_PUBLIC_KEY
```

Запуск Производителя блоков:

```
mina client set-staking -public-key $MINA_PUBLIC_KEY
```

Запуск Снарк Воркера:

```
mina client set-snark-work-fee 0.025
mina client set-snark-worker -address $MINA_PUBLIC_KEY
```

Здесь вы можете установить комиссию Воркера `mina client set-snark-work-fee 0.025`, либо оставить как есть.

Далее переходим в следующий раздел и начинаем с Пункта 2:

{% content-ref url="/pages/-MGy7x7xlgAFx9FUuMmI" %}
[CLI. Импорт ключа, отправка токенов, делегирование](/russian/cli.-sozdanie-klyuchei-import-otpravka-tokenov)
{% endcontent-ref %}


# Обновление ноды для Докера

Простые шаги для обновления ноды.

## 1. Удаление

Остановка и удаление контейнера:

```
sudo docker rm -f mina
```

## 2. Настройка

Удаление всех остановленных контейнеров и неиспользуемых образов:

```
sudo docker system prune -a
```

Скачиваем новое обновление:&#x20;

```
sudo docker pull minaprotocol/mina-daemon:1.3.1.1-f361ba1-bionic-mainnet
```

## 3. Запуск

Все готово к запуску. \
Теперь выберите нужный пункт для запуска из раздела №2 по ссылке ниже:

{% content-ref url="/pages/-MGvuPgYF-PjUwG5JIqv" %}
[Запуск Mina с Докером](/russian/varianty-zapuska-nody/zapusk-coda-s-docker)
{% endcontent-ref %}

## 4. Дополнительно (не обязательно)

Если вам нужно очистить папку с конфигом запустите команду ниже:

```
rm -rf $HOME/.mina-config
```


# Обновление ноды для Сервиса

Простые шаги для обновления ноды в Сервисе.

## 1. Остановка Сервиса

Остановка:

```
systemctl --user stop mina
```

## 2. Настройка

Скачиваем новое обновление:&#x20;

```
echo "deb [trusted=yes] http://packages.o1test.net $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/mina.list
sudo apt-get update
sudo apt-get install -y curl unzip mina-mainnet=1.3.0-9b0369c
```

## 3. Изменение конфигурации

{% hint style="info" %}
Делайте этот пункт только если нужно изменить что-либо в конфигурационных файлах `.mina-env` или файл сервиса`mina.service .`
{% endhint %}

Заходим в файл с флагами:

```
nano .mina-env
```

Изменяем данные, сохраняем и выходим: CTRL+S и CTRL+X

## 4. Запуск

Перезагружаем изменение конфигурации:

```
systemctl --user daemon-reload
```

Запускаем Сервис:

```
systemctl --user restart mina
```

Просмотр логов:

```
journalctl --user-unit mina -n 1000 -f
```


# CLI. Импорт ключа, отправка токенов, делегирование

## Использование CLI

### 1. Для доступа к командам [Mina CLI](https://docs.minaprotocol.com/en/using-mina/cli-reference):

{% hint style="warning" %}
Этот шаг нужно выполнять только если вы запускали ноду с помощью Докера. Если же вы не использовали Докер, переходите сразу к шагу 2.
{% endhint %}

```
sudo docker exec -it mina bash
```

Выход из CLI осуществляется командой:

```
exit
```

### 2. Проверка статуса, состояния узла:

```
mina client status
```

Выглядит это вот так:

![](/files/-MGyL9tsid4-GynCoYdk)

Дождитесь пока нода синхронизируется. В поле `Sync status:` должно быть написано `Synced`. Если в статусе написано `Catched`, значит нужно подождать чуть больше.\
После этого можно приступать к импорту ваших ключей.

### 3. Импортируем ключи

&#x20;Экспортируем приватный ключ:

```
export KEYPATH=$HOME/keys/my-wallet
```

Импорт аккаунта с ключем производим следующей командой:

```
mina accounts import -privkey-path $KEYPATH
```

Список ваших аккаунтов можно посмотреть командой ниже:

```
mina accounts list
```

### 4. Разблокировка аккаунта:

Экспортируем Публичный ключ:

```
export MINA_PUBLIC_KEY=$(cat $HOME/keys/my-wallet.pub)
```

Разблокируем аккаунт, чтобы можно было перемещать токены:

```
mina accounts unlock -public-key $MINA_PUBLIC_KEY
```

В поле ввода пароля пишем ваш пароль от ключа и жмем ENTER.

### 5. Транзакции

Теперь можно отправлять токены.\
\
Вам нужно добавить:\
\- отправителя `-sender`\
\- получателя `-receiver`\
\- комиссию транзакции `-fee`\
\- количество отправляемых токенов `-amount`

```
mina client send-payment \
-sender B62qnJHBeVJqWamtDhWDPwrX7Y5jiXKcMKTuvug9LQ8ictwNTWN7YvJ \
-receiver B62qqV16g8s744GHM6Dph1uhW4fggYwyvtDnVSoRUyYqNvTir3Rqqzx \
-fee 0.01 \
-amount 2
```

#### 5.1. Транзакция с `-memo` (с подписью)

Вам нужно добавить:\
\- подпись`-memo`\
Ваш текст к транзакции.

```
mina client send-payment \
-sender B62qnJHBeVJqWamtDhWDPwrX7Y5jiXKcMKTuvug9LQ8ictwNTWN7YvJ \
-receiver B62qqV16g8s744GHM6Dph1uhW4fggYwyvtDnVSoRUyYqNvTir3Rqqzx \
-fee 0.01 \
-amount 2 \
-memo "Ваш текст"
```

Готово. Токены отправлены.

### 6. Проверим баланс токенов

Баланс токенов проверяем командой ниже с вашим ID токенов:

```
mina client get-balance \
-public-key $MINA_PUBLIC_KEY
```

Мы увидим баланс mina токенов.

### 7. Транзакция делегирования

Вам нужно добавить:\
\- отправителя `-sender`\
\- получателя `-receiver`\
\- комиссию транзакции `-fee`

Флаг `-amount` не указывается, т.к. делегируется весь баланс адреса.

```
mina client delegate-stake \
-sender B62qnJHBeVJqWamtDhWDPwrX7Y5jiXKcMKTuvug9LQ8ictwNTWN7YvJ \
-receiver B62qqV16g8s744GHM6Dph1uhW4fggYwyvtDnVSoRUyYqNvTir3Rqqzx \
-fee 0.01
```

## Другие команды (В ДАННЫЙ МОМЕНТ НЕ ИСПОЛЬЗУЮТСЯ)

{% hint style="warning" %}
Внимание!\
Следующие пункты с 1 по 4 в данный момент не используются.&#x20;
{% endhint %}

### 1. Создание токенов

Теперь создадим токены:

```
mina client create-token \
-sender $MINA_PUBLIC_KEY
```

В ответ мы получим следующее:

{% code title="#ПРИМЕР ОТВЕТА " %}

```
Dispatched create new token command with ID 2cUDm3QoJ14znWj5LxN8hjwwuvtwi9FGXcy56i4dPvYizPNwr3V9c9ePYxy3pJKjgogNx28jwHhqupi6wHFgXBmU5iX27iK1zUvJarj6wJsUG8segWXc4LGPed66YbYk3u9HiWw4v8cYYEqcy1mU6hqfj5JPMPthEBifxUMHZTqCwZmYWSdiERxB6PtPEdXVraWaYPVU4Q8vtpSN7oSTK1AXyXLYYR835CBrNSmgbLvoBDNroCKwcQrzw4b76BFNLe6EuWvBcMgX6npeeAbPg8z8iJ4PKz3gA64o1Y72kCrqyqus718LwXcmp5jxsYvJB2CJHzyZ
```

{% endcode %}

### 2. Получим ID токенов

Чтобы проводить следующие операции нам нужно знать ID токенов. Получим его следующей командой:

```
mina client get-tokens \
-public-key $MINA_PUBLIC_KEY
```

В ответ мы получим следующее:

{% code title="#ПРИМЕР ОТВЕТА" %}

```
Accounts are held for token IDs:
1
```

{% endcode %}

### 3. Минт токенов

Чтобы сминтить новые токены нужно выполнить команду `mint-tokens`. Будут созданы 1,000 токенов в учетной записи отправителя транзакции под номером token ID 2.

```
mina client mint-tokens \
-sender $MINA_PUBLIC_KEY \
-token 2 \
-amount 10
```

Проверим баланс командой (баланс появится не сразу, нужно подождать около 5 минут):

```
mina client get-balance \
-token 2 \
-public-key $MINA_PUBLIC_KEY
```

Через некоторое время мы должны увидеть на балансе 1,000 mina токенов.

{% code title="#ПРИМЕР ОТВЕТА" %}

```
mina client get-balance \
-token 2 \
-public-key $MINA_PUBLIC_KEY
Balance: 1000 tokens
```

{% endcode %}

### 4. Отправка токенов

Теперь можно отправить токены.\
Чтобы это сделать нам сначала нужно добавить получателя командой ниже:

```
mina client create-token-account \
-sender $MINA_PUBLIC_KEY \
-receiver B62qoDWfBZUxKpaoQCoFqr12wkaY84FrhxXNXzgBkMUi2Tz4K8kBDiv \
-token 2
```

Например отправим 50 токенов. \
В поле `-memo "My First TX"` вместо `My First TX` можно вписать что угодно. Либо оставить так, как есть.

```
mina client send-payment \
-sender $MINA_PUBLIC_KEY \
-receiver B62qoDWfBZUxKpaoQCoFqr12wkaY84FrhxXNXzgBkMUi2Tz4K8kBDiv \
-token 2 \
-fee 0.1 \
-amount 50
```

Готово. Токены отправлены.


# Настройка TMUX

## 1. Установка TMUX

```
sudo apt install tmux -y
```

### 1.1 Настройка TMUX

Создание сессии:

```
tmux new -s session1
```

Где имя сессии `session1` можно написать любое.

Выход из сессии осуществляется клавишами:

> CTRL+B->D

#### Вернуться в сессию:

```
tmux attach -t session1
```

#### Посмотреть рабочие сессии:

```
tmux ls
```

#### Удаление сессии:

```
tmux kill-session -t session1
```


# Настройка Снарк Стоппера

v1.2.4

## Описание

Скрипт будет полезен тем, кто запускает Производителя блоков и Снарк Воркера на одном сервере. Воркер использует все ваши ядра процессора на 100%, что негативно сказывается на производителе блоков. Скрипт позволяет остановить Снарк Воркера за 3 минуты до производства блока и включит его опять через 10 минут.

{% hint style="info" %}
Данный скрипт создан пользователем @whataday2day#1271\
<https://github.com/c29r3/mina-snark-stopper>
{% endhint %}

## Подготовка

### Установка JSON

```
sudo apt install jq -y
```

### Устанавливаем пакет git, если он не установлен на сервере:

```
yes | sudo apt install git
```

{% hint style="info" %}
Ваш snark worker должен быть ЗАПУЩЕН.
{% endhint %}

Проверьте файл конфигурации. Есть несколько вариантов, которые вы можете переназначить.

Разблокируем приватную сеть:

```
sudo iptables -D OUTPUT -d 172.16.0.0/12 -j DROP
```

## 1. Установка без Докера:

{% hint style="info" %}
Запускать нужно в новой сессии TMUX
{% endhint %}

```
sudo apt-get update \
&& sudo apt-get install python3-venv tmux git -y \
&& git clone https://github.com/c29r3/mina-snark-stopper.git \
&& cd mina-snark-stopper \
&& python3 -m venv venv \
&& source ./venv/bin/activate \
&& pip3 install -r requirements.txt
```

Теперь нужно добавить в конфиг стоппера ваш публичный ключ и комиссию Воркера.\
Открываем конфиг командой:

```
nano $HOME/mina-snark-stopper/config.yml
```

В строке `WORKER_PUB_KEY: YOUR_PUBLIC_KEY` измените `YOUR_PUBLIC_KEY` на `$MINA_PUBLIC_KEY`\
В строке `WORKER_FEE: 1` замените значение комиссии например с 1 на 0.25

### 1.1 Запуск

```
tmux new -s snark-stopper -d venv/bin/python3 snark-stopper.py
```

Просмотр логов:

```
tmux attach -t snark-stopper
```

## 2. Установка с Докером:

Скачиваем файл с конфигом:

```
curl -s https://raw.githubusercontent.com/c29r3/mina-snark-stopper/master/config.yml > config.yml; \
touch snark_stopper.log
```

Теперь нужно добавить в конфиг стоппера ваш публичный ключ и комиссию Воркера.\
Открываем конфиг командой:

```
nano $HOME/config.yml
```

В строке `WORKER_PUB_KEY: YOUR_PUBLIC_KEY` измените `YOUR_PUBLIC_KEY` на `$MINA_PUBLIC_KEY`\
В строке `WORKER_FEE: 1` замените значение комиссии например с 1 на 0.25

Запускаем контейнер:

```
touch snark_stopper.log; \
chmod 666 snark_stopper.log; \
sudo docker run -d \
--volume $(pwd)/config.yml:/mina/config.yml \
--volume $(pwd)/snark_stopper.log:/mina/snark_stopper.log \
--net=host \
--restart always \
--name snark-stopper \
c29r3/snark-stopper
```

Просмотр логов:

```
sudo docker logs -f snark-stopper
```

### 3. Решения ошибок

Если снарк-стоппер не может подключиться к порту `3085`:

Нужно проверить доступность порта:

```
nc -t -vv localhost 3085
```

Результат должен быть примерно таким:\
`Connection to localhost 3085 port [tcp/*] succeeded!`

Если соединение зависает, то возможны следующие варианты:

* Доступ к порту `3085` заблокирован через `ufw\iptables`
* Вы не добавили флаг контейнера докеров `-p 127.0.0.1:3085:3085`
* Узел еще не синхронизирован. По этой причине стоппер не может подключиться

Порт отвечает, но стоппер по-прежнему не может подключиться:

```
sudo iptables -D OUTPUT -d 172.16.0.0/12 -j DROP
```

это из-за блокировки частных подсетей, которые использует докер.

#### Обновить образ докера

После выполнения приведенной ниже команды перейдите к шагу 2.

```
sudo docker rm -f snark-stopper \
&& sudo docker pull c29r3/snark-stopper
```

### 4. Обновление

Удаляем файл с конфигом и контейнер и скачиваем новый образ:

```
sudo docker rm -f snark-stopper; \
curl -s https://raw.githubusercontent.com/c29r3/mina-snark-stopper/master/config.yml > config.yml; \
sudo docker pull c29r3/snark-stopper
```

Далее продолжаем с пункта 1 или 2.

### 5. Удаление

```
rm -rf mina-snark-stopper \
&& sudo docker rm -f snark-stopper \
&& sudo docker system prune -af
```


# Generating and verifying keys

## 1. Installing

### Installing packages

```
echo "deb [trusted=yes] http://packages.o1test.net $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/mina.list
sudo apt-get update
sudo apt-get install -y curl unzip mina-mainnet=1.3.0-9b0369c
```

### Installing the key generator

```
sudo apt-get install mina-generate-keypair=1.3.0-9b0369c
```

## 2. Generating keys

When creating keys, you will be asked to create a password.

### Option 1 with a package:

```
mina-generate-keypair -privkey-path ~/keys/my-wallet
```

### Option 2 using docker:

```
sudo docker run  --interactive --tty --rm --volume $(pwd)/keys:/keys minaprotocol/mina-generate-keypair:1.3.0-9b0369c --privkey-path /keys/my-wallet
```

### Set the rights:

```
chmod 700 $HOME/keys
chmod 600 $HOME/keys/my-wallet
```

## 3. Key verification

When checking the key, you will be asked to enter the password from it.

### Option 1 with a package:

```
mina-validate-keypair -privkey-path ~/keys/my-wallet
```

### Option 2 using docker:

```
sudo docker run --interactive --tty --rm --entrypoint=mina-validate-keypair --volume $(pwd)/keys:/keys minaprotocol/mina-generate-keypair:1.3.0-9b0369c -privkey-path /keys/my-wallet
```

In both cases, if everything is ok with your keys, you will receive a message:

```
Verified a transaction using specified keypair
```

It means your keys have been verified.

## 4. Exporting keys

Now let's write your public key to the server in the `.bashrc` file so that we don't export them again next time.

```
echo 'export KEYPATH=$HOME/keys/my-wallet' >> $HOME/.bashrc
echo 'export MINA_PUBLIC_KEY=$(cat $HOME/keys/my-wallet.pub)' >> $HOME/.bashrc
source ~/.bashrc
```


# Node launch options

{% hint style="warning" %}
IMPORTANT! Read each point of the guide carefully so that there are no problems with the launch.
{% endhint %}

There are 2 options for running a Mina node at the moment. \
Please select the option that suits you below:

{% content-ref url="/pages/-MH7WomlFbHuMqAPixi7" %}
[Broken mention](broken://pages/-MH7WomlFbHuMqAPixi7)
{% endcontent-ref %}

### Running Mina with Docker

{% content-ref url="/pages/-MH7WpktF4yn4v6fnDEI" %}
[Running Mina with Docker](/english/node-launch-options/running-mina-with-docker)
{% endcontent-ref %}

### Running Mina without Docker

{% content-ref url="/pages/-MH7WqaZD3cVYCTv1njq" %}
[Running Mina without Docker](/english/node-launch-options/running-coda-without-docker)
{% endcontent-ref %}


# Running Mina with Docker

## 1. Preparation

### 1.1 Ubuntu setup

Update the packages on the server to the latest versions:

```
sudo apt update && sudo apt upgrade -y
```

Install and activate Docker:

```
sudo apt install docker.io curl -y \
&& sudo systemctl start docker \
&& sudo systemctl enable docker
```

### 1.2 Firewall configuration

{% hint style="info" %}
If your VPS server has a built-in Firewall, then you should open ports 8302 and 8303 there.

If not, then follow the commands below:
{% endhint %}

Open ports 8302 and 8303:

```
sudo iptables -A INPUT -p tcp --dport 8302:8303 -j ACCEPT
```

## 2. Node launch options

{% hint style="warning" %}
Choose only one launch option from the 2 suggested below (paragraph 2.1 or 2.2).
{% endhint %}

### 2.1 Run only Block Producer:

Variables description:\
\
`--name mina` - you can use any name for the container, or leave it as it is;\
`--env MINA_PRIVKEY_PASS='YOUR_PASS'` - instead `YOUR PASS` enter the password for your key.

`--env UPTIME_PRIVKEY_PASS='YOUR_PASS'` - instead `YOUR PASS` enter the password for your key for uptime system.\
`$KEYPATH` - path to the file with the private key `my-wallet`.&#x20;

Optional:\
`--coinbase-receiver B62qp...` - flag to redirect block reward to another address.

```
sudo docker run --name mina -d \
--restart always \
-p 8302:8302 \
-p 127.0.0.1:3085:3085 \
-v $(pwd)/keys:/root/keys:ro \
-v $(pwd)/.mina-config:/root/.mina-config \
--env MINA_PRIVKEY_PASS='YOUR PASS' \
--env UPTIME_PRIVKEY_PASS='YOUR PASS' \
minaprotocol/mina-daemon:1.3.1.1-f361ba1-bionic-mainnet daemon \
--block-producer-key $KEYPATH \
--coinbase-receiver $YOUR_ADDRESS \
--peer-list-url https://storage.googleapis.com/mina-seed-lists/mainnet_seeds.txt \
--uptime-submitter-key $KEYPATH \
--uptime-url https://uptime-backend.minaprotocol.com/v1/submit \
--insecure-rest-server \
--open-limited-graphql-port \
--limited-graphql-port 3095 \
--file-log-level Debug \
-log-level Info
```

### 2.1.1 Run Snark Worker to Block Producer:

{% hint style="warning" %}
If you don't want to launch Snark Worker. You can go directly to step 3.
{% endhint %}

Let's set the Worker fee:\
`set-snark-work-fee 0.025` - the commission value of `0.025` can be changed to any other.

```
sudo docker exec -it mina mina client set-snark-work-fee 0.025
```

Run Worker:

```
sudo docker exec -it mina mina client set-snark-worker -address $MINA_PUBLIC_KEY
```

{% hint style="info" %}
For both Block Producer and Snark Worker to work, you may configure the Snark Stopper. To briefly stop the Worker during block production.&#x20;

Follow the link below to set up your Snark Stopper.
{% endhint %}

{% content-ref url="/pages/-MH7WdZTTabK40y1YIJJ" %}
[Setting up Snark Stopper](/english/setting-up-snark-stopper)
{% endcontent-ref %}

### 2.2 Run only Snark Worker (without Block Producer)

First, let's launch a node without a Producer and a Snark.

Variables description:

`--name mina` - you can use any name for the container, or leave it as it is;

By default, the `-work-selection` for a snark worker is random `rand`. You can change this by adding the `-work-selection seq` flag to the command, which will work on jobs in the order required to be included from the scan state and will likely result in your snarks being included without a potentially lengthy delay;

`set-snark-work-fee 0.025` - the commission value of `0.025` can be changed to any other.

```
sudo docker run --name mina -d \
--restart always \
-p 8302:8302 \
-p 127.0.0.1:3085:3085 \
-v $(pwd)/keys:/root/keys:ro \
-v $(pwd)/.mina-config:/root/.mina-config \
minaprotocol/mina-daemon:1.3.1.1-f361ba1-bionic-mainnet daemon \
--peer-list-url https://storage.googleapis.com/mina-seed-lists/mainnet_seeds.txt \
--snark-worker-fee 0.025 \
--run-snark-worker $MINA_PUBLIC_KEY \
--insecure-rest-server \
--file-log-level Debug \
-log-level Info
```

## 3. Viewing logs

View running containers:

```
sudo docker ps -a
```

Node container logs:

```
sudo docker logs --follow mina -f --tail 1000
```

Node status:

```
sudo docker exec -it mina mina client status
```

### 3.1 Alternative log output

```
sudo docker exec -it mina mina client status | grep "Block producers"
```

The output will only show the line with the block producer running. See example below:

{% code title="#EXAMPLE" %}

```
root@Coda:~# sudo docker exec -it mina mina client status | grep "Block producers"
Block producers running:         1 (B62qpSphT9prqYrJFio82WmV3u29DkbzGprLAM3pZQM2ZEaiiBmyY82)
```

{% endcode %}

![](/files/-MGxJtwv19_xI6CuqnlT)

## 4. Docker commands

The container is stopped by the command:

```
sudo docker stop mina
```

Restart container:

```
sudo docker restart mina
```

Removing a container:

```
sudo docker rm mina
```

Removing a running container:

```
sudo docker rm -f mina
```

## 5. Others

Deleting config folder:

```
rm -rf ~/.coda-config
```


# Running Mina without Docker

{% hint style="warning" %}
We recommend using `tmux`before starting to run multiple sessions in one terminal.
{% endhint %}

{% content-ref url="/pages/-MH7Wd0JpbeQc\_HU4GwE" %}
[Setting up TMUX](/english/setting-up-tmux)
{% endcontent-ref %}

## 1. Firewall configuration

Open ports 22, 8302 and 8303 and activate the Firewall:

```
sudo ufw allow 22 \
&& sudo ufw allow 8302 \
&& sudo ufw allow 8303 \
&& yes | sudo ufw enable
```

We check the status of open ports with the command:

```
sudo ufw status
```

{% hint style="info" %}
If you do not have UFW installed on your server, install it using the command `sudo apt install ufw`
{% endhint %}

## 2. Installation for macOS

Need to install [Homebrew](https://brew.sh/).

```
brew install wget
```

Installing packages `coda`.

```
brew install minaprotocol/mina/mina
```

Running a node:

```
brew services start mina
```

If you already have the `mina` package installed, you need to update it with the command below. If you have not previously installed `mina`, then you can skip this command.

```
brew upgrade mina
```

## 3. Installation for `Ubuntu 18.04 / Debian 9`

Let's create a folder `.coda-config`:

```
mkdir .mina-config
```

Downloading package `Mina`:

```
echo "deb [trusted=yes] http://packages.o1test.net $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/mina.list
sudo apt-get update
sudo apt-get install -y curl unzip mina-mainnet=1.3.0-9b0369c
```

## 4. Launch options

### 4.1 Launch in Service

Setting up the `mina-env` file:

```
nano .mina-env
```

We copy and paste the variables into the file after entering your password from the key instead of `YOUR PASS FOR KEYS and KEYPATH`:

```
MINA_PRIVKEY_PASS="YOUR PASS FOR KEYS"
LOG_LEVEL=Info
FILE_LOG_LEVEL=Debug
EXTRA_FLAGS=" --block-producer-key $KEYPATH"
PEER_LIST_URL=https://storage.googleapis.com/mina-seed-lists/mainnet_seeds.txt
```

Save ans exit: CTRL+S and CTRL+X

### 4.1.1 Adding Snark Worker flags (if needed)

Add to file `.mina-env` Snark worker flags with your key and fee:

```
EXTRA_FLAGS=" -snark-worker-fee 0.025 -run-snark-worker B62qkWFkU9PDSzAxWWXVcxxHe1nJnfGqLeYbtxDLv5BxPiekGcxLTpj -work-selection seq -file-log-level Debug "
```

By default, the `-work-selection` for a snark worker is random `rand`. You can change this by adding the `-work-selection seq` flag to the command, which will work on jobs in the order required to be included from the scan state and will likely result in your snarks being included without a potentially lengthy delay.

### 4.1.2 Start the service

```
systemctl --user daemon-reload
systemctl --user start mina
systemctl --user enable mina
sudo loginctl enable-linger
```

Viewing logs:

```
journalctl --user-unit mina -n 1000 -f
```

### 4.2 Running a node in TMUX

Start an empty session in Tmux:

```
tmux new -s session
```

More about TMUX:

{% content-ref url="/pages/-MH7Wd0JpbeQc\_HU4GwE" %}
[Setting up TMUX](/english/setting-up-tmux)
{% endcontent-ref %}

And launch in session with the command:

```
mina daemon \
--peer-list-url https://storage.googleapis.com/mina-seed-lists/mainnet_seeds.txt \
--generate-genesis-proof true
```

Before starting the block producer, you need to import and unlock the keys:

```
mina accounts import -privkey-path $KEYPATH
mina accounts unlock -public-key $MINA_PUBLIC_KEY
```

Run Block Producer:

```
mina client set-staking -public-key $MINA_PUBLIC_KEY
```

Run Snark Worker:

```
mina client set-snark-work-fee 0.025
mina client set-snark-worker -address $MINA_PUBLIC_KEY
```

Here you can set the Worker commission `coda client set-snark-work-fee 0.25`, or leave it as it is.&#x20;

Next, go to the next section and start with Point 2:

{% content-ref url="/pages/-MH7WcgJiff6dBI859cZ" %}
[CLI. Key import, sending tokens](/english/cli.-key-import-sending-tokens)
{% endcontent-ref %}


# Update for Docker

Simple steps to update a node.

## 1. Deleting

Stopping and removing container:

```
sudo docker rm -f mina
```

## 2. Settings

Removing all stopped containers and unused images:

```
sudo docker system prune -a
```

Downloading the new update:

```
sudo docker pull minaprotocol/mina-daemon:1.3.1.1-f361ba1-bionic-mainnet
```

## 3. Launch

Everything is ready to launch. \
Now select the required item to start from section #2 by the link below:

{% content-ref url="/pages/-MH7WpktF4yn4v6fnDEI" %}
[Running Mina with Docker](/english/node-launch-options/running-mina-with-docker)
{% endcontent-ref %}

## 4. Optional

If you need to clear the config folder, run the command below:

```
rm -rf $HOME/.mina-config
```


# Update for Service

Simple steps to update a node in the Service.

## 1. Stopping the Service

Stopping:

```
systemctl --user stop mina
```

## 2. Settings

Downloading the new update:

```
echo "deb [trusted=yes] http://packages.o1test.net $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/mina.list
sudo apt-get update
sudo apt-get install -y curl unzip mina-mainnet=1.3.0-9b0369c
```

## 3. Change configuration

{% hint style="info" %}
Do this item only if you need to change something in the configuration files. `.mina-env` or service file`mina.service .`
{% endhint %}

Go to the file with flags:

```
nano .mina-env
```

Changing data then save and exit: CTRL+S and CTRL+X

## 4. Launch

Reload the configuration change:

```
systemctl --user daemon-reload
```

Start the Service:

```
systemctl --user restart mina
```

Viewing logs:

```
journalctl --user-unit mina -n 1000 -f
```


# CLI. Key import, sending tokens

## Using CLI

### 1. To access [Mina CLI](https://minaprotocol.com/docs/cli-reference) commands :

{% hint style="warning" %}
This step only needs to be done if you started the node using Docker. If you haven't used Docker, skip straight to step 2.
{% endhint %}

```
sudo docker exec -it mina bash
```

The CLI is exited with the command:

```
exit
```

### 2. Checking status, node status:

```
mina client status
```

It looks like this:

![](/files/-MGyL9tsid4-GynCoYdk)

Wait for the node to sync. The `Sync status:` field should say `Synced`. If the status says `Catched`, then you need to wait a little longer. After that you can start importing your keys.

### 3. Importing keys

Exporting the private key:

```
export KEYPATH=$HOME/keys/my-wallet
```

&#x20;We import an account with a key with the following command:

```
mina accounts import -privkey-path $HOME/keys/my-wallet
```

The list of your accounts can be viewed with the command below:

```
mina accounts list
```

### 4. Account unlocking:

First, let's export the Public Key:

```
export MINA_PUBLIC_KEY=$(cat $HOME/keys/my-wallet.pub)
```

Let's unlock the account so that you can move tokens:

```
mina accounts unlock -public-key $MINA_PUBLIC_KEY
```

In the password input field, write your password from the key and press ENTER.

### 5. Transactions

Now you can send tokens.

You need to add:

* sender `-sender`
* recipient `-receiver`
* transaction fee `-fee`
* the number of tokens sent `-amount`

```
mina client send-payment \
-sender B62qnJHBeVJqWamtDhWDPwrX7Y5jiXKcMKTuvug9LQ8ictwNTWN7YvJ \
-receiver B62qqV16g8s744GHM6Dph1uhW4fggYwyvtDnVSoRUyYqNvTir3Rqqzx \
-fee 0.01 \
-amount 2
```

Done. Tokens have been sent.

#### 5.1. Transaction with `-memo` (with signature)

You need to add:

* signature `-memo`

Your text for the transaction.

```
mina client send-payment \
-sender B62qnJHBeVJqWamtDhWDPwrX7Y5jiXKcMKTuvug9LQ8ictwNTWN7YvJ \
-receiver B62qqV16g8s744GHM6Dph1uhW4fggYwyvtDnVSoRUyYqNvTir3Rqqzx \
-fee 0.01 \
-amount 2 \
-memo "Your text"
```

Done. Tokens have been sent.

### 6. Check the balance of tokens

The token balance is checked by the command below with your token ID:

```
mina client get-balance \
-public-key $MINA_PUBLIC_KEY
```

We will see the balance of mina tokens.

### 7. Delegation transaction

You need to add:

* sender `-sender`
* recipient `-receiver`
* transaction fee `-fee`

Flag `-amount` not specified, because the entire balance of the address is delegated.

```
mina client delegate-stake \
-sender B62qnJHBeVJqWamtDhWDPwrX7Y5jiXKcMKTuvug9LQ8ictwNTWN7YvJ \
-receiver B62qqV16g8s744GHM6Dph1uhW4fggYwyvtDnVSoRUyYqNvTir3Rqqzx \
-fee 0.01
```

## Other Commands (NOT USED CURRENTLY)

{% hint style="warning" %}
Attention! \
Points from 1 to 4 are not currently used.
{% endhint %}

### 1. Token creation

Now let's create tokens:

```
mina client create-token \
-sender $MINA_PUBLIC_KEY
```

In response, we get the following:

{% code title="#EXAMPLE OF ANSWER " %}

```
Dispatched create new token command with ID 2cUDm3QoJ14znWj5LxN8hjwwuvtwi9FGXcy56i4dPvYizPNwr3V9c9ePYxy3pJKjgogNx28jwHhqupi6wHFgXBmU5iX27iK1zUvJarj6wJsUG8segWXc4LGPed66YbYk3u9HiWw4v8cYYEqcy1mU6hqfj5JPMPthEBifxUMHZTqCwZmYWSdiERxB6PtPEdXVraWaYPVU4Q8vtpSN7oSTK1AXyXLYYR835CBrNSmgbLvoBDNroCKwcQrzw4b76BFNLe6EuWvBcMgX6npeeAbPg8z8iJ4PKz3gA64o1Y72kCrqyqus718LwXcmp5jxsYvJB2CJHzyZ
```

{% endcode %}

### 2. Get the ID of the tokens

To carry out the following operations, we need to know the ID of the tokens. We get it with the following command:

```
mina client get-tokens \
-public-key $MINA_PUBLIC_KEY
```

In response, we get the following:

{% code title="#EXAMPLE OF ANSWER" %}

```
Accounts are held for token IDs:
1
```

{% endcode %}

### 3. Mint tokens

To mince new tokens, you need to run the `mint-tokens` command. 1,000 tokens will be created in the account of the sender of the transaction under token ID 2.

```
mina client mint-tokens \
-sender $MINA_PUBLIC_KEY \
-token 2 \
-amount 10
```

Let's check the balance with the command (the balance will not appear immediately, you need to wait about 5 minutes):

```
mina client get-balance \
-token 2 \
-public-key $MINA_PUBLIC_KEY
```

After a while, we should see 1,000 coda tokens on our balance.

{% code title="#EXAMPLE OF ANSWER" %}

```
mina client get-balance \
-token 2 \
-public-key $MINA_PUBLIC_KEY
Balance: 1000 tokens
```

{% endcode %}

### 4. Sending tokens

Now you can send tokens. \
To do this, we first need to add a recipient with the command below:

```
mina client create-token-account \
-sender $MINA_PUBLIC_KEY \
-receiver B62qoDWfBZUxKpaoQCoFqr12wkaY84FrhxXNXzgBkMUi2Tz4K8kBDiv \
-token 2
```

For example, let's send 50 tokens. \
In the `-memo "My First TX"` field, instead of `My First TX`, you can enter anything you want. Or leave it as it is.

```
mina client send-payment \
-sender $MINA_PUBLIC_KEY \
-receiver B62qoDWfBZUxKpaoQCoFqr12wkaY84FrhxXNXzgBkMUi2Tz4K8kBDiv \
-token 2 \
-fee 0.1 \
-amount 50
```

Done. Tokens have been sent.


# Setting up TMUX

## 1. Install TMUX

```
sudo apt install tmux -y
```

### 1.1 Configuring TMUX

Session creation:

```
tmux new -s session1
```

Where the session name `session1` can be written any.

Exit from the session using the keys:

> CTRL+B->D

#### Return to session:

```
tmux attach -t session1
```

#### View working sessions:

```
tmux ls
```

#### Deleting a session:

```
tmux kill-session -t session1
```


# Setting up Snark Stopper

v1.2.4

## Description

The script will be useful for those who run the Block Producer and Snark Worker on the same server. Worker uses all your CPU cores 100%, which negatively affects the block producer. The script allows you to stop the Worker Snark 3 minutes before the block is produced and turn it on again after 10 minutes.

{% hint style="info" %}
This script was created by the user @whataday2day#1271\
<https://github.com/c29r3/mina-snark-stopper>
{% endhint %}

## Preparation

### Install JSON

```
sudo apt install jq -y
```

### Install the git package if it is not installed on the server:

```
yes | sudo apt install git
```

{% hint style="info" %}
Your snark worker should be RUNNING.
{% endhint %}

Check the config file. There are several options that you can remap.

Unblock the private network:

```
sudo iptables -D OUTPUT -d 172.16.0.0/12 -j DROP
```

### 1. Install without Docker:

{% hint style="info" %}
You need to run in a new TMUX session
{% endhint %}

```
sudo apt-get update \
&& sudo apt-get install python3-venv tmux git -y \
&& git clone https://github.com/c29r3/mina-snark-stopper.git \
&& cd mina-snark-stopper \
&& python3 -m venv venv \
&& source ./venv/bin/activate \
&& pip3 install -r requirements.txt
```

Now you need to add your public key and Worker fee to the stopper config. Open the config with the command:

```
nano $HOME/mina-snark-stopper/config.yml
```

In the `WORKER_PUB_KEY: YOUR_PUBLIC_KEY` line, change `YOUR_PUBLIC_KEY` to `$MINA_PUBLIC_KEY` In the line `WORKER_FEE: 1`, replace the commission value, for example, from 1 to 0.025&#x20;

Done.

### 1.1 Run

```
tmux new -s snark-stopper -d venv/bin/python3 snark-stopper.py
```

Logs:

```
tmux attach -t snark-stopper
```

### 2. Install with Docker:

Download the config file:

```
curl -s https://raw.githubusercontent.com/c29r3/mina-snark-stopper/master/config.yml > config.yml; \
touch snark_stopper.log
```

Now you need to add your public key and Worker commission to the stopper config. \
Open the config with the command:

```
nano $HOME/config.yml
```

In the `WORKER_PUB_KEY: YOUR_PUBLIC_KEY` line, change `YOUR_PUBLIC_KEY` to `$MINA_PUBLIC_KEY` In the line `WORKER_FEE: 1`, replace the commission value, for example, from 1 to 0.025&#x20;

Run container:

```
touch snark_stopper.log; \
chmod 666 snark_stopper.log; \
sudo docker run -d \
--volume $(pwd)/config.yml:/mina/config.yml \
--volume $(pwd)/snark_stopper.log:/mina/snark_stopper.log \
--net=host \
--restart always \
--name snark-stopper \
c29r3/snark-stopper
```

Logs:

```
sudo docker logs -f snark-stopper
```

### 3. Troubleshooting

If the snark-stopper can't connect to port `3085`:

Check port availability:

```
nc -t -vv localhost 3085
```

Output should be something like this:\
`Connection to localhost 3085 port [tcp/*] succeeded!`

If the connection hangs, then the following options are possible:

* Access to port `3085` is blocked via ufw\iptables
* You did not add a docker container flag `-p 127.0.0.1:3085:3085`
* Node is not synced yet. For this reason the stopper can't connect

Port responds, but the stopper still can't connect:

```
sudo iptables -D OUTPUT -d 172.16.0.0/12 -j DROP
```

it's because of the blocking of private subnets that the docker uses.

**Update docker image**

After running the command below, go to step 2

```
sudo docker rm -f snark-stopper \
&& sudo docker pull c29r3/snark-stopper
```

### 4. How to Update

Delete the config file and container and download the new image:

```
sudo docker rm -f snark-stopper; \
curl -s https://raw.githubusercontent.com/c29r3/mina-snark-stopper/master/config.yml > config.yml; \
sudo docker pull c29r3/snark-stopper
```

Then we continue from point 1 or 2.

### 5. Uninstall

```
rm -rf mina-snark-stopper \
&& sudo docker rm -f snark-stopper \
&& sudo docker system prune -af
```


