Как все началось
Очередная история о том, как за идею я ввязался в бесплатную авантюру. Ко мне обратился товарищ с просьбой реализовать Telegram-бота, который позволял бы покупать криптовалюту по контракту в сети Fuel.
Подобные боты уже существуют, например, на Solana, но мы решили попробовать что-то новое — интеграцию на недавно вышедшей сети Fuel, так как ее экосистема бурно расширяется и подключается множество разработчиков к ее развитию.
Анализ и выбор подхода к разработке
Для реализации свапалки нужна была DEX с ликвидностью. Мы остановили выбор на Mira DEX, так как они предоставляют две SDK на: Rust и TypeScript.
Сеть Fuel построена на языке Sway, основанном на Rust. Учитывая, что мой основной язык разработки — Kotlin, я решил использовать Rust JNI Framework для создания моста между Kotlin и Rust.
// main.rs #[no_mangle] pub extern "C" fn hello_rust_world() -> *const i8 { // Возвращаем строку как указатель let c_string = std::ffi::CString::new("Hello Rust World!").unwrap(); c_string.into_raw() // Передаем указатель в JVM }
// HelloRustWorld.kt class HelloRustWorld { companion object { // Загрузка библиотеки init { System.loadLibrary("hello_rust") // Имя скомпилированной библиотеки } } // Объявление native метода external fun helloRustWorld(): String } fun main() { val rustWorld = HelloRustWorld() println(rustWorld.helloRustWorld()) // Вывод: Hello Rust World! }
Установка окружения: RustRover и Linux Subsystem
Для разработки я наметил следующие шаги:
-
Компиляция Mira SDK в библиотеку.
-
Проверка базовых функций: баланс, перевод, обмен.
-
Создание JNI моста и тестирование.
-
Написание Telegram-бота.
Когда я понял, что Mira SDK на Rust — это мой путь, первым делом я решил подготовить подходящую среду для разработки. Как опытный разработчик, я привык к удобству IDE, поэтому первым шагом было найти что-то, что могло бы упростить жизнь.
Выбор и установка RustRover
JetBrains — мой любимый поставщик инструментов. За годы работы я привык к их продуктам, начиная с IntelliJ IDEA и заканчивая PyCharm. Конечно, они не бесплатны (за PyCharm я плачу около $10 в месяц, за IntelliJ IDEA — ещё больше), но их функционал полностью оправдывает стоимость.
Оказалось, что у JetBrains есть специальная IDE для работы с Rust — RustRover, и она бесплатна!
После установки я создал проект и открыл его в RustRover. Всё выглядело отлично, пока я не попробовал подключить Mira SDK и собрать проект.
Первая проблема возникла сразу: Mira SDK компилируется только под Linux, а я работаю на Windows.
Решение: Установка WSL (Windows Subsystem for Linux)
На помощь пришла подсистема Linux для Windows (WSL). Если вы не знакомы с ней, это инструмент, который позволяет запускать Linux прямо в Windows. Вот инструкция по установке WSL.
Я установил WSL и выбрал дистрибутив Ubuntu. Но меня ждала ещё одна проблема: код теперь нужно было писать через консоль Linux. Это настоящий вызов для человека, который более 10 лет использует удобные IDE, а последние годы работает с AI на борту!
Сборка и первые успехи
После установки всех зависимостей и множества танцев с бубном мне удалось собрать Mira SDK. Компиляция наконец заработала, но цена за это была высока: десятки запросов к ChatGPT, несколько часов времени и горящие глаза(зад). 😅
Возвращение к RustRover
Когда я вернулся к RustRover, произошла магия. IDE вдруг начала видеть проект, а компиляция через неё заработала! Возможно, ему не хватало той самой Linux подсистемы(Но это не точно)
Оказалось, что RustRover автоматически:
-
Копирует файлы проекта в WSL.
-
Компилирует код внутри Linux-подсистемы.
-
Возвращает результаты сборки обратно в Windows.
Это было настоящим открытием! Люди, которые создают такие инструменты, заслуживают огромного уважения. RustRover решил множество проблем, и я продолжил работу в нём с удовольствием.
Проблемы с Mira SDK на Rust
Когда компиляция SDK заработала, я начал писать интеграционные тесты, чтобы проверить функции Mira SDK: баланс, перевод и SWAP. Но тут я столкнулся с настоящей болью:
-
SDK на Rust оказалась сырой.
-
Документации не было.
-
Разработчики не отвечали.
Даже после нескольких попыток и консультаций (спасибо @intbyte20 в Telegram!) я не смог заставить SDK работать корректно.
Переход на TypeScript
Поняв, что с Rust SDK ничего не выйдет, я решил попробовать TypeScript SDK. Это потребовало изменений:
-
Пример работы с SDK я написал на TypeScript.
-
Telegram-бота пришлось бы тоже писать на TypeScript.
По итогу я просто написал небольшой Sample, где подключи Mira SDK и на этом остановился. Написал товарищу очень простого бота, чтобы показать работу функций интеграции, и на этом закончил свою работу над этой авантюрой.
Итоги
Мой опыт интеграции Mira SDK — это пример того, как технические ограничения могут повлиять на реализацию проекта.
🔑 Основные сложности:
-
Работа с сырой SDK без документации.
-
Настройка окружения на Windows через Linux Subsystem.
-
Поиск рабочих решений через эксперименты и конечно ChatGPT.
💡 Интересные моменты:
-
Узнал, что Rust код можно собрать под JVM и подключать к Kotlin.
-
RustRover показал, как IDE могут автоматизировать сложные процессы между Windows и Linux(Узнал что VS тоже такое умеет через plugin).
-
Написал свои первые строки на Rust и TypeScript.
-
Ссылка на мой Github репозиторий с получившимся Sample кодом.
Надеюсь, мой опыт был интересен и полезен для вас. Если у вас есть вопросы или предложения, подписывайтесь на мой Telegram-канал. Там я делюсь идеями, проектами и практическими кейсами. 🚀
ссылка на оригинал статьи https://habr.com/ru/articles/872960/
Добавить комментарий