
Poseidon: создавайте программы Solana с помощью TypeScript
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.
Дополнительные материалы
- Представляем Kite: современный TypeScript-фреймворк для Solana
- Образовательные программы Turbin3
- Репозиторий Poseidon на GitHub
- Примеры программ Poseidon
- Пакет @solanaturbine/poseidon в NPM
Похожие статьи
Подпишитесь на Helius
Следите за новостями разработки на Solana и получайте уведомления о наших публикациях


