Проверялась на 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.shAccount 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