Как все началось
Очередная история о том, как за идею я ввязался в бесплатную авантюру. Ко мне обратился товарищ с просьбой реализовать 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-канал. Там я делюсь идеями, проектами и практическими кейсами. ?