Начните работу с TON
Давайте создадим с нуля ваше первое приложение на блокчейне TON. Вы сможете оценить предлагаемые блокчейном TON скорость, надежность, а также ознакомиться с основными концепциями асинхронного мышления.
Если вы только делаете первые шаги в программировании, это руководство станет для вас отличной отправной точкой.
Данный обучающий курс включает в себя 5 модулей, а его прохождение займет примерно 45 минут.
🛳 Чему вы научитесь
Из этого руководства вы поймете, на сколько просто совершать транзакции в блокчейне с помощью JavaScript. Конечно вы можете научиться это делать и без руководства, но с ним будет гораздо легче, эффективнее и понятнее.
- Вы создадите свой собственный кошелек TON с помощью Tonkeeper
- Воспользуетесь краном Testnet для пополнения своего тестового кош елька
- Разберётесь в ключевых концепциях смарт-контрактов TON (адреса, ячейки)
- Научитесь взаимодействовать с TON с помощью TypeScript SDK и API-провайдера
- Скомпилируете свою первую транзакцию с помощью консольного приложения NFT Miner
И, главное – вы добудете NFT-достижение "Ракета"!!!
Ровно так же как и первые майнеры на TON, вы будете взаимодействовать со смарт-контрактом Proof-of-Work и по завершению получите секретное вознаграждение для вашего кошелька TON. Полный вперед!
Наша цель на сегодня – добыть NFT! Это достижение останется с вами навсегда.
В последствии, вы сможете добыть это NFT достижение даже в основной сети, mainnet. Это стоит всего 0,05 TON!.
Видеоурок
Для более подробного изучения материала, ознакомьтесь с очень полезным видеоуроком от Владимира Алефмана.
Майнинг на блокчейне TON
Сейчас мы разберем принципы майнинга на блокчейне TON. Этот материал позволит вам понять не только важность этого процесса, а также то, почему майнинг биткоинов помог совершить революцию в индустрии.
Хотя структура смарт-контрактов PoW Giver, определявшая начальный процесс майнинга и заложившая основу для TON, была завершена на старте, последний TON был добыт в июне 2022 года, завершим тем самым механизм распределения токенов через Proof-of-Work (PoW). Тем не менее, с нашим недавним переходом на Proof-of-Stake (PoS) эпоха стекинга в TON только начинается.
Теперь же давайте перейдем к первым шагам на пути к тому, чтобы стать разработчиком на TON, а также научиться добывать NFT. Ниже приведен пример того, что мы планируем создать в рамках курса.
Создание подобного майнера при сфокусированной работе займет около получаса.
🦄 Начало работы
Для начала работы, вам понадобятся следующие компоненты:
- Кошелек: Вам понадобится некостодиальный кошелек для хранения NFT в режиме тестовой сети.
- Репозиторий: Мы будем использовать готовый шаблон, созданный специально для вас.
- Среда разработки: Разработчикам нужно будет выбрать в какой среде они будут майнить – локальной или облачной.
Загрузка и создание кошелька
Для начала вам понадобится некостодиальный кошелек, который позволит вам получать и хранить ваши TON. В данном руководстве мы используем Tonkeeper. Вам необходимо будет включить режим Testnet в кошельке, для того чтобы иметь возможность получать тестовые Toncoin. Эти токены будут использованы позже для отправки финальной транзакции майнинга в смарт-контракт.
При использовании некастодиального кошелька, пользователь является владельцем кошелька, а также хранит приватный ключ самостоятельно.
Чтобы загрузить и создать кошелек TON, выполните следующие простые шаги:
- Установите приложение Tonkeeper на свой смартфон. Его можно скачать здесь.
- Далее вам необходимо включить тестовый режим в Tonkeeper.
Отлично! Теперь перейдем к разработке.
Настройка проекта
Чтобы упростить процесс и избежать рутинных низкоуровневых задач, мы будем использовать шаблонный проект.
Обратите внимание, что для дальнейшей работы вам потребуется войти в свою учётную запись GitHub.
Пожалуйста, используйте шаблон ton-onboarding-challenge для создания вашего проекта. Для этого нажмите кнопку "Use this template" и выберите вкладку "Create a new repository", как показано ниже:


После выполнения этого шага, вы получите доступ к высокопроизводительному репозиторию, который станет основой вашего майнера. Поздравляем! ✨
Среды разработки
Следующий шаг – выбрать среду разработки, которая лучше всего соответствует вашим потребностям, уровню опыта и навыкам. Как видите, этот процесс можно выполнить как в облачной, так и в локальной среде. Разработка в "облаке" часто считается более простой и легкой для начала работы. Ниже мы рассмотрим шаги, необходимые для обоих подходов.
Убедитесь, что вы открыли репозиторий в своем профиле GitHub, созданный на основе шаблона в предыдущем шаге.


Локальные и облачные среды разработки
-
Если вы не знакомы с JavaScript, работа в IDE может оказаться для вас сложной задачей, особенно если компьютер и инструменты не настроены для этого.
-
Но если вы знакомы с NodeJS и Git и умеете работать с
npm
, то использовать локальную среду разработки может быть удобнее.
Облачные пространства
Если вы решили работать в облачной ср еде, то начать можно в пару кликов: сначала выберите вкладку Code, а затем нажмите кнопку Create codespace on master в репозитории GitHub, как показано ниже:


Затем GitHub создаст специальное облачное рабочее пространство, дающее вам доступ к VSCode Online IDE (интегрированная онлайн-среда разработки Visual Studio Code).
После получения доступа (обычно codespace запускается примерно за 30 секунд), у вас будет все необходимое для работы без установки Git, Node.js или других инструментов.
Локальные среды разработки
Для настройки локальной среды разработки вам потребуется доступ к трем основным инструментам:
- Git. Необходимый инструмент для работы с репозиториями. Скачать можно здесь.
- NodeJS. Среда выполнения JavaScript и TypeScript, обычно используемая для разработки приложений на TON. Скачать можно [здесь] (https://nodejs.org/en/download/).
- JavaScript IDE. Обычно используются для разработки в локальной среде. Например - Visual Studio Code (VSCode).
Чтобы приступить к работе клонируйте ваш шаблонный репозиторий с GitHub и откройте нужный репозиторий в вашей интегрированной среде разработки (IDE).
Выполнение скриптов
В этом руководстве мы будем запускать скрипты на TypeScript. Все команды, такие как запуск скриптов или установка модулей, выполняются через командную строку в рабочей области терминала IDE. Обычно она находится в нижней части интерфейса.
Например, если в облачном Codespaces еще не открыто рабочее пространство терминала, его можно открыть следующим образом:


Вводите команды в этом окне и нажимайте Enter, чтобы выполнить их:


Терминал также можно использовать как отдельное приложение. Выберите подходящую версию в зависимости от вашей IDE и операционной системы.
Отлично! Теперь вы готовы глубже погрузиться в секреты блокчейна TON. 👀
🎯 Подключение к TON
Итак, что потребуется для подключения к блокчейну TON?
- Адрес смарт-контракта — как точка назначения. Мы будем добывать NFT из proof-of-work смарт-контракта, поэтому нам нужен его адрес, чтобы узнать текущую сложность майнинга.
- API-провайдер, чтобы отправлять запросы в блокчейн TON. Существует несколько типов API для разных задач. Мы будем использовать тестовую версию API toncenter.com.
- JavaScript SDK (Software Development Kit или SDK — набор инструментов для разработки) — нужен, чтобы обработать адрес смарт-контракта и подготовить его для API-запроса. Подробнее про адреса TON и их обработку, можно прочитать здесь. Для выполнения этого процесса мы будем использовать
@ton/ton
.
В следующем разделе мы разберем, как отправлять первые запросы в блокчейн TON через API TONCenter и @ton/ton
для получения данных от смарт-контракта PoW.
Адреса смарт-контрактов
Чтобы майнер работал правильно, нужно добавить два разных типа адресов смарт-контрактов:
- Адрес кошелька. Он необходим, для получения вознаграждения за майнинг. В данном случае нужно использовать режим Tonkeeper Testnet.
- Адрес коллекции. Необходим для корректного майнинга NFT смарт-контрактом. Для выполнения процесса, скопируйте адрес коллекции NFT под названием "TON onboarding challenge" с сайта Getgems.
Теперь давайте откроем файл ./scripts/mine.ts
в вашем майнере и создадим функцию mine()
, в которой определим основные константы следующим образом:
import {Address} from '@ton/ton';
const walletAddress = Address.parse('YOUR_WALLET_ADDRESS');
const collectionAddress = Address.parse('COLLECTION_ADDRESS');
async function mine () {
}
mine();
Использование функции async mine()
В процессе создания TON NFT майнера мы будем отправлять несколько запросов к публичному API, чтобы получать ответы и передавать их в нужные части кода. Использование функции async/await значительно упростит написание кода.
Парсинг адресов
На TON адреса смарт-контрактов имеют разные форматы и используют множество типов флагов. В данном случае мы будем использовать удобный для пользователя формат адреса. Если вы хотите узнать больше о типах адресов смарт-контрактов, изучите даный раздел в нашей документации.
Чтобы майнер работал корректно, нужно добавить два разных типа адресов смарт-контрактов, таких как:
Метод Address.parse()
, расположенный в @ton/ton
SDK, позволяет разработчику создать объект адреса для упрощенного преобразования адресов из одного формата в другой.
Подключение к API-провайдеру
На этом этапе мы подключимся к TON через API-провайдера TONCenter (размещенного на toncenter.com), используя специальные команды в скрипте.
Самый простой способ - это указать тестовый эндпоинт https://testnet.toncenter.com/api/v2/jsonRPC
.


Нужно добавить client
и endpoint
в скрипт ./scripts/mine.ts
, используя TonClient и тестовый эндпоинт Toncenter https://testnet.toncenter.com/api/v2/jsonRPC
:
import {Address, TonClient} from "@ton/ton"
// ... previous code
// specify endpoint for Testnet
const endpoint = "https://testnet.toncenter.com/api/v2/jsonRPC"
// initialize ton library
const client = new TonClient({ endpoint });
Лучше всего использовать провайдера RPC-узлов или запустить собственный экземпляр ton-http-api. Подробнее читайте на странице TonCenter API.
Получение данных майнинга из блокчейна TON
Следующий шаг — получить конкретные данные о майнинге из блокчейна TON.
Откройте файл README, который поможет пройти TON-онбординг-челлендж. Актуальные данные о майнинге TON можно получить, запустив метод get_mining_data
.
В результате мы должны получить массив с такими полями:
(
int pow_complexity,
int last_success,
int seed,
int target_delta,
int min_cpl,
int max_cpl
)