Skip to content

Latest commit

 

History

History
130 lines (99 loc) · 9.74 KB

README.Ru.md

File metadata and controls

130 lines (99 loc) · 9.74 KB

README Russian (Русская версия)

Это руководство содержит инструкции о том, как собрать и настроить узел валидатора в блокчейне TON. Приведенные ниже инструкции и сценарии были проверены в Ubuntu 18.04.

Начало

Системные Требования

Конфигурация CPU (ядра) RAM (GiB) Диск (GiB) Сеть (Гбит/с)
Минимальная 8 16 1000 1
Рекомендуемая 16 32 1000 1

Подготовка

1. Установка переменных окружения

Внесите изменения (если требуется) в net.ton.dev/scripts/env.sh

$ cd net.ton.dev/scripts/
$ . ./env.sh 

2. Сборка ноды

Соберите ноду:

$ ./build.sh

3. Процесс установки ноды

Запустите инициализацию ноды:

$ ./setup.sh

4. Подготавливаем Multisig-кошелек

Обратите внимание: Все обращения к утилите TONOS-CLI должны выполняться из папки scripts.

Multisig-кошелек (или просто кошелек) используется валидатором для отправки специальных голосующих запросов смарт-контракту Elector'а («Выборщика»).

Пусть N будет общим кол-вом кошельков кастодианов и K — количеством минимальных подтверждений, необходимых для выполнения транзакции кошелька.

  1. Прочтите TONOS-CLI документацию (раздел Deploying Multisignature Wallet to TON blockchain) и сгенерируйте мнемонические (seed) фразы и публичные ключи для N - 1 кастодианов.
  2. Сгенерируйте адрес кошелька и ключ для N-го кастодиана:
    $ ./msig_genaddr.sh

Этот скрипт создает 2 файла: $(hostname -s).addr и msig.keys.json в директории ~/ton-keys/. Когда будете осуществлять деплой кошелька, вам потребуется публичный ключ из файла msig.keys.json в качестве публичного ключа N-го кастодиана.

Запуск ноды валидатора

Выполняйте этот шаг, когда сеть запущена. Запустите ноду:

$ ./run.sh

Дождитесь, пока нода произведет синхронизацию с мастерчейном. В зависимости от пропускной способности сети, этот шаг может занять значительное время (до нескольких часов).

Вы можете использовать следующий скрипт для проверки состояния синхронизации ноды:

$ ./check_node_sync_status.sh

Пример вывода скрипта:

connecting to [127.0.0.1:3030]
local key: FB0A67F8992DB0EF51860D45E89951275A4D6EB6A381BBF99023292982F97247
remote key: 2AD4363BE4BCCEFEF667CB919B199C4710278B8E2B0D972E18D1E5A17B62A99D
conn ready
unixtime            1588443685
masterchainblock            (-1,8000000000000000,989):85316E413BD4FFBE76AF7BCDC2A75C27B2BA3AE45381D0CE7B5684949447DF07:6D975F062203F2A2F913FC528387036F47B27AB156B76E4127C186E32A6ED9C3
masterchainblocktime            1588443683
gcmasterchainblock            (-1,8000000000000000,0):3D009F42614CBA3537A41596BFD6E598756C83332668990C914D67A3B137D37D:40D1F2B2588A6A00D8AB05C8C1E944E42B172B5C111867B70DBC41009EE10C55
keymasterchainblock            (-1,8000000000000000,669):712CBAF305CB9AF1CD3745FDDB8E184796D8A21E7C559A42EB6B68D8B2F2FF89:3B03B9075B20BD1E6111492C41756F337FF649C6C89B9F87D446FAC47DCFD2BB
knownkeymasterchainblock            (-1,8000000000000000,669):712CBAF305CB9AF1CD3745FDDB8E184796D8A21E7C559A42EB6B68D8B2F2FF89:3B03B9075B20BD1E6111492C41756F337FF649C6C89B9F87D446FAC47DCFD2BB
rotatemasterchainblock            (-1,8000000000000000,918):4DD1DF6361F4B406DCC948B99E0D1ADD6988AC8F824F2E1B263CFED2AD46742E:12A8599C16C5EF1B09713F7EC91E2F765E97545F046FE6871DCD0C82E0377036
stateserializermasterchainseqno            984
shardclientmasterchainseqno            988
INFO: TIME_DIFF = -2

Если параметр TIME_DIFF равен нескольким секундам, процесс синхронинзации завершен.

1. Инициализация multisig-кошелька

Обратите внимание: Все обращения к утилите TONOS-CLI должны выполняться из папки scripts.

Соберите со всех кастодианов их публичные ключи и осуществите деплой, используя TONOS-CLI (раздел Deploying Multisignature Wallet to TON blockchain). Используйте значение K как reqConfirms параметр деплоя. Убедитесь, что кошелек был развернут по адресу, сохраненному в файле $(hostname -s).addr.

2. Запуск скрипта валидатора

Укажите величину <STAKE> (ставку) в токенах. Эта количество токенов будет отправляться с помощью кошелька в смарт-контракт Выборщика (Elector) в каждом цикле проверки.

Запустите скрипт валидатора (периодически, т.е. каждые 10 минут):

$ ./validator_msig.sh <STAKE> | tee -a ./validator.log 2>&1

Принцип работы скрипта валидатора

Скрипт запускается каждую минуту.

  1. Выполняет первоначальная проверку для мастерчейна.
  2. Проверяет время запуска.
  3. Получает адрес контракта Выборщика и считывает election_id из контракта Выборщика.
  4. Если election_id == 0 (что означает, что в данный момент не идут выборы валидаторов):
    1. Скрипт запрашивает размер стейка валидатора, который может быть возвращен Выборщиком (с помощью запуска get-метода Выборщика compute_returned_stake). Возвращаемое значение не будет нулевым, если валидатор выиграл предыдущие выборы и был валидатором;
    2. Если значение != 0, скрипт отправляет новую транзакцию из кошелька контракту Выборщика с 1 токеном и recover-stake payload'ом;
    3. Если запрос к кошельку успешный, скрипт извлекает transactionId и печатает его в терминал, а затем выходит. Остальные кастодианы должны подтвердить эту транзакцию, используя данный идентификатор.
  5. Если election_id != 0 (это означает, что пришло время участвовать в выборах):
    1. Проверяет, если файл stop-election существует, выходит;
    2. Проверяет, если файл active-election-id существует, читает из него значение active_election_id и сравнивает его с election_id. Если они равны, выходит (это означает, что валидатор уже отправил свою ставку к Выборщику в рамках текущих выборов);
    3. Вызывает validator-engine-console для генерации нового ключа валидатора и adnl-адреса;
    4. Читает конфигурационный параметр config param 15, чтобы получить тайм-ауты выборов;
    5. Запускает fift-скрипт validator-elect-req.fif для генерации неподписанного запроса на выборы валидатора;
    6. Вызывает validator-engine-console для подписи запроса на выборы с заново сгенерированной парой ключей валидатора;
    7. Отправляет новую транзакцию из кошелька к контракту Выборщика со $stake количеством токенов и process_new_stake payload'ом;
    8. Если запрос к кошельку успешный, скрипт извлекает transactionId и выводит его в терминал;
    9. Кастодианы должны подтвердить транзакцию, используя этот идентификатор. Когда кошелек накапливает необходимое количество подтверждений, он отправляет запрос на выборы валидатора Выборщику.