diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 00000000..830f5a2f Binary files /dev/null and b/.DS_Store differ diff --git a/README.Ru.md b/README.Ru.md new file mode 100644 index 00000000..530db132 --- /dev/null +++ b/README.Ru.md @@ -0,0 +1,87 @@ +## Что это +Данная консольная программа является оберткой над `fift`, `lite-client` и `validator-engine-console`. Она была создана для облегчения управления кошельками, доменами и валидатором на операционной системе `Linux`. +Проект находится в активной разработке, поэтому стабильность работы не гарантируется. +![](https://raw.githubusercontent.com/igroman787/mytonctrl/master/screens/mytonctrl-status.png) + +## Функционал +- [x] Показать статус сети TON +- [x] Управление локальными кошельками + - [x] Создать локальный кошелек + - [x] Активировать локальный кошелек + - [x] Показать локальные кошельки + - [x] Импортировать кошелек из файла (.pk) + - [x] Сохранить адрес кошелька в файл (.addr) + - [x] Удалить локальный кошелек +- [x] Показать статус аккаунта + - [x] Показать баланс аккаунта + - [x] Показать историю аккаунта + - [x] Показать статус аккаунта из закладок +- [x] Перевод средств на кошелек + - [x] Перевод фиксированной суммы + - [x] Перевод всей суммы (all) + - [x] Перевод всей суммы с диактивацией кошелька (alld) + - [x] Перевод средств на кошелек из закладок + - [ ] Пропустить средства через миксер +- [x] Управление закладками + - [x] Добавить аккаунт в закладки + - [x] Показать закладки + - [x] Удалить закладку +- [x] Управление предложениями + - [x] Показать предложения + - [x] Проголосовать за предложение + - [x] Автоматическое голосование за ранее проголосованные предложения +- [x] Управление доменами + - [x] Арендовать новый домен + - [x] Показать арендованные домены + - [x] Показать статус домена + - [x] Удалить домен + - [ ] Автоматическое продление доменов +- [ ] Автоматическая отправка средств по расписанию + - [ ] Добавить правило в расписание + - [ ] Показать правила расписания + - [ ] Удалить правило из расписания +- [x] Управление валидатором + - [x] Участвовать в выборах валидатора + - [x] Возвращать ставку + вознаграждение + - [ ] Автозапуск валидатора при аварийном завершении + - [ ] Отправлять статистику валидатора на http://validators.ton + +## Список проверенных операционных систем +``` +Ubuntu 18.04.2 +Debian 10.3 +``` + +## Описание установочных скриптов +- `toninstaller.sh` - Данный скрипт клонирует исходники `TON` и `mytonctrl` в папки `/usr/src/ton` и `/usr/src/mytonctrl`, компилирует программы из исходников и прописывает их в `/usr/bin/`. +- `vpreparation.sh` - Данный скрипт создает пользователя `validator` для работы валидатора и пропишет его в автозагрузку через крон. +- `mytoninstaller.py` - Данный скрипт производит настройку `mytonctrl` и создание ключей для подключения к валидатору. +- `vconfig.sh` - Данный скрипт настроит доступ для подключения к валидатору `lite-client` и `validator-engine-console`. + +## Режимы установки +Есть два режима установки: `lite` и `full`. Оба они **компилируют** и устанавливают компоненты `TON`. Однако `lite` версия не настраивает и не запускает валидатор. В данный момент `full` установка сырая/баганутая/недоделанная, поэтому вы можете установить в режиме `lite` и дальше уже руками дописать настройки в конфигурацию `mytonctrl` для взаимодействия с вашим валидатором. + +## Установка (Ubuntu) +1. Скачайте и выполните скрипт `install.sh` с нужным вам режимом установки. Мы будем устанавливать в режиме `lite`. В ходе установки у вас будет несколько раз запрошен пароль суперпользователя. +```sh +wget https://raw.githubusercontent.com/igroman787/mytonctrl/master/scripts/install.sh +sudo sh install.sh -m lite +``` + +2. Готово. Можете пробовать запустить программу `mytonctrl`. +```sh +mytonctrl +``` + + +## Установка (Debian) +1. Скачайте и выполните скрипт `install.sh` с нужным вам режимом установки. Мы будем устанавливать в режиме `lite`. В ходе установки у вас будет несколько раз запрошен пароль суперпользователя. +```sh +wget https://raw.githubusercontent.com/igroman787/mytonctrl/master/scripts/install.sh +su root -c 'sh install.sh -m lite' +``` + +2. Готово. Можете пробовать запустить программу `mytonctrl`. +```sh +mytonctrl +``` diff --git a/README.md b/README.md index 530db132..65ceab00 100644 --- a/README.md +++ b/README.md @@ -1,87 +1,145 @@ -## Что это -Данная консольная программа является оберткой над `fift`, `lite-client` и `validator-engine-console`. Она была создана для облегчения управления кошельками, доменами и валидатором на операционной системе `Linux`. -Проект находится в активной разработке, поэтому стабильность работы не гарантируется. -![](https://raw.githubusercontent.com/igroman787/mytonctrl/master/screens/mytonctrl-status.png) - -## Функционал -- [x] Показать статус сети TON -- [x] Управление локальными кошельками - - [x] Создать локальный кошелек - - [x] Активировать локальный кошелек - - [x] Показать локальные кошельки - - [x] Импортировать кошелек из файла (.pk) - - [x] Сохранить адрес кошелька в файл (.addr) - - [x] Удалить локальный кошелек -- [x] Показать статус аккаунта - - [x] Показать баланс аккаунта - - [x] Показать историю аккаунта - - [x] Показать статус аккаунта из закладок -- [x] Перевод средств на кошелек - - [x] Перевод фиксированной суммы - - [x] Перевод всей суммы (all) - - [x] Перевод всей суммы с диактивацией кошелька (alld) - - [x] Перевод средств на кошелек из закладок - - [ ] Пропустить средства через миксер -- [x] Управление закладками - - [x] Добавить аккаунт в закладки - - [x] Показать закладки - - [x] Удалить закладку -- [x] Управление предложениями - - [x] Показать предложения - - [x] Проголосовать за предложение - - [x] Автоматическое голосование за ранее проголосованные предложения -- [x] Управление доменами - - [x] Арендовать новый домен - - [x] Показать арендованные домены - - [x] Показать статус домена - - [x] Удалить домен - - [ ] Автоматическое продление доменов -- [ ] Автоматическая отправка средств по расписанию - - [ ] Добавить правило в расписание - - [ ] Показать правила расписания - - [ ] Удалить правило из расписания -- [x] Управление валидатором - - [x] Участвовать в выборах валидатора - - [x] Возвращать ставку + вознаграждение - - [ ] Автозапуск валидатора при аварийном завершении - - [ ] Отправлять статистику валидатора на http://validators.ton - -## Список проверенных операционных систем -``` -Ubuntu 18.04.2 -Debian 10.3 -``` +## MyTonCtrl +This console program is a wrapper over `fift`,` lite-client` and `validator-engine-console`. It was created to facilitate the management of wallets, domains, and validators on the Linux. + +The instructions and scripts below were verified on ```Ubuntu 18.04``` and ```Debian 10.3```. + +## System requirements + +To start a validator (full node) in testnet we recommend looking at these system requirements. + +| Configuration | CPU (cores) | RAM (GB) | SSD/NVME (GB) | Network (Mbit/s)| +|---|:---|:---|:---|:---| +| Minimum |6|16|256|100| +| Recommended |8|32|480|500| + +UP and DOWN traffic is symmetrical during the validator is working and equal to average 50 Mbit/s in both directions. + +These minimum requirements were obtained based on our experience of raising validators. In order to save your personal funds on powerful servers and more people can join the network, we tried to specify the minimum parameters that are possible for the validator to work :) + +## Console features +- [x] TON network status +- [x] Local Wallets Management +- [x] Show account status +- [x] Show account balance +- [x] Show account history +- [x] Show account status from bookmarks +- [x] Transfer funds to wallet +- [x] Transfer a fixed amount +- [x] Transfer the entire amount (all) +- [x] Transferring the entire amount with wallet deactivation (all) +- [x] Transfer funds to your wallet from bookmarks +- [x] Bookmark management +- [x] Bookmark this account +- [x] Show bookmarks +- [x] Delete bookmark +- [x] Offer Management +- [x] Show offers +- [x] Vote for the proposal +- [x] Automatic voting for previously voted offers +- [x] Domain Management +- [x] Rent a new domain +- [x] Show leased domains +- [x] Show domain status +- [x] Delete domain +- [x] Validator Management +- [x] Participate in the election of a validator +- [x] Return bid + reward + +##TODO +- [] Automatically renew domains +- [] Automatic scheduled funds sending +- [] Add rule to schedule +- [] Show schedule rules +- [] Remove rule from schedule +- [] Autostart validator during abnormal termination +- [] Send validator statistics to http://validators.ton +- [] Pass funds through the mixer -## Описание установочных скриптов -- `toninstaller.sh` - Данный скрипт клонирует исходники `TON` и `mytonctrl` в папки `/usr/src/ton` и `/usr/src/mytonctrl`, компилирует программы из исходников и прописывает их в `/usr/bin/`. -- `vpreparation.sh` - Данный скрипт создает пользователя `validator` для работы валидатора и пропишет его в автозагрузку через крон. -- `mytoninstaller.py` - Данный скрипт производит настройку `mytonctrl` и создание ключей для подключения к валидатору. -- `vconfig.sh` - Данный скрипт настроит доступ для подключения к валидатору `lite-client` и `validator-engine-console`. -## Режимы установки -Есть два режима установки: `lite` и `full`. Оба они **компилируют** и устанавливают компоненты `TON`. Однако `lite` версия не настраивает и не запускает валидатор. В данный момент `full` установка сырая/баганутая/недоделанная, поэтому вы можете установить в режиме `lite` и дальше уже руками дописать настройки в конфигурацию `mytonctrl` для взаимодействия с вашим валидатором. -## Установка (Ubuntu) -1. Скачайте и выполните скрипт `install.sh` с нужным вам режимом установки. Мы будем устанавливать в режиме `lite`. В ходе установки у вас будет несколько раз запрошен пароль суперпользователя. +## Installation Modes +There are two installation modes: `lite` and `full`. Both of them compile and install `TON` components. +However, the `lite` version does not configure or launch the validator. +`full` installation mode will compile and install all the necessary components for your node to participate in the election of validators. + +## Installation (Ubuntu) +1. Download and run the `install.sh` script with the installation mode you need. During installation, you will be asked for the superuser password several times. ```sh wget https://raw.githubusercontent.com/igroman787/mytonctrl/master/scripts/install.sh +``` + +2. If you want to install `full` node to participate in elections run: +```sh +sudo sh install.sh -m full +``` +or install `lite` version of the client: +```sh sudo sh install.sh -m lite ``` -2. Готово. Можете пробовать запустить программу `mytonctrl`. +If the installation was completed successfully, then you will receive the following response in the console: + +![](https://raw.githubusercontent.com/igroman787/mytonctrl/master/screens/mytonctrl-inst.jpeg) + + +3. Then you can run `MytonCtrl` with the command: ```sh -mytonctrl +MyTonCtrl ``` +4. To learn more about the available commands type `help` + -## Установка (Debian) -1. Скачайте и выполните скрипт `install.sh` с нужным вам режимом установки. Мы будем устанавливать в режиме `lite`. В ходе установки у вас будет несколько раз запрошен пароль суперпользователя. +## Installation (Debian) +1. Download and run the `install.sh` script with the installation mode you need. During installation, you will be asked for the superuser password several times. ```sh wget https://raw.githubusercontent.com/igroman787/mytonctrl/master/scripts/install.sh +``` +2. If you want to install `full` node to participate in elections run: +```sh +su root -c 'sh install.sh -m full' +``` +or install `lite` version of the client: +```sh su root -c 'sh install.sh -m lite' ``` -2. Готово. Можете пробовать запустить программу `mytonctrl`. +If the installation was completed successfully, then you will receive the following response in the console: + +![](https://raw.githubusercontent.com/igroman787/mytonctrl/master/screens/mytonctrl-inst.jpeg) + + 3. Then you can run `MytonCtrl` with the command: +```sh +MyTonCtrl +``` + + 4. To learn more about the available commands type `help`. + + +## How to become a validator + +TON network automatically turns on when MytonCtrl is installed. +To view the logs type: + ```sh -mytonctrl +tail -f ~/.local/share/mytoncore/mytoncore.log ``` +Go to the console, enter `help` and wait until the parameter "Time difference" will be in the range of -1 to -10. +Now your node is synchronized! + +### Creating and activating a wallet + +`MytonCtrl` automatically creates a wallet for your validator during installation. +Type `wl` to display a list of wallets. +Now you see your wallet address, balance and status: `empty` + +![](https://raw.githubusercontent.com/igroman787/mytonctrl/master/screens/mytonctrl-ewl.jpeg) + +To activate your wallet type `aw` (Activate Wallet). +After that, you will see that the wallet is activated: + +![](https://raw.githubusercontent.com/igroman787/mytonctrl/master/screens/mytonctrl-awl.jpeg) + +Now you need to fund the wallet balance by an amount sufficient for voting. (This parameter is opposite the column "Minimum stake") + +// TODO: Write to faucet bot and take some tokens. diff --git a/mytonctrl.py b/mytonctrl.py index 63ad7bc7..21109755 100644 --- a/mytonctrl.py +++ b/mytonctrl.py @@ -13,45 +13,47 @@ def Init(): # Create user console console.name = "MyTonCtrl" - console.AddItem("status", PrintStatus, "Показать статус TON / Show TON status") - console.AddItem("seqno", Seqno, "Получить seqno кошелька / Get seqno wallet") - - console.AddItem("nw", CreatNewWallet, "Создать новый локальный кошелек / Create a new local wallet") - console.AddItem("aw", ActivateWallet, "Активировать локальный кошелек / Activate local wallet") - console.AddItem("wl", PrintWalletsList, "Показать локальные кошельки / Show wallet list") - console.AddItem("iw", ImportWalletFromFile, "Импортировать кошелек из файла / Import wallet from file") - console.AddItem("swa", SaveWalletAddressToFile, "Сохранить адрес кошелька в файл / Save wallet address to file") - console.AddItem("dw", DeleteWallet, "Удалить локальный кошелек / Delete local wallet") - - console.AddItem("vas", ViewAccountStatus, "Показать статус аккаунта / View account status") - console.AddItem("vah", ViewAccountHistory, "Показать историю аккаунта / View account history") - console.AddItem("mg", MoveGrams, "Перевод средств на кошелек / Move grams to account") - - console.AddItem("nb", CreatNewBookmark, "Добавить аккаунт в закладки / Create new bookmark") - console.AddItem("bl", PrintBookmarksList, "Показать закладки / Show bookmark list") - console.AddItem("db", DeleteBookmark, "Удалить закладку / Delete bookmark") - - console.AddItem("nr", CreatNewRule, "Добавить правило в расписание / Create new rule") - console.AddItem("rl", PrintRulesList, "Показать правила расписания / Show rule list") - console.AddItem("dr", DeleteRule, "Удалить правило из расписания / Delete rule") - + console.AddItem("upgrade", RunUpdater, "Check and install MyTonCtrl updates") + + console.AddItem("status", PrintStatus, "Show TON status") + console.AddItem("seqno", Seqno, "Get seqno wallet") + + console.AddItem("nw", CreatNewWallet, "Create a new local wallet") + console.AddItem("aw", ActivateWallet, "Activate local wallet") + console.AddItem("wl", PrintWalletsList, "Show wallet list") + console.AddItem("iw", ImportWalletFromFile, "Import wallet from file (.pk)") + console.AddItem("swa", SaveWalletAddressToFile, "Save wallet address to file") + console.AddItem("dw", DeleteWallet, "Delete local wallet") + + console.AddItem("vas", ViewAccountStatus, "View account status") + console.AddItem("vah", ViewAccountHistory, "View account history") + console.AddItem("mg", MoveGrams, "Move grams to account") + + console.AddItem("nb", CreatNewBookmark, "Create new bookmark") + console.AddItem("bl", PrintBookmarksList, "Show bookmark list") + console.AddItem("db", DeleteBookmark, "Delete bookmark") + + console.AddItem("nr", CreatNewRule, "Create new rule") + console.AddItem("rl", PrintRulesList, "Show rule list") + console.AddItem("dr", DeleteRule, "Delete rule") + #console.AddItem("w2m", MoveGramsFromMixer, "Пропустить средства через миксер") - - console.AddItem("nd", NewDomain, "Арендовать новый домен / New domain") - console.AddItem("dl", PrintDomainsList, "Показать арендованные домены / Show domain list") - console.AddItem("vds", ViewDomainStatus, "Показать статус домена / View domain status") - console.AddItem("dd", DeleteDomain, "Удалить домен / Delete domain") - - console.AddItem("ol", PrintOffersList, "Показать действующие предложения / Show offer list") - console.AddItem("vo", VoteOffer, "Голосовать за предложение / Vote for offer") - console.AddItem("el", PrintElectionEntriesList, "Показать действующие выборы / Show election entries list") - console.AddItem("ve", VoteElectionEntry, "Голосовать в выборах / Vote election entry") - console.AddItem("vl", PrintValidatorList, "Показать действующие валидаторы / Show active validators") - - + + console.AddItem("nd", NewDomain, "Create new domain") + console.AddItem("dl", PrintDomainsList, "Show domain list") + console.AddItem("vds", ViewDomainStatus, "View domain status") + console.AddItem("dd", DeleteDomain, "Delete domain") + + console.AddItem("ol", PrintOffersList, "Show list of offers") + console.AddItem("vo", VoteOffer, "Vote for offer") + console.AddItem("el", PrintElectionEntriesList, "Show election entries list") + console.AddItem("ve", VoteElectionEntry, "Vote election entry") + console.AddItem("vl", PrintValidatorList, "Show active validators") + + console.AddItem("test", Test, "") - - + + local.db["config"]["logLevel"] = "debug" local.db["config"]["isLocaldbSaving"] = True local.Run() @@ -97,6 +99,23 @@ def TestWork(ok_arr, pending_arr): print(addr, len(ok_arr), len(pending_arr)) #end define +def RunAsRoot(args): + file = open("/etc/issue") + text = file.read() + file.close() + if "Ubuntu" in text: + args = ["sudo", "-S"] + args + else: + print("Enter root password") + args = ["su", "-c"] + [" ".join(args)] + subprocess.call(args) +#end define + +def RunUpdater(args): + RunAsRoot(["sh", "/usr/src/mytonctrl/scripts/update.sh"]) +#end define + + def PrintStatus(args): rootWorkchainEnabledTime_int = ton.GetRootWorkchainEnabledTime() config34 = ton.GetConfig34() @@ -142,17 +161,17 @@ def PrintTonStatus(startWorkTime, totalValidators, shardsNumber, offersNumber): newOffers_text = bcolors.Green(newOffers) onlineValidators_text = bcolors.Yellow(onlineValidators) if startWorkTime == 0: - electionStatus_text = bcolors.Yellow("close") + electionStatus_text = bcolors.Yellow("closed") else: electionStatus_text = bcolors.Green("open") - ColorPrint("{cyan}===[ Статус сети TON ]==={endc}") - print("Транзакций в секунду (TPS): {0}, {1}, {2}".format(tps1_text, tps5_text, tps15_text)) - print("Количество валидаторов, прошедших выборы: " + validators_text) - print("Количество валидаторов в сети: " + onlineValidators_text) - print("Количесвто шардчейнов: " + shards_text) - print("Действующие предложения: {0}({1})".format(offers_text, newOffers_text)) - print("Статус выборов: " + electionStatus_text) + ColorPrint("{cyan}=== [ TON chain status ] ==={endc}") + print("Transactions Per Second (TPS): {0}, {1}, {2}".format(tps1_text, tps5_text, tps15_text)) + print("Current elected validators number: " + validators_text) + print("Current validators number: " + onlineValidators_text) + print("Shardchains amount: " + shards_text) + print("Current offers: {0}({1})".format(offers_text, newOffers_text)) + print("Election status: " + electionStatus_text) print() #end define @@ -194,24 +213,24 @@ def PrintLocalStatus(validatorIndex, validatorWallet, validatorAccount, validato netLoad15_text = GetColorInt(netLoad15, 300) # Thread status - statisticsStatus_text = GetColorStatus(statisticsStatus_text_bool) - electionsThreadStatus_text = GetColorStatus(electionsThreadStatus_bool) - validatorStatus_text = GetColorStatus(validatorStatus_bool) + statisticsStatus_text = GetColorStatus(statisticsStatus_text_bool, "Active", "Disabled") + electionsThreadStatus_text = GetColorStatus(electionsThreadStatus_bool, "Participating", "Not participating") + validatorStatus_text = GetColorStatus(validatorStatus_bool, "Works", "Off") validatorSyncPercent_text = GetColorInt(validatorOutOfSync, 20, ending=" с") dbSize_text = GetColorInt(dbSize, 1000, ending=" Gb") - ColorPrint("{cyan}===[ Статус локального валидатора ]==={endc}") - print("Индекс валидатора: " + validatorIndex_text) - print("ADNL адрес локального валидатора: " + adnlAddr_text) - print("Адрес кошелька локального валидатора: " + walletAddr_text) - print("Баланс кошелька локального валидатора: " + walletBalance_text) - print("Средняя нагрузка[{0}]: {1}, {2}, {3}".format(cpuNumber_text, cpuLoad1_text, cpuLoad5_text, cpuLoad15_text)) - print("Средняя нагрузка сети (Mbit/s): {0}, {1}, {2}".format(netLoad1_text, netLoad5_text, netLoad15_text)) - print("Статус сбора статистики: " + statisticsStatus_text) - print("Статус участия в выборах: " + electionsThreadStatus_text) - print("Статус локального валидатора: " + validatorStatus_text) - print("Рассинхронизация локального валидатора: " + validatorSyncPercent_text) - print("Размер БД локального валидатора: " + dbSize_text) + ColorPrint("{cyan}=== [ Local Validator Stats ] ==={endc}") + print("Validator ID: " + validatorIndex_text) + print("ADNL address: " + adnlAddr_text) + print("Wallet address: " + walletAddr_text) + print("Wallet balance: " + walletBalance_text) + print("Average load [{0} cores]: {1}, {2}, {3}".format(cpuNumber_text, cpuLoad1_text, cpuLoad5_text, cpuLoad15_text)) + print("Average network load (Mbit/s): {0}, {1}, {2}".format(netLoad1_text, netLoad5_text, netLoad15_text)) + print("Statistics collection: " + statisticsStatus_text) + print("Election participation status: " + electionsThreadStatus_text) + print("Local Validator Status: " + validatorStatus_text) + print("Time difference: " + validatorSyncPercent_text) + print("Database size: " + dbSize_text) print() #end define @@ -223,20 +242,20 @@ def GetColorInt(input, border, ending=None): return result #end define -def GetColorStatus(input): +def GetColorStatus(input, true_text, false_text): if input == True: - result = bcolors.Green("working") + result = bcolors.Green(true_text) else: - result = bcolors.Red("not working") + result = bcolors.Red(false_text) return result #end define def PrintTonConfig(fullConfigAddr, fullElectorAddr, config15, config17): # Конфигурация сети TON - validatorsElectedFor = config15["validatorsElectedFor"] + validatorsElectedFor = secondsToText(config15["validatorsElectedFor"]) electionsStartBefore = config15["electionsStartBefore"] electionsEndBefore = config15["electionsEndBefore"] - stakeHeldFor = config15["stakeHeldFor"] + stakeHeldFor = secondsToText(config15["stakeHeldFor"]) minStake = config17["minStake"] maxStake = config17["maxStake"] @@ -245,15 +264,19 @@ def PrintTonConfig(fullConfigAddr, fullElectorAddr, config15, config17): validatorsElectedFor_text = bcolors.Yellow(validatorsElectedFor) electionsStartBefore_text = bcolors.Yellow(electionsStartBefore) electionsEndBefore_text = bcolors.Yellow(electionsEndBefore) + electionsDuration_text = secondsToText(electionsStartBefore-electionsEndBefore); + stakeHeldFor_text = bcolors.Yellow(stakeHeldFor) minStake_text = bcolors.Yellow(minStake) maxStake_text = bcolors.Yellow(maxStake) - ColorPrint("{cyan}===[ Конфигурация сети TON ]==={endc}") - print("Адрес конфигуратора: {0}".format(fullConfigAddr_text)) - print("Адрес электора: {0}".format(fullElectorAddr_text)) - print("Период валидации: {0}, Длительность выборов: {1}-{2}, Период удержания ставки: {3}".format(validatorsElectedFor_text, electionsStartBefore_text, electionsEndBefore_text, stakeHeldFor_text)) - print("Минимальная ставка: {0}, Максимальная ставка: {1}".format(minStake_text, maxStake_text)) + ColorPrint("{cyan}=== [ TON network config ] ==={endc}") + print("Configurator address: {0}".format(fullConfigAddr_text)) + print("Elector address: {0}".format(fullElectorAddr_text)) + print("Validation time period: {0}".format(validatorsElectedFor_text)) + print("Election duration: {}".format( electionsDuration_text)) + print("Tokens freeze period: {}".format(stakeHeldFor_text)) + print("Minimum stake: {0}, Maximum stake: {1}".format(minStake_text, maxStake_text)) print() #end define @@ -280,7 +303,7 @@ def PrintTimes(rootWorkchainEnabledTime_int, startWorkTime, oldStartWorkTime, co startElectionTime = Timestamp2Datetime(startElection) endElectionTime = Timestamp2Datetime(endElection) startNextElectionTime = Timestamp2Datetime(startNextElection) - + # datetime to color text rootWorkchainEnabledTime_text = bcolors.Yellow(rootWorkchainEnabledTime) startValidationTime_text = GetColorTime(startValidationTime, startValidation) @@ -290,15 +313,15 @@ def PrintTimes(rootWorkchainEnabledTime_int, startWorkTime, oldStartWorkTime, co startNextElectionTime_text = GetColorTime(startNextElectionTime, startNextElection) # Временные метки TON - ColorPrint("{cyan}===[ Временные метки TON ]==={endc}") - print("TON сеть была запущена: " + rootWorkchainEnabledTime_text) + ColorPrint("{cyan}=== [ TON timestamps ] ==={endc}") + print("TON Network launched: " + rootWorkchainEnabledTime_text) if startValidation < 0: return - print("Начало цикла валидации: " + startValidationTime_text) - print("Конец цикла валидации: " + endValidationTime_text) - print("Начало выборов: " + startElectionTime_text) - print("Конец выборов: " + endElectionTime_text) - print("Начало следующих выборов: " + startNextElectionTime_text) + print("Validation cycle began: " + startValidationTime_text) + print("Validation cycle ends: " + endValidationTime_text) + print("Start of election: " + startElectionTime_text) + print("End of election: " + endElectionTime_text) + print("The beginning of the next election: " + startNextElectionTime_text) #end define def GetColorTime(datetime, timestamp): @@ -654,6 +677,16 @@ def PrintValidatorList(args): +def secondsToText(secs): + days = secs//86400 + hours = (secs - days*86400)//3600 + minutes = (secs - days*86400 - hours*3600)//60 + seconds = secs - days*86400 - hours*3600 - minutes*60 + result = ("{0} day{1}, ".format(days, "s" if days!=1 else "") if days else "") + \ + ("{0} hour{1}, ".format(hours, "s" if hours!=1 else "") if hours else "") + \ + ("{0} minute{1}, ".format(minutes, "s" if minutes!=1 else "") if minutes else "") + \ + ("{0} second{1}, ".format(seconds, "s" if seconds!=1 else "") if seconds else "") + return result ### ### Start of the program ### diff --git a/mytoninstaller.py b/mytoninstaller.py index 72133e18..c7ab00bd 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -79,7 +79,7 @@ def Translate(text): # title = "quick_setup_title_liteclient_config" # appPath = local.buffer.get("liteClient").get("appPath") # configPath = local.buffer.get("liteClient").get("configPath") - + # # Получить параметры от пользователя # appPath = GetVarFromUser(title, "quick_setup_text_liteclient_program_path", appPath) # configPath = GetVarFromUser(title, "quick_setup_text_liteclient_config_path", configPath) @@ -118,7 +118,7 @@ def Translate(text): # appPath = local.buffer.get("validatorConsole").get("appPath") # privKeyPath = local.buffer.get("validatorConsole").get("privKeyPath") # pubKeyPath = local.buffer.get("validatorConsole").get("pubKeyPath") - + # # Получить параметры от пользователя # appPath = GetVarFromUser(title, "quick_setup_text_validator_engine_console_program_path", appPath) # privKeyPath = GetVarFromUser(title, "quick_setup_text_validator_engine_console_privkey_path", privKeyPath) @@ -160,7 +160,7 @@ def Translate(text): # appPath = local.buffer.get("fift").get("appPath") # libsPath = local.buffer.get("fift").get("libsPath") # smartcontsPath = local.buffer.get("fift").get("smartcontsPath") - + # # Получить параметры от пользователя # appPath = GetVarFromUser(title, "quick_setup_title_text_app_path", appPath) # libsPath = GetVarFromUser(title, "quick_setup_title_text_lib_path", libsPath) @@ -362,7 +362,7 @@ def General(): subprocess.call(["python3", "/usr/src/mytonctrl/mytoncore.py", "-d"]) # Конец - local.AddLog("MyTonCtrl успешно установлен") + local.AddLog("MyTonCtrl setup complete") #end define diff --git a/screens/.DS_Store b/screens/.DS_Store new file mode 100644 index 00000000..8b3baaee Binary files /dev/null and b/screens/.DS_Store differ diff --git a/screens/mytonctrl-awl.jpeg b/screens/mytonctrl-awl.jpeg new file mode 100644 index 00000000..379f7af7 Binary files /dev/null and b/screens/mytonctrl-awl.jpeg differ diff --git a/screens/mytonctrl-ewl.jpeg b/screens/mytonctrl-ewl.jpeg new file mode 100644 index 00000000..178ac4a3 Binary files /dev/null and b/screens/mytonctrl-ewl.jpeg differ diff --git a/screens/mytonctrl-inst.jpeg b/screens/mytonctrl-inst.jpeg new file mode 100644 index 00000000..c3f0921a Binary files /dev/null and b/screens/mytonctrl-inst.jpeg differ diff --git a/scripts/install.sh b/scripts/install.sh index b28804f9..5cea5507 100644 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -3,13 +3,13 @@ set -e # Проверить sudo if [ "$(id -u)" != "0" ]; then - echo "Запустите скрипт от имени администратора" + echo "Please run script as root" exit 1 fi # Проверка режима установки if [ "${1}" != "-m" ]; then - echo "Запустите скрипт в одном из двух режимов: '-m lite' или '-m full'" + echo "Run script with with flag '-m lite' or '-m full'" exit 1 fi @@ -24,16 +24,19 @@ rm -rf /tmp/vport.txt rm -rf /tmp/vconfig.json # Начинаю установку mytonctrl -echo -e "${COLOR}[1/4]${ENDC} Начинаю установку mytonctrl" +echo "${COLOR}[1/4]${ENDC} Starting installation MyTonCtrl" mode=${2} # Проверяю наличие компонентов TON -echo -e "${COLOR}[2/4]${ENDC} Проверяю наличие компонентов TON" +echo "${COLOR}[2/4]${ENDC} Checking for required TON components" file1=/usr/bin/ton/crypto/fift file2=/usr/bin/ton/lite-client/lite-client file3=/usr/bin/ton/validator-engine-console/validator-engine-console if [ -f "${file1}" ] && [ -f "${file2}" ] && [ -f "${file3}" ]; then echo "TON exist" + cd /usr/src + rm -rf /usr/src/mytonctrl + git clone --recursive https://github.com/igroman787/mytonctrl.git else rm -f toninstaller.sh wget https://raw.githubusercontent.com/igroman787/mytonctrl/master/scripts/toninstaller.sh @@ -42,10 +45,11 @@ else fi # Запускаю установщик mytoninstaller.py -echo -e "${COLOR}[3/4]${ENDC} Запускаю установщик mytoninstaller.py" +echo "${COLOR}[3/4]${ENDC} Launching the mytoninstaller.py" user=$(ls -lh install.sh | cut -d ' ' -f 3) su -l ${user} -c "python3 /usr/src/mytonctrl/mytoninstaller.py -m ${mode}" # Выход из программы -echo -e "${COLOR}[4/4]${ENDC} Установка mytonctrl завершена" +echo "${COLOR}[4/4]${ENDC} Mytonctrl installation completed" +echo "Write 'mytonctrl' to start the console." exit 0 diff --git a/scripts/toninstaller.sh b/scripts/toninstaller.sh index fad93428..2b004506 100644 --- a/scripts/toninstaller.sh +++ b/scripts/toninstaller.sh @@ -3,7 +3,7 @@ set -e # Проверить sudo if [ "$(id -u)" != "0" ]; then - echo "Запустите скрипт от имени администратора" + echo "Please run script as root" exit 1 fi @@ -12,12 +12,12 @@ COLOR='\033[95m' ENDC='\033[0m' # Установка требуемых пакетов -echo -e "${COLOR}[1/7]${ENDC} Установка требуемых пакетов" -apt-get install git make cmake clang libgflags-dev zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev python3 python3-pip -y -pip3 install psutil crc16 +echo -e "${COLOR}[1/7]${ENDC} Installing required packages" +apt-get install git make cmake clang libgflags-dev zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev python3-dev python3-pip python3-setuptools -y +pip3 install wheel psutil crc16 # Клонирование репозиториев с github.com -echo -e "${COLOR}[2/7]${ENDC} Клонирование репозиториев с github.com" +echo -e "${COLOR}[2/7]${ENDC} Cloning github repository" cd /usr/src rm -rf /usr/src/ton rm -rf /usr/src/mytonctrl @@ -25,7 +25,7 @@ git clone --recursive https://github.com/ton-blockchain/ton.git git clone --recursive https://github.com/igroman787/mytonctrl.git # Подготавливаем папки для компиляции -echo -e "${COLOR}[3/7]${ENDC} Подготавливаем папки для компиляции" +echo -e "${COLOR}[3/7]${ENDC} Preparing for compilation" rm -rf /usr/bin/ton mkdir /usr/bin/ton cd /usr/bin/ton @@ -36,11 +36,11 @@ export CXX=/usr/bin/clang++ cmake /usr/src/ton # Компилируем из исходников -echo -e "${COLOR}[4/7]${ENDC} Компилируем из исходников" +echo -e "${COLOR}[4/7]${ENDC} Source Compilation" make # use only `make` if some error # Скачиваем конфигурационные файлы lite-client -echo -e "${COLOR}[5/7]${ENDC} Скачиваем конфигурационные файлы" +echo -e "${COLOR}[5/7]${ENDC} Downloading config files" cd /usr/bin/ton/lite-client #wget https://test.ton.org/ton-lite-client-test1.config.json wget -O ton-lite-client-test1.config.json https://newton-blockchain.github.io/newton-test.global.config.json @@ -51,7 +51,7 @@ cd /usr/bin/ton/validator-engine wget -O ton-global.config.json https://newton-blockchain.github.io/newton-test.global.config.json # Создаем символические ссылки -echo -e "${COLOR}[6/7]${ENDC} Создаем символические ссылки" +echo -e "${COLOR}[6/7]${ENDC} Creating symbol links" echo "/usr/bin/python3 /usr/src/mytonctrl/mytonctrl.py" > /usr/bin/mytonctrl echo "/usr/bin/ton/crypto/fift \$@" > /usr/bin/fift echo "/usr/bin/ton/lite-client/lite-client -C /usr/bin/ton/lite-client/ton-lite-client-test1.config.json \$@" > /usr/bin/liteclient @@ -63,5 +63,5 @@ chmod +x /usr/bin/liteclient chmod +x /usr/bin/validatorconsole # Выход из программы -echo -e "${COLOR}[7/7]${ENDC} Установка пакетов программ TON завершена" +echo -e "${COLOR}[7/7]${ENDC} TON software installation complete" exit 0 diff --git a/scripts/update.sh b/scripts/update.sh index 294be226..f7ca6572 100644 --- a/scripts/update.sh +++ b/scripts/update.sh @@ -3,7 +3,7 @@ set -e # Проверить sudo if [ "$(id -u)" != "0" ]; then - echo "Запустите скрипт от имени администратора" + echo "Please run script as root" exit 1 fi @@ -18,6 +18,5 @@ ENDC='\033[0m' cd /usr/src/mytonctrl && git pull --recurse-submodules - # Конец -echo -e "${COLOR}[6/6]${ENDC} Обновление компонентов завершена" +echo "Upgrade complete. Please restart the console" diff --git a/scripts/vconfig.sh b/scripts/vconfig.sh index e4e60c38..39987f62 100644 --- a/scripts/vconfig.sh +++ b/scripts/vconfig.sh @@ -3,13 +3,13 @@ set -e # Проверить sudo if [ "$(id -u)" != "0" ]; then - echo "Запустите скрипт от имени администратора" + echo "Please run script as root" exit 1 fi # Проверка режима if [ "${1}" != "-kh" ]; then - echo "Запустите скрипт в режиме импорта ключа: '-kh '" + echo "Run the script in key import mode: '-kh '" exit 1 fi @@ -27,7 +27,7 @@ port=$(cat /tmp/vport.txt) addr=${ip}:${port} # Перемещаем наши ключи в нужную папку -echo -e "${COLOR}[1/4]${ENDC} Перемещаем наши ключи в нужную папку" +echo -e "${COLOR}[1/4]${ENDC} Moving your keys to the desired folder" server_key_hex=${2} mv /tmp/vkeys/server ${dbPath}/keyring/${server_key_hex} mv /tmp/vkeys/server.pub /usr/bin/ton/validator-engine-console/server.pub @@ -35,11 +35,11 @@ mv /tmp/vkeys/client /usr/bin/ton/validator-engine-console/client mv /tmp/vkeys/client.pub /usr/bin/ton/validator-engine-console/client.pub # Прописать наши ключи в конфигурационном файле валидатора -echo -e "${COLOR}[2/4]${ENDC} Прописываем наши ключи в конфигурационном файле валидатора" +echo -e "${COLOR}[2/4]${ENDC} Registering your keys in the validator configuration file" cat /tmp/vconfig.json > ${dbPath}/config.json # Запустить валидатор -echo -e "${COLOR}[3/4]${ENDC} Запускаем валидатор от имени пользователя 'validator'" +echo -e "${COLOR}[3/4]${ENDC} Starting valdiator from user 'validator'" cmd="${validatorAppPath} -d -C ${validatorConfig} --db ${dbPath} --ip ${addr} -l ${logPath}" su -l validator -s /bin/sh -c "${cmd} &" @@ -47,6 +47,4 @@ su -l validator -s /bin/sh -c "${cmd} &" chown -R validator:validator /var/ton-work # Конец -echo -e "${COLOR}[4/4]${ENDC} Перенастройка валидатора завершена" - - +echo -e "${COLOR}[4/4]${ENDC} Validator migration complete" diff --git a/scripts/vpreparation.sh b/scripts/vpreparation.sh index 5c901603..787f80dc 100644 --- a/scripts/vpreparation.sh +++ b/scripts/vpreparation.sh @@ -3,7 +3,7 @@ set -e # Проверить sudo if [ "$(id -u)" != "0" ]; then - echo "Запустите скрипт от имени администратора" + echo "Please run script as root" exit 1 fi @@ -13,7 +13,7 @@ ENDC='\033[0m' # Генерация порта для валидатора ip=$(curl --silent ifconfig.me) -echo -e "${COLOR}[1/6]${ENDC} Генерируем для валидатора порт подключения" +echo -e "${COLOR}[1/6]${ENDC} Generating validator connection port" port=$(shuf -i 2000-65000 -n 1) addr=${ip}:${port} echo "${port}" > /tmp/vport.txt @@ -25,12 +25,12 @@ validatorAppPath=/usr/bin/ton/validator-engine/validator-engine validatorConfig=/usr/bin/ton/validator-engine/ton-global.config.json # Подготовить папки валидатора -echo -e "${COLOR}[2/6]${ENDC} Подготавливаем папку валидатора" +echo -e "${COLOR}[2/6]${ENDC} Preparing the validator folder" rm -rf ${dbPath} mkdir -p ${dbPath} # Создать пользователя -echo -e "${COLOR}[3/6]${ENDC} Создаем нового пользователя 'validator' для работы валидатора" +echo -e "${COLOR}[3/6]${ENDC} Creating user 'validator'" result=$(cat /etc/passwd) if echo ${result} | grep 'validator'; then echo "user 'validator' exists" @@ -43,7 +43,7 @@ configPath=${dbPath}/config.json #rm -f ${configPath} && # Первый запуск валидатора -echo -e "${COLOR}[4/6]${ENDC} Создаем конфигурационный файл валидатора" +echo -e "${COLOR}[4/6]${ENDC} Creating config file" ${validatorAppPath} -C ${validatorConfig} --db ${dbPath} --ip ${addr} -l ${logPath} # Сменить права на нужные директории @@ -54,10 +54,10 @@ cp -r ${configPath} /tmp/vconfig.json chmod 777 /tmp/vconfig.json # Прописать автозагрузку в cron -echo -e "${COLOR}[5/6]${ENDC} Прописываем автозагрузку валидатора через cron от имени пользователя 'validator'" +echo -e "${COLOR}[5/6]${ENDC} Registering CRON autoload task 'validator'" cmd="${validatorAppPath} -d -C ${validatorConfig} --db ${dbPath} --ip ${addr} -l ${logPath}" cronText="@reboot /bin/sleep 60 && ${cmd}" echo "${cronText}" > mycron && crontab -u validator mycron && rm mycron # Конец -echo -e "${COLOR}[6/6]${ENDC} Настройка валидатора завершена" +echo -e "${COLOR}[6/6]${ENDC} Validator configuration completed"