Как все началось

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

Для разработки я наметил следующие шаги:

  1. Компиляция Mira SDK в библиотеку.

  2. Проверка базовых функций: баланс, перевод, обмен.

  3. Создание JNI моста и тестирование.

  4. Написание 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-канал. Там я делюсь идеями, проектами и практическими кейсами. ?

Комментарии (0)