Проверялась на Ubuntu 18.04
- Скачиваем репозиторий
git clone https://github.com/ton-rocks/general-ton-node.git
- Переходим в папку scripts
cd ./general-ton-node/scripts
Обратите внимание, далее все команды выполняются из папки scripts!
- Устанавливаем зависимости (только ubuntu, можно установить необходимые пакеты руками)
./system_init.sh
Возможно, для запуска докера понадобится создать группу и добавить туда текущего пользователя
newgrp docker
sudo usermod -a -G docker текущий_пользователь
Так же желательно установить chrony (пример https://www.tecmint.com/install-chrony-in-centos-ubuntu-linux/)
- Собираем докер контейнер (будет собрана нода TON, нужно RAM не менее 4GB)
./docker_build.sh
-
Открываем файл env.sh в любом текстовом редакторе. При необходимости меняем IP и порты.
-
Открываем указанные порты в файрволе. Для ubuntu команды будут выглядеть так:
sudo ufw allow порт
Открыть порты нужно для следующих сервисов, упомянутых в env.sh
ADNL_PORT
LITE_PORT
WS_PORT
BLOCK_EXPLORER_PORT
Возможно так же указать рабочую директорию TON_DIR для докер контейнера вместо VOLUME_NAME
#export VOLUME_NAME="ton-rocks-db"
# or
export TON_DIR="/var/ton-work"
В этом случае база данных, логи и вспомогательные файлы будут располагаться в директории TON_DIR.
Количество потоков ноды CORE_COUNT не должно превышать количество ядер сервера. Так же имеются ограничения по оперативной памяти - необходимо резервировать примерно по 2ГБ на поток. Т.е. на сервере с RAM 16ГБ CORE_COUNT должен быть равен 7
export CORE_COUNT=7
- Первый запуск ноды
./docker_create_storage.sh
./docker_run.sh
Ждём несколько минут, при первом запуске сгенерируются ключи кошелька валидатора, а так же некоторые конфиги
- Экспортируем сгенерированные файлы из контейнера
./docker_export_wallet.sh
Экспортируются следующие файлы: адрес и ключи кошелька валидатора
validator.hexaddr
validator.addr
validator.pk
Сохраните их в доступном месте, при следующем запуске ./docker_export_wallet.sh они перепишутся!
- Экспортируем конфигурацию
./docker_export_conf.sh
Конфигурации DHT и lite-server
dht_node.conf
liteserver.conf
Ключи для доступа к lite-server и консоли ноды
liteserver.pub
console_server.pub
console_client
Если скрипты говорят, что некоторых файлов нет, ждём ещё и перезапускаем
- Отправляем запрос на тестовые монеты. В запросе указываем следующую информацию:
- адрес кошелька валидатора, из файла validator.hexaddr
- содержимое файлов dht_node.conf и liteserver.conf
- порт BLOCK_EXPLORER_PORT (не нужно, если файл env.sh не меняли)
- Дожидаемся синхронизации ноды командой
./docker_status.sh
Разница TIME_DIFF должна быть в пределах 20
INFO: TIME_DIFF = -4
- Дожидаемся зачисления монет на кошелёк. Состояние кошелька можно проверить командой
./docker_wallet_status.sh
Account state is EMPTY with balance 0
говорит о том, что монет в аккаунте нет.
Account state is UNINIT with balance 100000000000000ng
говорит о том, на кошельке 100000 монет, но код кошелька не задеплоен.
Состояние кошелька так же можно посмотреть в блокчейн эксплорере, который доступен у вас по BLOCK_EXPLORER_PORT порту.
Когда появится ненулевой баланс, кошелёк нужно задеплоить командой
./docker_wallet_deploy.sh
после чего состояние должно измениться на
Account state is ACTIVE with balance 99999956409603ng
- Когда нода синхронизировалась, нужно установить в cron запуск скриптов участия в выборах
Выполняем
crontab -e
и вставляем строку
*/10 * * * * cd путь_к_папке_scripts && ./docker_participate.sh
- Командой
./docker_logs.sh
можно получить логи регистрации в выборах (participate.log и reap.log)
- Получить лог ноды TON можно командой
./docker_node_logs.sh
(осторожно, он большой!). Логи остальных сервисов и скриптов./docker_logs.sh
- Состояние файрвола командой
sudo ufw status
- Открытые порты
sudo netstat -ntlp | grep LISTEN
- Нагрузку на сервер
htop
- Нагрузку на диски
iostat -dx -N 2
- Скорость сети
https://www.speedtest.net/ru/apps/cli
- Состояние сети
sudo iftop
- Останавливаем командой
./docker_stop.sh
- Удаляем ноду, но оставляем хранилище
./docker_clean.sh
Do you want to stop and delete node? (y/n): y
Do you want to delete permanent storage? (y/n): n
- Запускаем снова. Постоянное хранилище, созданное на этапе 7, примантируется автоматически
./docker_run.sh
- Останавливаем запущенный контейнер
./docker_stop.sh
-
Меняем PUBLIC_IP в файле env.sh
-
Удаляем ноду, но оставляем хранилище
./docker_clean.sh
Do you want to stop and delete node? (y/n): y
Do you want to delete permanent storage? (y/n): n
- Запускаем снова
./docker_run.sh
- Выполняем команду
./docker_export_conf.sh
- Отсылаем файлы dht_node.conf и liteserver.conf
-
Дожидаемся, когда выборы закончатся. Проверить можно в логе participate.log Фраза "No active election, exiting" означает, что выборы закончены
-
Убираем запуск скрипта из крона. Запускаем
crontab -e
и удаляем строку
*/10 * * * * cd путь_к_папке_scripts && ./docker_participate.sh
-
На новом сервере выполняем шаги 1-7 основной инструкции
-
Копируем файлы
validator.hexaddr
validator.addr
validator.pk
в папку scripts
- Запускаем команду импорта ключей
./docker_import.sh
- Выполняем шаги 9-14 основной инструкции
Проще всего сделать несколько копий папки scripts и поменять в каждой env.sh. Затем выполнить все действия из инструкции в каждой папке
Входим в контейнер
./docker_bash.sh
Параметры выборов
lite-client -C /var/ton-work/db/my-ton-global.config.json -v 0 -rc "getconfig 15" -rc "getconfig 16" -rc "getconfig 17" -rc "quit"
Номер текущих выборов (0 - выборов нет)
lite-client -C /var/ton-work/db/my-ton-global.config.json -v 0 -rc "runmethod -1:3333333333333333333333333333333333333333333333333333333333333333 active_election_id" -rc "quit" | grep "result: "
Список public ключей (в формате int) зарегистрированных участников выборов
lite-client -C /var/ton-work/db/my-ton-global.config.json -v 0 -rc "runmethod -1:3333333333333333333333333333333333333333333333333333333333333333 participant_list" -rc "quit" | grep "result: "
Список текущих валидаторов
lite-client -C /var/ton-work/db/my-ton-global.config.json -v 0 -rc "getconfig 34" -rc "quit"
Список следующих валидаторов
lite-client -C /var/ton-work/db/my-ton-global.config.json -v 0 -rc "getconfig 36" -rc "quit"
Список предыдущих валидаторов
lite-client -C /var/ton-work/db/my-ton-global.config.json -v 0 -rc "getconfig 32" -rc "quit"
Список выборов, в которых участвовал валидатор
ls /var/ton-work/contracts/*.elect
В самих файлах находятся параметры участия, в т.ч. public ключ в формате base64 (PUBKEY=) Перевести public ключ в int можно командой
python -c "k='ваш_PUBKEY'; import base64; import codecs; print(int(codecs.encode(base64.b64decode(k)[4:], 'hex'), 16))"
а в hex формат
python -c "k='ваш_PUBKEY'; import base64; import codecs; print('%x' % int(codecs.encode(base64.b64decode(k)[4:], 'hex'), 16))"
- Собираем докер контейнер
./docker_build.sh
- Запускаем песочницу
cd sandbox && ./sandbox_run.sh
-
Ждём, когда всё запустится и начнутся выборы.
-
Если наигрались, нажимаем CTRL-C и чистим за собой
./sandbox_cleanup.sh