Сборка и запуск TON Light Client под Ubuntu 18.04

cryptobro

New member
Сообщения
23
Реакции
7
Открываем терминал и обновляем операционную систему:

$ sudo apt update && sudo apt upgrade -y

Для запуска легкого клиента тестовой сети TON в Ubuntu 18.04 необходимо установить следующие пакеты:

$ sudo apt install ubuntu-make

Процесс установки ubuntu-make выглядит так:

37

Затем устанавливаем cmake:

$ sudo apt-get -y install cmake

Установка cmake:

38

При попытке установить clang:

$ sudo apt install clang

появляется сообщение что пакет уже установлен, так что этот шаг в Ubuntu 18.04 можно пропустить.

39


В других версиях linux пакет может быть и не установлен поэтому оставляю команду по установке clang на всякий случай. Вдруг кому пригодится.

Сохраняем в загрузки TON Blockchain Test Network Lite Client с помощью браузера по ссылке: https://test.ton.org/ton-test-liteclient-full.tar.xz

Или следующей командой в терминале:

$ wget https://test.ton.org/ton-test-liteclient-full.tar.xz

40

Распаковываем архив:

$ tar -xvf ton-test-liteclient-full.tar.xz

41

Создаем пустую папку:

$ mkdir liteclient-build

Переходим в неё:

$ cd ~/liteclient-build

Следующая по инструкции команда (cmake ~/lite-client) далась мне тяжелее всего, поэтому сначала выполняем это:

$ sudo apt-get install libssl-dev

42

$ sudo apt-get install gperf

43

А затем её:

$ cmake ~/lite-client

44

Приступаем к созданию клиента:

$ cmake --build . --target test-lite-client

45

Собираем интерпретатор языка Fift для смарт-контрактов:

$ cmake --build . --target fift

46

Скачиваем актуальный конфигурационный файл:

$ wget https://test.ton.org/ton-lite-client-test1.config.json

47

Запускаем клиент:

$ ./test-lite-client -C ton-lite-client-test1.config.json

48

Как видно, что-то пошло не так. Ищем ошибки. Проблема в стране пребывания.

P.S. в Ubuntu 18.04 эта проблема ушла после обновления клиента.

Если вы не из России, Ирана или какой-либо другой страны, где Telegram заблокирован, то все должно быть в порядке.


(c) взято из телеграм-канала: @ton_test_liteclient_ubuntu_18_04
 

cryptobro

New member
Сообщения
23
Реакции
7
Небольшое дополнение о порядке создания кошелька

Чтобы при запуске клиента передать ему папку для сохранения в неё последнего блока мастерчейна используем опцию -D, в Ubuntu 18.04 в таком формате ~/ton-db-dir путь к папке не сработает, поэтому создаем папку, указав полный путь к ней:

$ mkdir <source-directory>/ton-db-dir

И запускаем клиент указав в опции -D полный путь к папке

./test-lite-client -C ton-lite-client-test1.config.json -D <source-directory>/ton-db-dir

Соберем смарт-контракт. Скопируем его в папку с собранным клиентом (~/liteclient-build).

$ cp <source-directory>/lite-client/crypto/block/new-wallet.fif <source-directory>/liteclient-build/new-wallet.fif

Выполняем этот файл:

./crypto/fift -I"<source-directory>/lite-client/crypto/fift" new-wallet.fif

При успешном выполнении команды в консоли она завершится сообщением:
(Saved to file new-wallet-query.boc)
Это означает, что кошелёк успешно создан.

В строке консоли после записи "new wallet address = -1 :" вы можете увидеть его адрес.

Например:

new wallet address = -1 : 8d614c8aec369ecc58c8e300aa9c63bb3f9fd2b68a5b6fea895807e26ddc26dc
0f-NYUyK7DaezFjI4wCqnGO7P5_Stopbb-qJWAfibdwm3CtJ

Идентификатор созданного кошелька:

8d614c8aec369ecc58c8e300aa9c63bb3f9fd2b68a5b6fea895807e26ddc26dc (или сокращенный, что то же самое, 0f-NYUyK7DaezFjI4wCqnGO7P5_Stopbb-qJWAfibdwm3CtJ)

Соответствующий ему код окажется в файле new-wallet-query.boc, его адрес — в new-wallet.addr, а приватный ключ — в new-wallet.pk (будьте осторожны — повторный запуск скрипта перезапишет эти файлы). Сеть TON про этот кошелёк ещё не знает, он хранится только в виде этих файлов. Теперь его нужно загрузить в сеть. Правда, проблема в том, что для создания смарт-контракта нужно заплатить комиссию, а баланс у вашего аккаунта пока нулевой.

В рабочем режиме эта проблема решится покупкой Grams на бирже (или переводом с другого кошелька). Ну а в нынешнем тестовом режиме заведён специальный смарт-контракт, у которого можно попросить до 20 Gram просто так.
Моя первая попытка зарегистрировать кошелек в сети TON потерпела неудачу (либо где-то допустил ошибку, либо из-за жадности запросить все разрешенные 20 гGram). Только после создания другого кошелька мне удалось зарегистрировать его в сети TON, перевести на него со специального смарт-контракта указанные по умолчанию 6.666 Gram.

Сформируем запрос к смарт-контракту, раздающему Grams. В папке lite-client/crypto/block находим файл testgiver.fif:

Код:
// "testgiver.addr" file>B 256 B>[email protected]
0x8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d
dup constant wallet_addr ."Test giver address = " x. cr
-1 constant wallet_wc

// "new-wallet.addr" file>B 256 B>[email protected]
0x60c04141c6a7b96d68615e7a91d265ad0f3a9a922e9ae9c901d4fa83f5d3c0d0
dup constant dest_addr ."Destination address = " x. cr
-1 constant dest_wc

0 constant seqno

1000000000 constant Gram
{ Gram swap */ } : Gram*/

6.666 Gram*/ constant amount

// b x --> b'  ( serializes a Gram amount )
{ -1 { 1+ 2dup 8 * ufits } until
  rot over 4 u, -rot 8 * u, } : Gram,
 
// create a message (NB: 01b00.., b = bounce)
<b b{010000100} s, dest_wc 8 i, dest_addr 256 u, amount Gram, 0 9 64 32 + + 1+ 1+ u, "GIFT" $, b>
<b seqno 32 u, 1 8 u, swap ref, b>
dup ."enveloping message: " <s csr. cr
<b b{1000100} s, wallet_wc 8 i, wallet_addr 256 u, 0 Gram, b{00} s,
   swap <s s, b>
dup ."resulting external message: " <s csr. cr
2 boc+>B dup Bx. cr
"wallet-query.boc" tuck B>file
."(Saved to file " type .")" cr
И этот файл сохраним в папку с собранным клиентом:

$ cp <source-directory>/lite-client/crypto/block/testgiver.fif <source-directory>/liteclient-build/testgiver.fif

Поправим строчку — перед строчкой содержащей запись "constant dest_addr". Заменим её на адрес того кошелька, который вы создали до этого (полный, не сокращённый). "-1:" в начале писать не нужно, вместо этого в начале поставьте "0x".
У меня вышло так:
/ "new-wallet.addr" file>B 256 B>[email protected]
0x1479e1602dc6abf403f32c455012c098cae087d51e27539f446c25ccefaf4301
dup constant dest_addr ."Destination address = " x. cr
Где "1479e1602dc6abf403f32c455012c098cae087d51e27539f446c25ccefaf4301" полный адрес успешно созданного мной кошелька.

Пользователи macOS пишут, что можно поменять строку 6.666 Gram*/ constant amount — это сумма в Grams, которую вы запрашиваете (не больше 20). Даже если указываете целое число, оставьте десятичную точку.
Не знаю правда это или нет, мне не удалось запросить сумму отличную от 6.666 Gram. Пробуйте может у вас получится.

Завершаем правку файла изменением строки 0 constant seqno. Первое число тут — это текущий sequence number, который хранится в аккаунте, выдающем Grams. Откуда его взять? Запустите клиент и выполните команды:

Код:
last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d
В самом конце в данных смарт-контракта будет запись:

x{000000E1}

Число 000000E1 (у вас оно будет больше) и есть sequence number, который надо подставить в testgiver.fif.

Вносим необходимые правки в файле testgiver.fif:

Код:
-1 constant dest_wc

0x000000E1 constant seqno

1000000000 constant Gram
Сохраняем файл и запускаем:

./crypto/fift -I"<source-directory>/lite-client/crypto/fift" testgiver.fif

На выходе получим файл wallet-query.boc. Это и есть сформированное сообщение к чужому смарт-контракту — просьба «переведи столько-то Gram на такой-то аккаунт».

С помощью запущенного клиента загружаем его в сеть:

sendfile wallet-query.boc

Если теперь вызвать last, а затем снова запросить статус аккаунта, у которого мы попросили Grams, то мы должны увидеть, что его sequence number увеличился на единичку — это значит, что он отправил деньги нашему аккаунту.
Остался последний шаг — загружаем код нашего кошелька (баланс его уже пополнен, но без кода смарт-контракта мы не сможем им управлять). Выполняем sendfile new-wallet-query.boc — и всё, у вас есть собственный кошелёк в сети TON (пусть и пока лишь тестовой).


Переводы средств между пользователями (создание исходящих транзакций).

Чтобы переводить деньги с баланса созданного аккаунта, есть файл crypto/block/wallet.fif, который тоже нужно поместить в папку с собранным клиентом:

$ cp <source-directory>/lite-client/crypto/block/wallet.fif <source-directory>/liteclient-build/wallet.fif

Аналогично предыдущим шагам, в нём нужно поправить сумму, которую вы переводите, адрес получателя (dest_addr), и seqno вашего кошелька (он равен 1 после инициализации кошелька и увеличивается на 1 после каждой исходящей транзакции — вы сможете увидеть его, запросив состояние своего аккаунта).
Например, у меня это выглядит так:

Код:
last
getaccount -1:1479e1602dc6abf403f32c455012c098cae087d51e27539f446c25ccefaf4301
Для тестов можете использовать, например, кошелёк созданный пользователем на macOS

— 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2

Указанный в файле testgiver.fif по умолчанию:

— 0x60c04141c6a7b96d68615e7a91d265ad0f3a9a922e9ae9c901d4fa83f5d3c0d0

Или мой, созданный на Ubuntu 18.04:

— 0x1479e1602dc6abf403f32c455012c098cae087d51e27539f446c25ccefaf4301

Если вам понятно, что здесь написано, не ленимся, и запускаем максимально возможное количество транзакций для тестирования работоспособности сети TON.

В Ubuntu 18.04 команда (./crypto/fift wallet.fif) не работает выполняем её следующим образом:

$ ./crypto/fift -I"<source-directory>/lite-client/crypto/fift" wallet.fif

Скрипт возьмёт адрес вашего кошелька (откуда вы переводите) и его приватный ключ из файлов new-wallet.addr и new-wallet.pk, а полученное сообщение запишет в new-wallet-query.boc.

Как и раньше, чтобы непосредственно выполнить транзакцию, вызываем sendfile new-wallet-query.boc в клиенте. После этого не забываем обновить состояние блокчейна (last) и проверяем, что баланс и seqno нашего кошелька изменились (getaccount <account_id>). Например:

Код:
last
getaccount -1:1479e1602dc6abf403f32c455012c098cae087d51e27539f446c25ccefaf4301
 

Duelist

New member
Сообщения
4
Реакции
0
Здравствуйте! У вас ошибка в команде. Сейчас должно быть так:

cmake --build . --target lite-client


Подскажите, при выполнении этой команды вылезает ошибка

Код:
tl/CMakeFiles/tl_api.dir/build.make:86: recipe for target 'tl/CMakeFiles/tl_api.dir/generate/auto/tl/ton_api_json.cpp.o' failed
make[3]: *** [tl/CMakeFiles/tl_api.dir/generate/auto/tl/ton_api_json.cpp.o] Error 254
CMakeFiles/Makefile2:1152: recipe for target 'tl/CMakeFiles/tl_api.dir/all' failed
make[2]: *** [tl/CMakeFiles/tl_api.dir/all] Error 2
CMakeFiles/Makefile2:2454: recipe for target 'lite-client/CMakeFiles/lite-client.dir/rule' failed
make[1]: *** [lite-client/CMakeFiles/lite-client.dir/rule] Error 2
Makefile:851: recipe for target 'lite-client' failed
make: *** [lite-client] Error 2
Как ее поправить?
sudo apt install zlib1g-dev не помогает


UPDATE:

Отвечаю сам себе. Пропустил ошибку на этапе cmake ~/lite-client
В моем случае не хватало пакета libreadline-dev. Установил и все пошло:

apt install libreadline-dev
 
Последнее редактирование:

vervv

New member
Сообщения
2
Реакции
0
Добрый день. После обновления сети не могу установить Light Client
Все, что в описании сказано, установил (make, cmake, OpenSSL, g++)
но застрял на cmake ~/ton,
Прошу подсказать по возможности)))
97
 

bit2way

New member
Сообщения
3
Реакции
2
Может кому нибудь пригодится, краткая инструкция как собрать lite-client на ванильной ubuntu 18.04 lts, без картинок.
Bash:
apt install git ubuntu-make cmake clang libssl-dev gperf zlib1g-dev
cd ~
git clone https://github.com/ton-blockchain/ton.git
cd ~/ton
git submodule update --init
mkdir ~/liteclient-build
cd ~/liteclient-build
cmake ~/ton
cmake --build . --target lite-client
 
Последнее редактирование:
Сверху