НОВОЕ: Попробуйте Parsed Events Scan API
Игры: как Solana меняет правила игры
Блог/Исследования

Игры: как Solana меняет правила игры

Developer Experience Engineer0xIchigo в X0xIchigo в LinkedIn0xIchigo на GitHub
Чтение: 28 мин

О чем эта статья?

Не ваши ключи — не ваша криптовалюта. Эта поговорка отражает дух криптовалют и в равной степени применима к видеоиграм. Интеграция блокчейнов в игровую индустрию — не просто инновация. Это смена парадигмы, которая обеспечивает децентрализованное владение активами и автономность. Во главе этих перемен стоит Solana. Она предлагает самую быструю платформу смарт-контрактов для использования преимуществ Web3. Высокая скорость, низкие и предсказуемые комиссии и малая задержка Solana позволяют разработчикам создавать уникальные игровые возможности, недоступные где-либо еще.

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

Зачем играм Web3?

Для игроков

Ни одна другая видеоигра не сравнится с Counter-Strike по коллекционным предметам. В зависимости от редкости и степени износа некоторые из самых редких скинов Counter Strike 2, то есть косметических предметов для оружия, могут стоить тысячи долларов. Инвентарь Neon, известного трейдера в сообществе Counter-Strike, содержал скины стоимостью более $100 тыс. 13 октября 2023 года его ошибочно заблокировала система Valve Anti-Cheat (VAC) после включения функции AMD Anti-lag+. После блокировки VAC игрок не может обменивать предметы из инвентаря. Поэтому инвентарь Neon стоимостью $100 тыс. оказался навсегда привязан к его аккаунту. Valve официально прокомментировала проблему, и, к счастью, Neon удалось снять блокировку. Однако в Counter-Strike 2 по-прежнему возникают ошибочные игровые блокировки.

На традиционной игровой платформе вроде Steam всегда есть скрытый риск потерять доступ к купленным играм или коллекционным предметам. Ничто не мешает Valve забрать ваши активы. Это кажется маловероятным из-за серьезного ущерба репутации и риска потерять целые сообщества игроков. Однако компания может повысить частоту выпадения редких предметов и тем самым снизить их стоимость. Именно это произошло с Team Fortress 2. Независимо от стоимости, каждой купленной вами игрой и каждым собранным внутриигровым предметом управляет централизованная организация. Игроки зависят от игровых корпораций. Даже Ethereum появился из-за патча 3.10 для World of Warcraft. Vitalik Buterin подробно рассказывал об «ужасах централизации»: Blizzard ослабила заклинание «Похищение жизни» его персонажа, обесценив годы игры. Игроки устали зависеть от централизованных организаций. Игры Web3 предлагают выход.

Игры Web3 меняют парадигму. Они используют технологию блокчейна для децентрализации владения активами и процессов принятия решений. Они обеспечивают прозрачность и безопасность, а игроки действительно владеют своими внутриигровыми активами на разных платформах. Так возникают виртуальные экономики наподобие рынка скинов Counter-Strike, но с преимуществами прозрачности, безопасности и компонуемости. Эти экономики поддерживают новые ориентированные на пользователей игровые модели, например Play-to-earn (P2E), в которых игроки получают за игровой процесс вознаграждение с реальной ценностью.

Это далеко не нишевая концепция. Потенциал игр Web3 для преобразования индустрии подтверждают несколько успешных и влиятельных проектов. Например, Decentraland предлагает виртуальный мир, где игроки могут покупать, продавать и развивать недвижимость в виде NFT. Tokens.com заплатила более $2 млн за недвижимость в центре Decentraland. Это демонстрирует возможности виртуальных экономик, цифрового опыта и личного пространства в экосистеме Web3. Аналогичным образом игры Play-to-earn, такие как Axie Infinity, и приложения для образа жизни, такие как STEPN — платформа move-to-earn, — привлекли международное внимание, показав, как игроки могут зарабатывать с помощью игрового процесса. Игры Star Atlas и Aurory добились аналогичного успеха на Solana. Это не отдельные примеры. Они относятся к более широкой тенденции, при которой игры выходят за рамки развлечений и объединяются с реальными экономическими и социальными системами.

Для разработчиков

Появление игр Web3 открывает перед разработчиками новые возможности, которые далеко выходят за рамки современной игровой парадигмы:

  • Более глубокие рынки и гарантии доверия: игры Web3 создают более глубокие и устойчивые рынки. Разработчики игр могут выйти на глобальную аудиторию, участники которой взаимодействуют с более высоким уровнем доверия. Все права владения внутриигровыми объектами и транзакции можно проверить и нельзя изменить. Это обеспечивают присущие блокчейнам прозрачность и безопасность.
  • Использование существующих ончейн-программ: разработчики могут легко интегрировать в игру существующие программы и связанные с ними активы. Это сокращает время выхода на рынок и позволяет разработчикам сосредоточиться на творчестве и инновациях благодаря сотрудничеству внутри экосистемы
  • Экономические и игровые инновации: разработчики могут проектировать сложные игровые и экономические циклы, использующие другие ончейн-приложения или возможности. Эта взаимосвязанность позволяет создавать насыщенные динамичные игровые миры, где действия в одной игре могут влиять на другую
  • Поддержка модификаций: открытость блокчейна позволяет разработчикам создавать игры, изначально рассчитанные на модификации. Это может привести к инновациям со стороны сообщества, когда игроки участвуют в развитии игры. Такой подход означает переход от закрытой среды к совместной модели разработки, ориентированной на сообщество

Блокчейны — не просто платформа для создания игр. Они позволяют разрабатывать принципиально новые формы интерактивного цифрового опыта. Блокчейны открывают путь к более динамичной игровой экосистеме с широким участием пользователей.

Почему стоит создавать игры на Solana?

Низкие и предсказуемые комиссии за транзакции критически важны для игр Web3. Игроки не хотят платить непомерные комиссии за игру. В Solana комиссии за транзакции низкие и часто составляют менее $0,001 USD, а средняя комиссия за транзакцию, не связанную с голосованием, держится в диапазоне от 0,000005 до 0,00007 SOL. Благодаря локальным рынкам комиссий эти расходы также предсказуемы. Они изолируют перегрузку, поэтому комиссии растут только для транзакций, которые обращаются к участкам состояния с высоким спросом. Это отличает Solana от сетей с оплатой газа, таких как Ethereum, где комиссии за транзакции непредсказуемы и в периоды высокой нагрузки даже простая транзакция может стоить более ста долларов.

Архитектура Solana обеспечивает непревзойденную компонуемость. Для игроков это означает простой пользовательский интерфейс с одним кошельком. Им не нужно разбираться в сложностях мостов между разными платформами. Все доступно и взаимосвязано внутри экосистемы Solana. Разработчикам игр компонуемость открывает множество возможностей. Они могут без труда интегрировать и использовать существующие ончейн-программы, например в рамках партнерства The Remnants и Magic Eden. Благодаря этому ликвидность игровых активов не распределяется между другими L2 или шардами. Solana формирует компонуемую экосистему и упрощает совместную работу игр, сообществ и других сетевых приложений.

Высокая скорость и низкая задержка необходимы для игр. Медленные транзакции могут мешать обновлению состояния игры, вызывать невыносимые задержки и увеличивать время ожидания. Пользовательский опыт окажется хуже, чем в традиционных играх. Solana рассчитана на высокую пропускную способность транзакций. Она обрабатывает в среднем 400 пользовательских транзакций в секунду (TPS), а при высоком спросе этот показатель превышает 2000 TPS. Благодаря готовящимся инновациям, таким как Firedancer, Solana потенциально сможет масштабироваться для поддержки любого традиционного потребительского приложения. Целевое время слота в Solana составляет 400 миллисекунд, то есть столько требуется каждому реестру, чтобы принять транзакции и создать блок. В зависимости от нагрузки на сеть оно может варьироваться от 500 до 600 миллисекунд, что делает Solana самым быстрым доступным блокчейном. Благодаря этому она становится идеальной базой данных реального времени для стратегий, пошаговых игр, градостроительных симуляторов и idle-игр.

Forever Games — это полностью ончейн-игры. Это самый радикальный вариант интеграции блокчейна, при котором состояние и логика игры полностью выполняются в блокчейне. В результате получается постоянная игра, подключенная к развитой системе протоколов, dApp и программ с низким порогом входа. Примеры на Solana:

  • SolanaCiv: стратегия 4X, вдохновленная Sid Meier’s Civilization
  • Geoverse: ролевая игра с видом сверху и управлением ресурсами
  • The Heist: основанная на риске idle-игра с высокими ставками, доступная владельцам соответствующих NFT
  • Sol-Chess: шахматный движок, написанный на Anchor

Для игрока время отклика в 400 миллисекунд звучит ужасно, если речь идет о гонках или шутерах в реальном времени. Однако не все нужно размещать непосредственно ончейн. Небольшие интеграции можно выполнить быстро: например, использовать NFT для представления внутриигровых предметов, токены для покупок в приложении, а кошелек игрока — для аутентификации. Уже сегодня доступно множество инструментов, с которыми вы можете начать интеграцию с Solana.

Инструменты для создания игр на Solana

В этой статье рассматриваются несколько популярных фреймворков и платформ для создания игр с интеграцией Solana. Для краткости мы не стали описывать некоторые инструменты, но добавили ссылки на них ниже, в разделе дополнительных ресурсов. В их числе Godot Solana SDK и стартовый шаблон Phaser 3 TypeScript. В этой статье мы рассмотрим установку, настройку и использование следующих инструментов:

Anchor

Фреймворки вроде Anchor значительно упрощают разработку ончейн-игр. Anchor — надежный фреймворк для быстрого создания безопасных программ. Он упрощает разработку, сокращая объем шаблонного кода, выполняя различные проверки безопасности, автоматизируя создание клиентских библиотек и предоставляя комплексную среду тестирования. Самый простой способ разработать полностью ончейн-игру — хранить ее логику и состояние в программе Anchor. Anchor абстрагирует сложные аспекты низкоуровневой модели программирования Solana. Благодаря этому разработчики могут сосредоточиться на создании игры, а не на борьбе с SVM.

Установка

Для использования Anchor требуется Rust. Его можно установить здесь или с помощью следующей команды:

Код
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Новичкам в Rust Anchor также рекомендует прочитать первые девять глав книги о Rust. В них описаны основы, поскольку для написания программ Anchor углубленные знания Rust обычно не требуются.

Для Anchor также требуется набор инструментов Solana:

Код
# macOS and Linux
sh -c "$(curl -sSfL https://release.solana.com/v1.17.7/install)"

# Windows
cmd /c "curl https://release.solana.com/v1.17.7/solana-install-init-x86_64-pc-windows-msvc.exe --output C:\solana-install-tmp\solana-install-init.exe --create-dirs"

Чтобы убедиться, что установлена нужная версия solana, выполните команду solana --version.

Также требуется Yarn, который можно установить с помощью менеджера пакетов npm: npm install --global yarn.

Рекомендуется устанавливать Anchor с помощью менеджера версий Anchor (avm). Его можно установить через cargo: cargo install --git <https://github.com/coral-xyz/anchor> avm --locked --force. Затем можно установить и использовать последнюю версию:

Код
avm install latest
avm use latest

# Verify the installation
avm --version

Документация Anchor также содержит подробное руководство по установке.

Использование и примеры

SolanaCiv полностью разработана ончейн с помощью Anchor. Управление ресурсами, набор юнитов, исследование новых технологий, сражения с варварами и торговля происходят ончейн. Кроме того, у игры открытый исходный код. Поэтому ее можно использовать как справочный материал, чтобы разобраться в игровой логике и состоянии и понять, как все хранится ончейн.

Clockwork — это движок автоматизации с открытым исходным кодом для Solana. Он особенно полезен при разработке игр, поскольку упрощает планирование транзакций и создание автоматизированных событийно-ориентированных программ. Он устанавливается командой cargo install -f --locked clockwork-cli и хорошо интегрируется с Anchor. Примеры использования Clockwork доступны здесь.

Solana Playground — браузерная среда разработки кода для тестирования и развертывания программ. Интегрированная среда разработки (IDE) делает ее идеальным выбором для новичков в Anchor, которые хотят изучить создание игр на Solana. В ней есть несколько руководств по Anchor, связанных с ончейн-играми. Например, Tiny Adventure — удобное для начинающих руководство по созданию ончейн-игры. В нем показано, как с помощью Anchor перемещать игрового персонажа влево и вправо и сохранять игровые данные по адресу, производному от программы (PDA). В руководстве также объясняется, как настроить фронтенд на Next.js с помощью адаптера кошелька Solana. Готовый код доступен здесь.

Чтобы быстро создать программу Anchor с клиентом TypeScript, используйте команду npx create-solana-game, а после нее укажите название игры. Эта команда упрощает разработку с Anchor и TypeScript и создает структуру нового проекта. Инструмент разработали Jonas Hahn и Beeman. Он доступен в репозитории solana-developers на GitHub.

Turbo

Turbo — игровой 2D-движок и торговая площадка нового поколения, созданные для расширения возможностей независимых разработчиков. Он предлагает несколько инновационных функций:

  • Игры автоматически перезагружаются при изменении кода, шейдеров или спрайтов
  • Игры работают без графического интерфейса, поэтому состояние игры можно проверять на удаленных серверах
  • Движок работает на WebAssembly и WebGPU, поэтому его можно запускать на любой платформе
  • Встроенные API движка удобны для начинающих

Jozanza разрабатывает Turbo на Rust. Благодаря Rust разработчики могут легко повторно использовать структуры Anchor в своих программах без SDK и плагинов. Сейчас проект все еще находится на ранней стадии разработки. Однако на его сайте есть несколько запускаемых в браузере примеров, которые демонстрируют мощь Turbo и удобство разработки. Кроме того, пошаговое руководство «Hello, world!» доступно здесь.

Установка

Чтобы начать работу с Turbo, сначала установите все необходимые зависимости Rust:

Код
# Download and run the rust installer
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Add wasm targets
rustup target add wasm32-unknown-unknown wasm32-wasi

# Install cargo-watch
cargo install cargo-watch

Затем скачайте и запустите установщик интерфейса командной строки Turbo (CLI):

Код
sh -c "$(curl -sSfL https://turbo.computer/install.sh)"

После завершения установки выполните команду turbo-cli -h, чтобы убедиться, что Turbo CLI установлен правильно. Эта команда должна вывести сведения об использовании Turbo:

Код
Run Turbo games natively on desktop

Usage: turbo-cli

Commands:
  init  Initializes a new Turbo project in Rust
  run   Runs a Rust Turbo project
  help  Print this message or the help of the given subcommand(s)

Options:
  -v, --version  Print version
  -h, --help     Print help
  -V, --version  Print version

Процесс разработки

Turbo предлагает несколько макросов для упрощения разработки. Макросы Rust — мощные инструменты метапрограммирования для генерации кода, то есть кода, который пишет другой код. Они помогают сократить объем шаблонного кода и использовать более выразительные программные конструкции.

Макрос println — это собственная реализация стандартного макроса println. Он форматирует строку и передает ее системе журналирования игрового движка:

Код
macro_rules! println {
    ($fmt:expr $(, $($arg:tt)*)?) => {
        $crate::sys::log(&format!($fmt, $($($arg)*)?))
    };
}

Макрос cfg используется для настройки. Он предоставляет функцию config, которая возвращает 64-разрядное целое число, объединяющее указатель на строку конфигурации и ее длину. Это удобно для передачи данных конфигурации из Rust в другую среду, например WebAssembly:

Код
macro_rules! cfg {
    ($toml:expr) => {
        #[no_mangle]
        pub unsafe extern "C" fn config() -> u64 {
            let ptr = $toml.as_ptr() as u64;
            let len = $toml.len() as u64;
            (len << 32 | ptr)
        }
    };
}

Макрос init полезен для управления состоянием игры. Он определяет структуру и предоставляет методы для загрузки и сохранения ее состояния. Он реализует для структуры методы load и save, используя Borsh для постоянного хранения состояния:

Код
macro_rules! init {
    (struct $StructName:ident { $($fields:tt)* } = $default:expr) => {
        ...
    };
}

Макрос go используется для определения основной логики игры. Он оборачивает блок кода в функцию, которую можно вызвать из внешней среды, например WebAssembly. Он также определяет точку входа для игровой логики и функцию run_snapshot для запуска игры со снимком ее состояния:

Код
macro_rules! go {
    ($($body:tt)*) => {
        use $crate::prelude::*;

        #[no_mangle]
        #[allow(overflowing_literals, non_upper_case_globals)]
        pub unsafe extern "C" fn run() {
            use std::f32::consts::PI;
            $($body)*
        }
        pub fn run_snapshot(snapshot_data: &[u8]) -> Vec {
            $crate::run_snapshot(snapshot_data, || unsafe { run() })
        }
    };
}

Turbo также использует макрос strike из крейта struckstruck, чтобы расширить возможности определения структур в Rust. Обычно вложенные структуры приходится определять отдельно. Макрос strike позволяет определять структуру вместе с вложенными структурами непосредственно в ней. Эта функция упрощает код и делает сложные структуры данных более понятными и лаконичными. Она также автоматически применяет сериализацию Borsch ко всей структуре. Кроме того, она распространяет макрос derive структуры верхнего уровня на все вложенные структуры.

Таким образом, полный рабочий процесс разработчика в проекте Turbo выглядит так:

Код
// Defne the game configuration using the turbo::cfg! macro
turbo::cfg! {r#"
    name = "Grand Theft Auto VI"
    version = "1.0.0"
    author = "Ichigo"
    description = "Vice City but pixelated"
    [settings]
    resolution = [256, 144]
    tile_size = [32, 32]
"#}

// Define the game state initialization using the turbo::init! macro
turbo::init! {
	...
}

// Implement the game loop using the turbo::go! macro
turbo::go! {
	// Load the game state
	let mut state = GameState::load();
	...
}

Поддержка Solana

Turbo отличается от других игровых движков на Rust тем, что будет полностью поддерживать Solana. Например, он может получить данные аккаунта через RPC и декодировать их всего в двух строках кода. Он также автоматически подписывается на обновления аккаунта через WebSockets, поэтому ваши данные всегда актуальны:

Код
// Get the Solana account data
let response = solana::get_account("pubkey");

// Decode the account data
let decoded = response.decode_anchor::();

// And now we can work with on-chain data!
if let Ok(data) = decoded {
	...
}

Magicblock

Magicblock — универсальный фреймворк с открытым исходным кодом для создания ончейн-игр. Он позволяет всем желающим создавать игры и играть в них на Solana или SVM. Богатый набор инструментов позволяет разработчикам создавать полностью ончейн-игры или интегрировать Solana в существующие проекты. Он включает следующие возможности:

С помощью всех этих функций Magicblock стремится скрыть сложность, чтобы разработчики могли сосредоточиться на создании максимально удобного пользовательского опыта. Фреймворк с лицензией MIT поддерживает Magicblock Labs, то есть Andrea и Peak.

Solana Unity SDK

Solana Unity SDK — пакет инструментов с открытым исходным кодом, который позволяет разработчикам интегрировать NFT, токены и ончейн-программы на базе Solana в игры на Unity. SDK использует Solana Unity Core — совместимый с .NET Standard 2.0 фреймворк, который интегрирует Solana с экосистемой .NET. Он предлагает множество возможностей, включая полную поддержку JSON RPC API, декомпиляцию инструкций, поддержку Solana Mobile Stack и нативные операции DEX.

Список примеров игр, созданных на Unity с помощью Solana Unity SDK, доступен здесь.

Установка, настройка и использование

Чтобы разрабатывать на Unity, скачайте Unity Hub здесь. Unity Hub управляет несколькими установленными версиями Unity Editor и позволяет работать с проектами и создавать новые проекты в разных версиях. Прежде чем продолжить, убедитесь, что ваша система соответствует следующим требованиям:

  • ОС: только 64-разрядные версии Windows 7 SP1+, 8 и 10; Mac OS X 10.13+; Ubuntu 16.04, 18.04 и CentOS 7
  • GPU: видеокарта с поддержкой DX10 (модель шейдеров 4.0)

После установки Unity можно создать и открыть новый проект.

Открыв новый проект, откройте окно Package Manager. Оно доступно в верхнем меню Unity по пути Window > Package Manager.

В открытом окне нажмите кнопку добавления (+) в строке состояния. Появятся варианты добавления пакетов. Затем выберите в меню «Add package from git URL».

Введите URL Git https://github.com/magicblock-labs/Solana.Unity-SDK.git в текстовое поле и нажмите «Add». Чтобы установить определенную версию пакета, введите https://github.com/magicblock-labs/Solana.Unity-SDK.git#X.Y.Z, заменив X.Y.Z нужной версией. Все доступные выпуски можно найти здесь.

После установки Solana Unity SDK импортируйте Samples с помощью инспектора Package Manager. Они включают пример сцены, который можно использовать как справочный материал или изменить для интеграции в проект Unity. Эта сцена находится в папке Scenes и содержит пример аутентификации с помощью кошелька и обмена токенов через Orca. Папка Scripts содержит различные примеры скриптов, включая скрипт для обменов через Orca. Скрипт Web3.cs можно прикрепить к любому объекту проекта. Этот скрипт служит основной точкой входа в Solana Unity SDK. Это синглтон, который управляет подключением к Solana и обеспечивает вход через кошелек, подписание транзакций и другие функции. Папка Prefabs содержит шаблоны, в которых хранятся конфигурации объектов. С их помощью можно создавать экземпляры одного и того же ресурса для повторного использования в проекте.

На YouTube-канале Magicblock доступны руководства по подключению кошельков Solana к Unity, получению открытого ключа и баланса кошелька, проведению тестов с внутриигровыми кошельками и созданию ончейн-шахматного движка.

Репозиторий Solana Unity SDK на GitHub также содержит несколько примеров скриптов: от декодирования инструкций до создания транзакций.

Пример реализации Jupiter

Помимо Orca, Solana Unity SDK изначально поддерживает Jupiter. SDK предлагает вспомогательные методы для получения котировок обмена, а также создания и отправки транзакций обмена.

Чтобы выполнить обмен, сначала создайте экземпляр IDexAggregator и передайте ему аккаунт по умолчанию. Этот экземпляр будет использоваться для взаимодействия с Jupiter:

Код
IDexAggregator dex = new JupiterDexAg(Web3.Account);

Затем определите токены для обмена. В этом примере мы обменяем SOL на BONK:

Код
TokenData tokenA = await dex.GetTokenBySymbol("SOL");
TokenData tokenB = await dex.GetTokenBySymbol("BONK");

Далее получите котировку обмена. Так выглядит котировка для обмена 1 SOL:

Код
SwapQuoteAg swapQuote = await dex.GetSwapQuote(
    tokenA.MintAddress,
    tokenB.MintAddress,
    DecimalUtil.ToUlong(1, tokenA.Decimals)
);

var quote = DecimalUtil.FromBigInteger(swapQuote.OutputAmount, tokenB.Decimals);

// Logs the expected amount of BONK
Debug.Log(quote);

Для большей прозрачности можно также отобразить маршрут обмена:

Код
Debug.Log(string.Join(" -> ", swapQuote.RoutePlan.Select(p => p.SwapInfo.Label)));

Теперь можно создать транзакцию обмена, подписать ее кошельком и отправить:

Код
Transaction tx = await dex.Swap(swapQuote);
await Web3.Wallet.SignAndSendTransaction(tx);

Перенос программы в Unity

Разработчики могут использовать пакет Solana Unity Anchor для интеграции программ Anchor в Unity. Этот пакет содержит конвертер IDL в C#. Он упрощает преобразование IDL Anchor, то есть JSON-представлений программ Solana, в код C# для проектов Unity. Процесс интеграции состоит из двух основных этапов:

  • Установка: команда dotnet tool install -g Solana.Unity.Anchor.Tool устанавливает Solana Unity Anchor Tool. Флаг -g обеспечивает глобальную установку пакета, поэтому устанавливать этот инструмент для каждого нового проекта не требуется
  • Генерация кода: команда dotnet anchorgen -i idl/file.json -o src/ProgramCode.cs создает представление программы на C#. Она преобразует указанный IDL в готовый к использованию в Unity файл C#.

Выполнив эти шаги, разработчики могут эффективно переносить программы Solana в среду Unity. Пошаговое видео с демонстрацией этого процесса от Jonas Hahn доступно здесь.

SOAR

Solana On-Chain Achievement and Ranking (SOAR) — программа, которая упрощает управление таблицами лидеров, достижениями, профилями игроков и автоматическим распределением наград в Solana. Она поддерживает несколько функций, включая:

  • Создание таблиц лидеров
  • Управление достижениями
  • Поддержку клиента TypeScript
  • Взаимодействие с программой SOAR через вызовы Cross-Program Invocation (CPI)

Поддержка Solana Unity SDK находится в разработке и должна появиться в ближайшее время.

SOAR легко интегрировать в проект с помощью нескольких строк кода. Например:

Код
import { SoarProgram, GameType, Genre } from "@magicblock-labs/soar-sdk";

const provider = anchor.AnchorProvider.env();
anchor.setProvider(provider);

const client = SoarProgram.get(provider);

let game = Keypair.generate();
let title = "Game1";
let description = "Description";
let genre = Genre.Action;
let gameType = GameType.Web;
let nftMeta = Keypair.generate().publicKey;
let _auths = auths.map((keypair) => keypair.publicKey);

// Retrieve the bundled transaction.
let { newGame, transaction } = await client.initializeNewGame(game.publicKey, title, description, genre, gameType, nftMeta, _auths);

// Send and confirm the transaction with the game keypair as signer.
await client.sendAndConfirmTransaction(transaction, [game]);

Приведённый выше код взят непосредственно из документации Magicblocks по SOAR. Сначала фрагмент импортирует необходимые модули из @magicblock-labs/soar-sdk, включая SoarProgram, GameType и Genre.

Класс SoarProgram предоставляет клиенту доступ ко всем инструкциям ончейн-программы SOAR. Он также позволяет вычислять PDA и получать данные нескольких аккаунтов.

Затем код инициализирует провайдер Anchor (anchor.AnchorProvider.env()) и назначает его провайдером по умолчанию для последующих операций (anchor.setProvider(provider)). После этого с ранее заданным провайдером создаётся клиент SoarProgram.

Далее фрагмент начинает инициализацию новой игры. Он генерирует новую пару ключей игры и задаёт основные сведения: название, описание, жанр (например, Genre.Action) и тип игры (например, GameType.Web). Для игры также генерируется пара ключей метаданных NFT. Затем создаётся список разрешений (_auths), определяющий управление доступом в игре.

У клиента SOAR вызывается метод initializeNewGame, которому передаются публичный ключ игры, название, описание, жанр, тип игры, метаданные NFT и разрешения. Этот метод возвращает объект newGame и подготавливает транзакцию создания игры к отправке. Транзакция отправляется и подтверждается методом sendAndConfirmTransaction, доступным в клиенте SOAR. Пара ключей игры используется для подписания транзакции, гарантируя её авторизацию создателем игры.

Инициализировать клиент и настроить новую ончейн-игру с SOAR несложно. Теперь с помощью GameClient можно зарегистрировать игру, создать таблицу лидеров и получить доступ к состоянию игры. Возможности безграничны.

Адрес программы SOAR — SoarNNzwQHMwcfdkdLc6kvbkoMSxcHy89gTHrjhJYkk, а её документация по TypeScript доступна здесь.

Solana Unreal SDK

Solana Unreal SDK — плагин и набор инструментов, с помощью которого разработчики могут создавать блокчейн-игры на Solana в Unreal Engine 5. Набор содержит стартовые шаблоны для интегрированных с Solana массовых многопользовательских онлайн-игр (MMO), включая шаблон игрового сервера. Он также предоставляет следующие возможности:

  • Полный набор возможностей Solnet в C++ и визуальных сценариях Blueprint
  • Внутриигровую систему кошельков с защитой и шифрованием данных
  • Выпуск NFT Metaplex
  • Обработку платежей

Плагин использует Solnet и возможности среды выполнения .NET, поэтому разработчики могут напрямую взаимодействовать с Solana, не создавая целую библиотеку C++ с нуля. LinkStream может отправлять сообщения транзакций из игр в кошельки, такие как Tranquility, через TCP-серверы и клиентские протоколы. Изначально SDK создала команда Star Atlas, а недавно Bifrost создала форк и обновила код. В следующем разделе об установке мы будем использовать сборку команды Star Atlas. Для Bifrost процесс аналогичен.

Установка

Чтобы использовать Unreal Engine, сначала установите Epic Games Launcher. Затем создайте аккаунт Epic Games и войдите в него. После входа перейдите на вкладку Unreal Engine и нажмите кнопку Установить, чтобы скачать последнюю версию. Подробное пошаговое описание процесса доступно здесь. Обратите внимание на рекомендуемые системные требования Unreal Engine 5:

  • Windows 10, 64-разрядная версия, четырёхъядерный процессор Intel или AMD с частотой 2,5 ГГц или выше, 8 ГБ ОЗУ
  • macOS Big Sur, четырёхъядерный процессор Intel с частотой 2,5 ГГц или выше, 8 ГБ ОЗУ
  • Linux Ubuntu 18.04, четырёхъядерный процессор Intel или AMD с частотой 2,5 ГГц или выше, 32 ГБ ОЗУ

Откройте Epic Games Launcher и запустите установленную версию Unreal:

Создайте новый проект и выберите C++ в качестве шаблона проекта:

Теперь закройте редактор и откройте папку Project Location, указанную при создании проекта. Затем создайте в корневом каталоге новую папку Plugins:

Скопируйте плагин в каталог Plugins. Нажмите правой кнопкой мыши файл .uproject в корневом каталоге и выберите Generate Visual Studio project files. Дважды нажмите файл .sln и откройте проект в своей IDE для C++. Затем откройте файл Source/<ProjectName>/<ProjectName>.build.cs. Добавьте название плагина в PublicDependencyModuleNames. В нашем случае нужно указать Foundation:

Добавьте название плагина в файл .uproject:

Закройте IDE и заново сгенерируйте файлы проекта. Затем откройте решение проекта, то есть файл .sln. На этом установка завершена.

Использование

Весь связанный с плагином контент находится в разделе Plugins > Solana SDK браузера контента. Чертёж LinkStream находится в разделе Plugins > Solana SDK Content > Blueprints. Он позволяет разработчикам взаимодействовать с Solnet. Карту песочницы из папки Maps можно использовать как пример правильной настройки Solana SDK. Описание основных способов использования, настройки обёртки LinkStream и взаимодействия с REST API для аутентификации сервера доступно в репозитории Solana Unreal SDK на GitHub. Более подробное описание взаимодействия с Solana через Unreal SDK можно найти здесь.

Благодаря ориентации Unreal на оптимизацию и эффекты постобработки в 3D можно создавать более фотореалистичные игры, чем в других редакторах, таких как Unity. Популярный пример такого гиперреализма — Star Atlas. Star Atlas — захватывающая стратегическая игра, которая проведёт вас через глубины космоса. Вас ждут многочисленные возможности, захват территорий и политические интриги. Другие игры, такие как Yaku Corp, используют фотореализм Unreal Engine для создания захватывающих MMORPG.

Honeycomb

Honeycomb — протокол от Tumi Labs, который упрощает разработку игр Web3. Honeycomb представляет собой набор ончейн-программ и инструментов сжатия состояния, отвечающих за ключевые функции жизненного цикла игры. Все программы совместимы друг с другом и имеют модульную архитектуру. Их также можно адаптировать под индивидуальные потребности разработчика. Набор инструментов для разработки инфраструктуры ориентирован на следующие основные функции:

  • Награды неактивным игрокам (стейкинг)
  • Квесты (задания)
  • Лутбоксы или случайные призы на основе RNG (розыгрыши)
  • Гильдии / группы
  • Игровые токены (кастодиальные и некастодиальные)
  • Изменяемые цифровые активы
  • Создание цифровых активов и управление ими
  • Профили игроков
  • Структуры комиссий

Инструменты делятся на следующие категории:

  • Hive Control: главная программа, управляющая всеми разрешениями и делегированием полномочий программ в Honeycomb
  • Asset Hub: набор инструментов для создания внутриигровых активов и управления ими
  • Nectar Utility: набор служебных инструментов, который позволяет NFT предоставлять уникальные игровые возможности, такие как награды в токенах за бездействие (стейкинг), квесты и лутбоксы
  • Buzz Kit: набор инструментов для создания внутриигровых гильдий. Tumi Labs также планирует разработать в рамках этого набора программы для подбора игроков и управления состоянием игры

Установка

Разработчики могут взаимодействовать с Honeycomb с помощью JavaScript SDK и @solana/web3.js:

Код
# Using npm
npm install @solana/web3.js @honeycomb-protocol/hive-control

# Using yarn
yarn add @solana/web3.js @honeycomb-protocol/hive-control

Пример использования

После установки разработчики могут инициализировать объект Honeycomb с объектом Solana Connection:

Код
import * as web3 from "@solana/web3.js";
import { Honeycomb } from "@honeycomb-protocol/hive-control";

const honeycomb = new Honeycomb(
  new web3.Connection("https://api.mainnet-beta.solana.com")
);

После этого открываются безграничные возможности. Например, разработчики могут взаимодействовать с IdentityClient, чтобы управлять идентификаторами и профилями пользователей. guestIdentity — идентификатор по умолчанию, который используется как заполнитель до регистрации пары ключей или кошелька в экземпляре Honeycomb. Связать пару ключей с идентификатором можно следующей командой: honeycomb.use(keypairIdentity(<keypair>);. Аналогичным образом объект кошелька (Solana Wallet Adapter) можно зарегистрировать как идентификатор с помощью функции walletIdentity, доступной в экземпляре Honeycomb. Идентификаторы можно использовать для аутентификации, например для подписания сообщений или транзакций.

Другой интересный пример — HttpClient. Этот модуль упрощает выполнение HTTP-запросов с помощью Axios или Fetch и предоставляет функции для работы с HTTP. Он позволяет настраивать заголовки запросов и содержит методы для выполнения запросов GET, POST, PUT и DELETE:

Код
// Make a GET request
honeycomb
  .http()
  .get("/users", { authToken: "myAuthToken" })
  .then((response) => {
    console.log("GET Response:", response);
  })
  .catch((error) => {
    console.error("GET Error:", error);
  });

// Make a POST request
const userData = { name: "John Doe", email: "john@example.com" };
honeycomb
  .http()
  .post("/users", { data: userData })
  .then((response) => {
    console.log("POST Response:", response);
  })
  .catch((error) => {
    console.error("POST Error:", error);
  });

Это особенно полезно, поскольку разработчики могут обращаться к сторонним API, например к API Digital Asset Standard (DAS), чтобы запрашивать данные о других ончейн-активах за пределами игры.

Эти фрагменты кода адаптированы из документации Honeycomb Protocol. Документация SDK доступна здесь.

GameShift

GameShift — платформа от Solana Labs, которая позволяет разработчикам игр легко интегрировать элементы Web3 через единый API. Она помогает создавать удобные интерфейсы в стиле Web2 и при этом использовать преимущества игр на Solana. GameShift обеспечивает удобное взаимодействие с экосистемой Web3, беря на себя все комиссии за газ, операции с блокчейном и работу с кошельками. GameShift API охватывает четыре направления:

  • Создание активов: выпуск игровых активов со структурированными метаданными
  • Торговля активами: покупка и продажа активов за доллары США на брендированных маркетплейсах, запуск которых ожидается в ближайшее время
  • Платежи: оплата банковскими картами и интеграции для обработки платежей доступны более чем в 170 странах, а также предусмотрена стопроцентная защита от возвратных платежей
  • Самостоятельное хранение активов в кошельке: позволяет игрокам хранить активы и торговать ими через некастодиальные кошельки, то есть без паролей и seed-фраз!

Чтобы начать работу с GameShift, разработчики могут создать аккаунт в консоли GameShift, настроить организацию, добавить в неё разработчиков и игру, а затем управлять своим ключом API разработчика. Весь процесс описан здесь.

Для фиатных транзакций требуется аккаунт продавца. Его можно создать в два этапа:

  • Проверка компании (KYB): разработчики должны предоставить сведения о своей компании для соблюдения законодательства о денежных переводах. Сейчас GameShift поддерживает расчёты в фиатной валюте только с банковскими счетами, открытыми в США
  • Настройка счёта для расчётов в фиатной валюте: когда разработчики будут готовы включить фиатные платежи в рабочей среде, им нужно обратиться в GameShift за ссылкой на форму регистрации продавца. Данные KYB указываются в этой форме. Проверка может занять несколько минут, но в отдельных случаях потребуется ручная проверка

Все действия в GameShift организованы в рамках организаций:

Подключение пользователей

После завершения настройки разработчики могут взаимодействовать с REST API. Они могут регистрировать пользователей, чтобы предоставить им доступ к функциям маркетплейса, ончейн-активам и платёжным потокам. Для этого нужно отправить POST HTTP-запрос на https://api.gameshift.dev/users, указав в теле запроса ключ API, адрес электронной почты пользователя и referenceId — уникальное значение, например UUID:

Код
curl --request POST \
     --url https://api.gameshift.dev/users \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --header 'x-api-key: ' \
     --data '
{
  "referenceId": "exampleReferenceId",
  "email": "user@example.com"
}

После регистрации сведения о пользователе и его активах можно получить в любое время. Для этого отправьте GET HTTP-запрос на https://api.gameshift.dev/users/{the-user-id-you-used-to-register}/assets:

Код
curl --request GET \
     --url https://api.gameshift.dev/users/exampleReferenceId/assets \
     --header 'accept: application/json' \
     --header 'x-api-key:

В случае успеха будет возвращён разбитый на страницы список активов пользователя:

Код
{
  "data": [
    {
      "id": "dcde5bc8-b30b-46b6-b4da-0763953b2484",
      "collectionId": "36c97125-04a5-4dc3-b92a-029d74a42287",
      "attributes": [],
      "name": "Example Asset",
      "description": "Example Description",
      "imageUrl": "https://solana.com/src/img/branding/solanaLogoMark.png",
      "status": "Committed",
      "owner": {
        "address": "",
        "referenceId": "exampleReferenceId"
      }
    }
  ],
  "meta": {
    "page": 1,
    "perPage": 50,
    "totalPages": 1
  }
}

Все фрагменты кода для подключения пользователей доступны здесь.

Создание актива

Например, разработчики могут программно создавать ончейн-активы игры, отправляя POST HTTP-запрос на https://api.gameshift.dev/assets:

Код
curl --request POST \
     --url https://api.gameshift.dev/assets \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --header 'x-api-key: ' \
     --data '
{
  "details": {
    "description": "Example description",
    "imageUrl": "https://solana.com/src/img/branding/solanaLogoMark.png",
    "name": "Example Asset",
    "attributes": [
      {
        "displayType": "Formatted Attribute Name",
        "traitType": "attribute-name",
        "value": "attribute-value"
      }
    ]
  },
  "destinationUserReferenceId": "exampleUserId"
}
'

Для активов необходимо указать следующие сведения:

  • description — строка длиной до 64 символов с информацией об активе
  • name — строка длиной до 32 символов для идентификации актива
  • imageUrl — прямая ссылка на изображение, представляющее актив
  • displayType — необязательный форматированный заголовок
  • traitType — необязательное название свойства
  • value — необязательное поле со значением атрибута

Для POST HTTP-запроса также требуется пользовательский referenceId, передаваемый в поле destinationUserReferenceId. Более подробное руководство по работе с игровыми активами доступно здесь.

Заключение

Интеграция блокчейна в игры, особенно с помощью Solana, существенно меняет наше восприятие цифровых миров и способы взаимодействия с ними. Такие инструменты, как Anchor, Turbo, Magicblock, Solana Unity SDK и Solana Unreal SDK, позволяют разработчикам создавать новые игровые механики. Теперь игрокам проще, чем когда-либо, развивать виртуальные экономики и взаимодействовать в совершенно новых социальных структурах — прозрачно и без лишних барьеров. Такие платформы, как Honeycomb и GameShift, дополнительно раскрывают потенциал игр Web3, упрощая разработку и повышая вовлечённость игроков.

Solana находится в авангарде этой игровой революции. Игровое сообщество Solana стабильно растёт: проводятся специализированные хакатоны и появляются новые игры. Solana Labs и Solana Foundation развивают это направление, создавая руководства, инструменты и платформы для поддержки молодого сообщества. Самый быстрый из доступных блокчейнов открывает безграничные возможности для будущего игр.

Если вы дочитали до этого места, anon, спасибо! Укажите адрес электронной почты ниже, чтобы не пропускать новости о Solana. Готовы погрузиться глубже? Присоединяйтесь к нашему Discord и начните уже сегодня создавать будущее игр на самом производительном блокчейне.

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

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

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

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