Процесс "выращивания" крипто монет CHIA состоит в подготовке "полей" ("плотов" / "plots") и последующем контроле за готовыми плотами.
Следует разделить процессы:
- создание плотов (plotting) - крайне высокозатратный процесс требующий значительной процессорной мощности , и высокоскоростной дисковой подсистемы на базе NVMe
- выращивание монет (farming) - очень простой и малозатратный процесс контроля за текущей крипто-цепочкой и поиска решения на готовых плотах.
В общем случае роли можно совместить в рамках одной системы.
На бытовом уровне процесс получения выигрыша очень похож на классическое лото, в котором на руках игроков находятся карточки (плоты), а система де-централизованно (без единого центра управления) сообщает каждому пользователю текущую выигрышную комбинацию. Первый заявивший о наличии у него выигрышной карты - получает текущий приз. Чем больше у игрока карточек-полей, тем выше вероятность выигрыша. Каждый раунд обычно занимает от 1 до 10 минут (новая комбинация появляется вместе с заявкой на выигрыш в предыдущем раунде)
Более детально обработчик крипто-цепочки состоит их следующих служб:
- full-node : базовый сервис осуществляющий коммуникацию между аналогичными узлами в интернете с целью создания децентрализованной сети. Его задачей является создание и поддержание актуальной базы данных крипто-цепочки а так же заявления своих прав оппонентам в случае нахождения выигрыша
- wallet : кошелек , из общей базы данных крипто-цепочки извлекает информацию о транзакциях и балансе одной (или нескольких) пар крипто ключей (пара крипто ключей задается мнемонической фразой). Так же формирует информацию о исходящих транзакциях.
- farmer : процесс на основании знаний о актуальной выигрышной комбинации в крипто-цепочке и с использованием пары крипто ключей формирует запрос к харвестеру для поиска решения, и осуществляет его проверку в случае нахождения
- harvester : процесс осуществляющий поиск на дисках среди плотов согласно запросу от процесса farmer
В задаче оптимизации процесса выращивания, при использовании уже готовых плотов - возможно вынесение ролей full-node,wallet,farmer на централизованный сервер (в том числе виртуальный), и использованием лишь роли harvester на каждом из контролирующих дисковую подсистему серверов. Аппаратные требования к серверу с такой ролью резко понижаются вплоть до однопроцессорных систем с малым количеством RAM (лишь бы поддерживал доступ к дискам)
Используется базовый серверный дистрибутив ubuntu LTS 20.4 Устанавливается штатным образом на любой относительно небольшой носитель >=32GB
https://releases.ubuntu.com/20.04/ubuntu-20.04.2-live-server-amd64.iso Выбираем желаемый диск под систему, всё по умолчанию. Из дополнительных опций выбираем лишь OpenSSH Server. При установке задаем желаемое имя машины а так же рядового пользователя системы например user / P@ssw0rd
логинимся в систему с консоли или по ssh и переключаемся на рута
- посредством программы Putty стандартно подключаемся по ssh на адрес машины.
- на приглашение имени пользователя user: user, на password: P@ssw0rd
- повышение привилегий $ sudo -i # пароль P@ssw0rd
по умолчанию DHCP, можно пропустить пункт узнать адрес
ip a
если нужна статика:
nano /etc/netplan/00-installer-config.yaml крайне чувствителен к пробелам и табуляциям и переносам строки по unix style в случае ошибок убрать все промежутки и переносы и задать по новой
network:
version: 2
renderer: NetworkManager
ethernets:
ens33:
dhcp4: no
addresses: [192.168.148.14/24]
gateway4: 192.168.148.1
nameservers:
addresses: [8.8.8.8]
netplan generate
netplan apply
apt-get update
apt-get upgrade
sudo apt-get install python3.8-venv python3-distutils python3.8-dev git net-tools mc sysstat atop scsitools dos2unix zsh -y
cat /etc/ssh/sshd_config |grep PubkeyAuthentication
mcedit /etc/ssh/sshd_config
PubkeyAuthentication yes
PermitRootLogin prohibit-password
systemctl restart sshd
adduser chia
usermod -aG sudo chia
mkdir /home/chia/temp
chown chia:chia /home/chia/temp
mkdir /home/chia/farm
chown chia:chia /home/chia/farm
mkdir /home/chia/ram
chown chia:chia /home/chia/ram
mkdir /home/chia/logs
chown chia:chia /home/chia/logs
mount -o size=220G -t tmpfs none /home/chia/temp/
mcedit /etc/fstab
tmpfs /home/chia/ram tmpfs rw,noatime,nosuid,size=220G 0 0
mount -a
https://www.kevin-custer.com/blog/disabling-snaps-in-ubuntu-20-04/
snap list
snap remove lxd
snap remove core18
snap remove snapd
apt purge snapd
rm -rf ~/snap
rm -rf /home/chia/snap
rm -rf /var/snap
rm -rf /var/lib/snapd
sudo touch /etc/cloud/cloud-init.disabled
dpkg-reconfigure cloud-init # Disable all services (uncheck everything except "None")
sudo apt-get purge cloud-init
sudo rm -rf /etc/cloud/ && sudo rm -rf /var/lib/cloud/
sudo reboot
echo "hardstatus alwayslastline
hardstatus string '%{gk}[ %{G}%H %{g}][%{= kw}%-w%{= BW}%n %t%{-}%+w][%= %{=b kR}(%{W} %h%?(%u)%?%{=b kR} )%{= kw}%=][%{Y}%l%{g}]%{=b C}[ %d.%m.%Y %c:%s ]%{W}'
defscrollback 10000 " > ~/.screenrc
echo "hardstatus alwayslastline
hardstatus string '%{gk}[ %{G}%H %{g}][%{= kw}%-w%{= BW}%n %t%{-}%+w][%= %{=b kR}(%{W} %h%?(%u)%?%{=b kR} )%{= kw}%=][%{Y}%l%{g}]%{=b C}[ %d.%m.%Y %c:%s ]%{W}'
defscrollback 10000 " > /home/chia/.screenrc
chown chia:chia /home/chia/.screenrc
timedatectl set-timezone Europe/Moscow
apt-get install ntp
nano /etc/ntp.conf
#pool 0.ubuntu.pool.ntp.org iburst
#pool 1.ubuntu.pool.ntp.org iburst
#pool 2.ubuntu.pool.ntp.org iburst
#pool 3.ubuntu.pool.ntp.org iburst
server 0.ru.pool.ntp.org
server 1.ru.pool.ntp.org
server 2.ru.pool.ntp.org
server 3.ru.pool.ntp.org
service ntp restart
service ntp status
systemctl enable ntp
ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
ntp.ubuntu.com .POOL. 16 p - 64 0 0.000 0.000 0.000
128.0.142.251 195.210.189.106 2 u 65 64 7 29.154 -0.215 9.519
*ntp2.aas.ru .MRS. 1 u - 64 17 22.142 -0.198 8.245
2a00:ab00:203:9 .INIT. 16 u - 64 0 0.000 0.000 0.000
ntp.truenetwork 89.109.251.21 2 u 62 64 7 63.657 0.211 7.158
chilipepper.can 17.253.34.123 2 u 59 64 1 97.475 -23.010 0.000
alphyn.canonica 132.163.96.1 2 u 59 64 1 103.638 5.805 0.000
golem.canonical 17.253.34.123 2 u 55 64 1 37.851 6.071 0.000
pugot.canonical 140.203.204.77 2 u 57 64 1 59.615 -1.399 0.000
cd /root
git clone https://github.com/setar/chia-farm-tools.git
cd chia-farm-tools
touch chia-scripts/config.txt
mcedit chia-scripts/config.txt
Если криптоцепочка не запущена и не синхронизированна, то ключи фермера и контракта можно поменять позже, главное не забыть например:
# farmer/plotter имя пользователя
user = chia
# папка для монтирования дисков
farm = /home/chia/farm
# еуьз папка где смонтирован NVMe
temp = /home/chia/temp
# temp2 папка где смонтирован NVMe или RAM
ram = /home/chia/ram
# farmer public key, from 'chia keys show'
fpk = 88cbed9eb6b92d75f4073c65ca231e81f4a95057f4b9c5461997170e71adcbebe2a0eacbba2a0153ec936cfbe2f32e8f
# pool contract address, from 'chia plotnft show'
nft = xch18kspvxwzth2ssyup97qc642unxe0k2fljkrkslzmvxu3zqfja88sqwzghg
# количество ядер для одного процесса плоттинга
threads = 4
# режим расширенного логирования
debug = false
# максимальное число процессов одновременного копирования в системе
max_count = 4
# максимальное число потоков копирования на один диск
dst_count = 1
# роль этого узла : farmer / harvester
role = farmer
# диски являются сетевыми (SAN) например nfs (перед проверкой свободного места зайдем в каждую папку) : false / true
nfs = false
# максимальное время копирования одного готового плота в секундах, которое мы ждем не считая процесс умершим
time = 1800
sh install.sh
chia_cli
cd ~
git clone https://github.com/Chia-Network/chia-blockchain.git -b main --recurse-submodules
cd chia-blockchain
chmod +x ./install.sh
sh install.sh
. ./activate
chia init
chia init --fix-ssl-permissions
chia keys add
chia keys show --show-mnemonic-seed
chia keys show
chia start farmer
chia show -a introducer-eu.chia.net:8444
chia configure -upnp false
chia configure --log-level INFO
chia start farmer -r
- на обоих узлах остановить клиентзы чиа 'chia stop all -d'
- скопировать основную базу /home/chia/.chia/mainnet/db/*.sqlite
- в случае совпадения ключей можно скопировать бд кошелька /home/chia/.chia/mainnet/wallet/db/*.sqlite
- запустить фермер на обоих узлах 'chia start farmer -r'
lsblk |grep nvme # тут запоминаем букву диска например nvme0n1 (или несколько)
cd root-scripts
mcedit admin_mktemp.sh
для одного диска изменить так (ремарка на создании массива):
#!/bin/bash
# тут менять дискки NVMe (!все данные с них будут уничтожены) и их кол-во
#mdadm --create /dev/md0 --level=stripe --raid-devices=3 --chunk=512 /dev/sdb /dev/sdc /dev/sdd
# дальше менять ничего не нужно
...
проверить что на месте диск temp и если используется ram:
df -h
Filesystem Size Used Avail Use% Mounted on
...
tmpfs 220G 0 220G 0% /home/chia/ram
/dev/nvme0n1 3.5T 89M 3.3T 1% /home/chia/temp
ВНИМАНИЕ! все диски кроме NVMe и системы будут отфарматированы и поставлены в ферму
screen -S root
cd /root/chia-farm-tools/root-scripts
./admin_newmount.sh
chia_cli
~/chia-scripts/chia_newmount.sh
chia_cli
cd
git clone https://github.com/madMAx43v3r/chia-plotter.git
sudo apt install -y libsodium-dev cmake g++ git build-essential
cd chia-plotter
git submodule update --init
./make_devel.sh
chia_cli
crontab -e
@reboot sh /home/chia/chia-scripts/chia_startup.sh
* * * * * /home/chia/chia-scripts/chia_plots_mover.sh >>/home/chia/logs/plots_mover.log
screen -S mm
su - chia
. ~/chia-blockchain/activate
~/chia-scripts/mm_create_nft.sh
screen -S mm2
su - chia
. ~/chia-blockchain/activate
~/chia-scripts/mm_create_nft.sh
В планировщике пользователя chia запущен ежеминутный процесс контроля за новыми файлами типа *.plot в каталоге /home/chia/temp при появлении таковых скрипт резервирует место на первом свободном диске и запускает процесс перемещения готового плота. Сам скрипт находится /home/chia/chia-scripts/chia_plots_mover.sh Лог работы расположен /home/chia/logs/plots_mover.log
скрин (screen) - автономно запущенная консоль, от которой можно отцепиться и прицепиться заново с того же места даже после обрыва связи
признаком нахождения в скрине является нижний статус бар с средней загрузкой системы, датой и временем:
[ chia ][0 bash][ ( ) ][2.43 2.04 2.09][ 26.06.2021 9:14:27 ]
выход из скрина (отцепиться ) : Ctrl+a , d (две клавиши, затем их отпустить и сразу одну клавишу)
закрыть скрин (удалить/убить): несколько раз последовательно Ctrl+d до пропадания статус бара (обычно там 3 вложенные консоли)
запуск быстрых скринов (из под консоли root): chia_cli - выдаст текущую статистику и запустит консоль chia для выполнения команд chia_log - полный детальный лог (прервать Ctrl+c но можно просто отцепиться) chia_log2 - лог с фильтром по текущим проверкам плотов (включая скорость этого процесса, норма до 2 сек, до 5 можно но плохо) chia_summary - общая информация по ферме chia_mm , chia_mm2 - мониторинг плоттинг подсистемы (MadMax) chia_mover - лог скрипта перемещения готовых плотов (прервать Ctrl+c но можно просто отцепиться)
текущее состояние
chia show -s
сколько коннектов с миром
chia show -c
информация о плотах
chia plots show
проверка плотов n=кол-во тестов по умолчатию 30, выше будет более долгая и точная проверка.
chia plots check -n 1
результат последних тестов на "вырастание выигрыша"
chia farm challenges
разные фильтры по логам
tail -f /home/chia/.chia/mainnet/log/debug.log |grep full_node
tail -f /home/chia/.chia/mainnet/log/debug.log |grep chia.harvester.harvester
показать кошелек (с сектерной фразой)
chia keys show --show-mnemonic-seed
проверка качества плотов (без удаления), рационально вывод перенаправлять в файл
~/chia-scripts/chia_plots_QC.sh > QC.txt
проверка и чистка дисков от повторяющихся плотов а так же не завершенных процедур перемещания
~/chia-scripts/chia_plots_validator.sh
чистка из системы и процесса фермера каталогов от удаленных фисков
~/chia-scripts/chia_del_unused_dirs.sh
доступны только для рута
-
создание темп диска 1. рескан дисков (актуально если новые вставлены) - rescan-scsi-bus 2. идентифицируем NVMe например по размеру - lsblk - - тут sdb , sdc, sdd - или - lsblk |grep nvme # тут запоминаем букву диска например nvme0n1 (или несколько) 3. правим скрипт создания указывая темп диски и их кол-во - mcedit /root/scripts/admin_mktemp.sh - 4. запускаем скрипт - /root/scripts/admin_mktemp.sh 5. проверяем что темп подцепился : - df -h /home/chia/temp -
-
подключение новых дисков для плотов
- физически вставить диски
- запустить скрипт /root/chia-farm-tools/root-scripts/admin_newmount.sh
- будет произведен рескан шины, и попытка подключить все диски исключая системный и темп
- диски которые уже подключены - будут игнорированы
- новые будут подключены и поставлены в автостарт
- "грязные диски" (с имеющейся файловой системой) - будут почищены, поэтому запуск ручной
Перевод машин в режим harvester-only
Поднимается виртуалка main, настройка аналогично обычным машинам (без насройки nvme и дисков) c машины main на харвестеры копируется каталог /home/chia/.chia/mainnet/config/ssl/ca/*
на харвест машинах chia_cli ssh 192.168.2.230 "(cd /home/chia/.chia/mainnet/config/ssl/ca ; tar cjf - ./*)" | (mkdir -p /home/chia/ca.ssl; cd /home/chia/ca.ssl; cat | tar xj ) chia stop all -d chia init -c /home/chia/ca.ssl mcedit /home/chia/.chia/mainnet/config/config.yaml
harvester:
chia_ssl_ca:
crt: config/ssl/ca/chia_ca.crt
key: config/ssl/ca/chia_ca.key
farmer_peer:
host: 192.168.2.230
port: 8447
chia start harvester