НОВОЕ: Helius приобретает Light Protocol
Создание программ Solana с помощью TypeScript и Poseidon
Блог/Разработка

Poseidon: создавайте программы Solana с помощью TypeScript

Центр подготовки специалистов Solana.Team Turbin3 в XTeam Turbin3 в LinkedIn
Чтение: 8 мин

Poseidon — новый фреймворк-транспилятор, который позволяет веб-разработчикам создавать ончейн-программы Solana (то есть смарт-контракты), используя только TypeScript — язык, знакомый миллионам разработчиков по всему миру. Фреймворк значительно снижает порог входа в ончейн-разработку и делает Solana доступнее для более широкой аудитории разработчиков. Poseidon напрямую преобразует код TypeScript в Anchor — самый распространенный фреймворк для разработки программ Solana.

В этой статье мы подробно рассмотрим происхождение Poseidon, его архитектуру, ключевые возможности и потенциальное положительное влияние на экосистему разработки Solana. Кроме того, мы разберем практический пример простой программы хранилища токенов, написанной с помощью Poseidon, и продемонстрируем некоторые возможности фреймворка.

Предыстория

В конце 2023 года Solana Foundation обратилась к команде Turbin3 с амбициозной задачей: «Можете ли вы создать фреймворк, который позволит разработчикам писать программы Solana на TypeScript?» Естественно, первым ответом был вопрос: «Зачем?»

TypeScript — это статически типизированное надмножество JavaScript, которое помогает разработчикам раньше выявлять ошибки и писать более удобный в сопровождении код. TypeScript и JavaScript стали фактическим стандартом современной веб-разработки и сформировали одно из крупнейших сообществ разработчиков в мире. Возможность разрабатывать программы на TypeScript открывает значительные перспективы для расширения сообщества новых разработчиков Solana и снижения порога входа в блокчейн-разработку.

Освоить разработку программ Solana сложнее, чем разработку для многих других блокчейнов. Новым разработчикам приходится одновременно решать две задачи: разбираться в модели аккаунтов Solana и изучать Rust. Это может заметно усложнить обучение. Мы в Turbin3 знаем об этом лучше всех: 15% всех новых разработчиков Solana проходят через наши программы.

Фреймворк на TypeScript позволяет разделить эти задачи. Разработчики могут использовать уже знакомый язык и быстрее развернуть свои первые программы в тестовой сети. Фреймворк на TypeScript для разработки ончейн-программ впервые позволяет без лишних сложностей создавать полнофункциональные приложения Solana на одном языке.

Решение: Poseidon

Проект начинался как базовая библиотека типов и концепция транспилятора. Однако после создания первых прототипов и получения подробных отзывов от экспертов по Solana и TypeScript он быстро превратился в гораздо более надежное решение. После нескольких месяцев разработки, тестирования, устранения неполадок и получения ценных рекомендаций от отраслевых экспертов Poseidon достиг важной вехи на Breakpoint 2024, где мы представили нашу работу заинтересованным разработчикам. 

Во время презентации в прямом эфире Shrinath, ведущий разработчик Poseidon, продемонстрировал создание программы Solana на TypeScript. С помощью одной команды сборки Poseidon преобразовал код TypeScript в полноценный синтаксис Anchor прямо на глазах у аудитории. В зале ощущалось воодушевление, и повсюду слышался вопрос: «Неужели это действительно работает?»

С тех пор репозиторий Poseidon с открытым исходным кодом быстро развивается благодаря участникам растущего сообщества Poseidon Army в X и Discord. Участники сообщества решают проблемы, отправляют пул-реквесты и совместно создают новые пакеты, помогая Poseidon совершенствоваться каждый день. Среди улучшений — расширенный CLI, поддержка функций программы токенов и более понятные сообщения об ошибках. Хотя Poseidon все еще находится на ранней стадии развития, его потенциал не вызывает сомнений.

С технической точки зрения разработку Poseidon можно разделить на четыре этапа. После первых обсуждений, мозговых штурмов и проектирования архитектуры нам пришлось принять несколько ключевых решений. Самые важные из них: 

  • Выбор необходимых библиотек на основе предположений
  • Вывод аккаунтов в теле инструкции с помощью цепочек методов
  • Процедурные макросы — новая концепция для многих разработчиков

Затем мы полностью сосредоточились на разработке и итерациях перед презентацией на Breakpoint.  Эта эффектная премьера открыла путь к текущему этапу: мы передали фреймворк ранним пользователям, чтобы они могли экспериментировать, находить новые возможности и улучшать его.

Завершая 2024 год, мы продолжаем развивать фреймворк. Основное внимание уделяется улучшению базовой функциональности, привлечению сообщества к расширению поддержки, а также определению необходимых функций SPL и поддержки библиотек Anchor. Это позволит ведущим разработчикам сосредоточиться на ключевых улучшениях.

В 2025 году мы ускорим разработку, запустив в конце первого квартала первый поток Turbin3 Poseidon Cohort. Анонс появится в ближайшее время. Эта инициатива поможет развивать фреймворк и будет направлена на создание общедоступных пакетов, руководств и других образовательных материалов. Цель ясна: сделать Poseidon основным инструментом для ускоренной разработки программ Solana с помощью TypeScript.

Ключевые возможности

Poseidon предлагает несколько важных возможностей:

  • Упрощенная разработка: Интерфейс на TypeScript снижает порог входа для веб-разработчиков и позволяет им сосредоточиться на логике приложения, а не на освоении Rust
  • Повышенная продуктивность: Poseidon позволяет разработчикам работать эффективнее благодаря знакомым инструментам и рабочим процессам, ускоряя разработку
  • Повышенная безопасность и производительность: Фреймворк обеспечивает соответствие транспилированного кода Rust строгим стандартам безопасности и производительности Solana, сохраняя целостность ончейн-программ
  • Простая интеграция: Poseidon легко интегрируется с экосистемой Solana, позволяя разработчикам использовать существующие инструменты и библиотеки

Архитектура системы

Архитектура Poseidon состоит из нескольких ключевых компонентов:

  • Интерфейс программирования на TypeScript: Этот уровень предоставляет разработчикам знакомый синтаксис и инструменты для написания программ Solana
  • Механизм транспиляции: Он преобразует код TypeScript в эквивалентный код Rust, используя преимущества системы типов и языковых возможностей TypeScript
  • Генерация кода Anchor: Транспилированный код Rust проходит дополнительную обработку для создания корректных программ Anchor, которые можно скомпилировать и развернуть в сети Solana
  • Управление аккаунтами: Poseidon упрощает управление аккаунтами и связанными с ними данными, облегчая взаимодействие с блокчейном Solana

Сценарии использования

Poseidon помогает разработчикам быстрее разобраться в модели аккаунтов Solana и значительно сокращает время до развертывания первых программ в тестовой сети. Из-за строгих требований к безопасности блокчейн-приложений сегодня Poseidon не подходит для создания готовых к эксплуатации приложений основной сети. Будущим инженерам протоколов Solana в конечном итоге потребуется изучить Anchor и Rust, чтобы лучше понимать базовую архитектуру Solana.

Фреймворк можно использовать для изучения и экспериментов с широким спектром децентрализованных приложений, включая:

  • Децентрализованные финансы (DeFi): Разрабатывайте инновационные финансовые приложения, такие как протоколы кредитования, децентрализованные биржи и платформы доходного фарминга
  • Невзаимозаменяемые токены (NFT): Создавайте цифровые активы в блокчейне Solana и управляйте ими
  • Игры: Разрабатывайте игры и виртуальные миры на основе блокчейна
  • Управление цепочками поставок: Отслеживайте и проверяйте происхождение продуктов и материалов

Сначала мы сосредоточились на базовых программах, лежащих в основе почти каждого блокчейн-приложения: Counter, Vault и Escrow. Эти ключевые строительные блоки служат основой бесчисленных протоколов, поэтому с них лучше всего начинать.

Пример программы Poseidon

Давайте погрузимся в код и подробно разберем пример программы хранилища, созданной на TypeScript с помощью Poseidon. Мы рассмотрим каждую составную часть программы. Полный код этой и других программ доступен в репозитории Poseidon на GitHub.

Импорты и объявление программы

Программа определена как класс TypeScript со статическим полем PROGRAM_ID, которое задает ID программы. Пакет @solanaturbine/poseidon предоставляет типы, необходимые для определения инструкций: типы Rust (u8, u64, i8, i128, boolean, string), типы SPL (Pubkey, AssociatedTokenAccount, Mint, TokenAccount, TokenProgram) и типы аккаунтов Anchor (Signer, UncheckedAccount, SystemAccount).

Код
import { Account, Pubkey, Result, Signer, SystemAccount, SystemProgram, UncheckedAccount, u64, u8 } from "@solanaturbine/poseidon";

export default class VaultProgram {
    static PROGRAM_ID = new Pubkey("11111111111111111111111111111111");

Инструкции

Обычно для определения инструкций с помощью Poseidon мы создаем методы внутри класса программы. Контекст каждой инструкции неявно задается параметрами метода. Чтобы определить аккаунт как адрес, производный от программы (PDA), с помощью @solanaturbine/poseidon, мы используем метод derive и указываем seed первым параметром в массиве.

Код
    initialize(
        owner: Signer,
        state: Vault,
        auth: UncheckedAccount,
        vault: SystemAccount
    ): Result {

        auth.derive(['auth', state.key])
        state.derive(['state', owner.key]).init(owner)
        vault.derive(['vault', auth.key])

        // assign an argument of type Pubkey by calling the key property
        state.owner = owner.key;

        // to store bumps in the custom_Acc(state), we can simply call getBump
        state.stateBump = state.getBump()
        state.authBump = auth.getBump()
        state.vaultBump = vault.getBump()
    }

    deposit(
        owner: Signer,
        state: Vault,
        auth: UncheckedAccount,
        vault: SystemAccount,
        amount: u64
    ) {
        state.deriveWithBump(['state', owner.key], state.stateBump)
        auth.deriveWithBump(['auth', state.key], state.authBump)
        vault.deriveWithBump(['vault', auth.key], state.vaultBump)

        SystemProgram.transfer(
            owner, // from
            vault, // to
            amount // amount to be sent
        )
    }

    withdraw(
        owner: Signer,
        state: Vault,
        auth: UncheckedAccount,
        vault: SystemAccount,
        amount: u64
    ) {
        state.deriveWithBump(['state', owner.key], state.stateBump)
        auth.deriveWithBump(['auth', state.key], state.authBump)
        vault.deriveWithBump(['vault', auth.key], state.vaultBump)

        SystemProgram.transfer(
            vault,
            owner,
            amount,
            ['vault', state.key, state.authBump]
        )
    }
}

Состояние аккаунта

Аккаунты с пользовательским состоянием определяются как интерфейс, расширяющий Account. Поля такого аккаунта можно определить с помощью типов из пакета @solanaturbine/Poseidon.

Код
export interface Vault extends Account {
    owner: Pubkey
    stateBump: u8
    authBump: u8
    vaultBump: u8
}

Влияние Poseidon

Poseidon способен повлиять на сферу блокчейн-разработки следующими способами:

  • Расширение сообщества разработчиков Solana: Привлечение большего числа разработчиков в экосистему Solana
  • Ускорение разработки: Сокращение времени и трудозатрат на разработку проектов Solana
  • Улучшение опыта разработчиков: Более понятный и эффективный процесс разработки

Дальнейшие планы

В будущем Poseidon планирует расширить свои возможности следующими способами:

  • Расширение поддержки языков: Поддержка дополнительных языков, таких как JavaScript и Python
  • Повышение производительности: Оптимизация процесса транспиляции и генерируемого кода Rust
  • Повышение безопасности: Тщательное тестирование фреймворка и генерируемого кода на наличие уязвимостей

Заключение

Poseidon — важный шаг к тому, чтобы разработка программ Solana стала доступна более широкой аудитории. Он устраняет разрыв между веб-разработкой и блокчейн-программированием, позволяя разработчикам создавать инновационные и значимые приложения в блокчейне Solana. По мере развития блокчейн-индустрии Poseidon может стать незаменимым инструментом для начинающих разработчиков Solana.

Дополнительные материалы

‍

Подпишитесь на Helius

Следите за новостями разработки на Solana и получайте уведомления о наших публикациях

Увеличенное изображение