
Gaming: cómo Solana está cambiando el terreno de juego
Tabla de contenido
- ¿De qué trata este artículo?
- ¿Por qué el gaming Web3?
- Para jugadores
- Para desarrolladores
- ¿Por qué crear juegos en Solana?
- Herramientas para crear juegos en Solana
- Anchor
- Instalación
- Uso y ejemplos
- Turbo
- Instalación
- Proceso de desarrollo
- Compatibilidad con Solana
- Magicblock
- Solana Unity SDK
- Instalación, configuración y uso
- Ejemplo de implementación de Jupiter
- Portar un programa a Unity
- SOAR
- Solana Unreal SDK
- Instalación
- Uso
- Honeycomb
- Instalación
- Ejemplo de uso
- GameShift
- Incorporación de usuarios
- Creación de un activo
- Conclusión
- Recursos adicionales / Lecturas complementarias
¿De qué trata este artículo?
Si no son tus claves, no son tus criptomonedas. Este dicho, fundamental para la filosofía de las criptomonedas, es igual de relevante para los videojuegos. Integrar cadenas de bloques en el panorama de los videojuegos es más que una innovación. Es un cambio de paradigma que permite la propiedad descentralizada de activos y la autonomía. Solana está a la vanguardia de este cambio. Ofrece la plataforma de contratos inteligentes más rápida para aprovechar las ventajas de Web3. Gracias a las altas velocidades, las comisiones bajas y predecibles, y la baja latencia de Solana, los desarrolladores pueden crear experiencias de juego únicas que no serían posibles en ningún otro lugar.
Este artículo explora el potencial de la cadena de bloques en los videojuegos. Analiza los argumentos a favor del gaming Web3 y por qué los desarrolladores deberían considerar crear juegos en Solana. También explica cómo instalar, configurar y usar frameworks y plataformas populares para crear juegos integrados con Solana.
¿Por qué el gaming Web3?
Para jugadores
Ningún otro videojuego tiene coleccionables comparables con los de Counter-Strike. Según su rareza y valor de desgaste, algunas de las skins más raras de Counter Strike 2 (es decir, apariencias de armas dentro del juego) pueden valer miles de dólares. Neon, un conocido comerciante de la comunidad de Counter-Strike, tenía un inventario de skins valorado en más de $100 000. El 13 de octubre de 2023, fue bloqueado por error por el sistema antitrampas de Valve (VAC) tras activar la función Anti-Lag+ de AMD. Un bloqueo de VAC impide que un jugador intercambie su inventario. Esto significó que el inventario de Neon, valorado en $100 000, quedó vinculado permanentemente a su cuenta. Valve abordó formalmente el problema y, por suerte, Neon logró que se retirara su bloqueo. Counter-Strike 2 aún tiene problemas con bloqueos erróneos.
En una plataforma de gaming tradicional como Steam, siempre existe el riesgo subyacente de perder el acceso a los juegos o coleccionables comprados. Nada impide que Valve te quite tus activos. Parece poco probable por el grave daño reputacional y la posible destrucción de comunidades enteras de jugadores. Sin embargo, podría aumentar las tasas de aparición de objetos raros y reducir así su valor. Esto es precisamente lo que ocurrió con Team Fortress 2. Sin importar su valor, una entidad centralizada administra cada juego que compras y cada objeto que obtienes dentro de él. Los jugadores están a merced de las empresas de videojuegos. Incluso Ethereum se creó debido al parche 3.10 de World of Warcraft. Vitalik Buterin ha hablado ampliamente sobre los “horrores de la centralización” después de que Blizzard debilitara el hechizo Drenar vida de su personaje y arruinara años de juego. Los jugadores están cansados de depender de entidades centralizadas. El gaming Web3 ofrece una salida.
El gaming Web3 es un cambio de paradigma. Aprovecha la tecnología de cadena de bloques para descentralizar la propiedad de activos y los procesos de toma de decisiones. Garantiza transparencia y seguridad, y permite que los jugadores sean verdaderos propietarios de sus activos dentro del juego en distintas plataformas. El resultado son economías virtuales, como el mercado de skins de Counter-Strike, con las ventajas de la transparencia, la seguridad y la composabilidad. Estas economías facilitan nuevos modelos de juego centrados en el usuario, como Play-to-earn (P2E), donde los jugadores reciben recompensas con valor en el mundo real por jugar.
Esto está lejos de ser un concepto de nicho. Varios juegos exitosos e influyentes demuestran el potencial del gaming Web3 para revolucionar el sector. Por ejemplo, Decentraland ofrece un mundo virtual donde los jugadores pueden comprar, vender y desarrollar bienes raíces como NFT. Tokens.com pagó más de $2 millones por bienes raíces en el centro de Decentraland. Esto demuestra las posibilidades de las economías virtuales, las experiencias digitales y los espacios personales dentro del ecosistema Web3. De forma similar, juegos Play-to-earn como Axie Infinity y aplicaciones de estilo de vida como STEPN (una plataforma move-to-earn) han atraído atención internacional al demostrar que los jugadores pueden generar ingresos mientras juegan. Juegos como Star Atlas y Aurory han tenido un éxito similar en Solana. No son ejemplos aislados. Forman parte de una tendencia más amplia en la que los videojuegos trascienden el entretenimiento y se fusionan con sistemas económicos y sociales del mundo real.
Para desarrolladores
La llegada del gaming Web3 abre nuevas oportunidades para los desarrolladores de juegos que van mucho más allá de los límites del paradigma actual:
- Mercados más profundos y garantías de confianza: el gaming Web3 crea mercados más profundos y sólidos. Los desarrolladores pueden acceder a una audiencia global cuyos participantes interactúan con un mayor grado de confianza. Toda propiedad y transacción dentro del juego es verificable e inmutable. Esto es posible gracias a la transparencia y seguridad inherentes de las cadenas de bloques.
- Aprovechamiento de programas on-chain existentes: los desarrolladores pueden integrar fácilmente programas existentes y sus activos asociados en sus juegos. Esto reduce el tiempo de lanzamiento y permite que se concentren en la creatividad y la innovación mediante la colaboración con el ecosistema
- Innovaciones económicas y de jugabilidad: los desarrolladores pueden diseñar ciclos económicos y de juego complejos que aprovechen otras aplicaciones o experiencias on-chain. Esta interconexión permite crear mundos de juego ricos y dinámicos, donde las acciones en un juego pueden repercutir en otro
- Fomento de las modificaciones: la naturaleza abierta de la cadena de bloques permite que los desarrolladores creen juegos diseñados para fomentar las modificaciones. Esta apertura puede impulsar la innovación dirigida por la comunidad, donde los jugadores contribuyen a la evolución del juego. Esto supone pasar de un entorno de código cerrado a un modelo de desarrollo colaborativo y centrado en la comunidad
Las cadenas de bloques ofrecen más que una plataforma para crear juegos. Son medios para desarrollar nuevas formas de experiencias digitales interactivas. Las cadenas de bloques abren paso a un ecosistema de gaming más dinámico y participativo.
¿Por qué crear juegos en Solana?
Las comisiones de transacción bajas y predecibles son cruciales para el gaming Web3. Los jugadores no quieren pagar comisiones exorbitantes para jugar. Solana tiene comisiones de transacción bajas, a menudo inferiores a $0.001 USD, y la comisión promedio sin voto oscila entre 0.000005 y 0.00007 SOL. Estas comisiones también son predecibles gracias a los mercados de comisiones localizados. Estos aíslan la congestión para que solo aumenten las comisiones de las transacciones que intentan acceder a áreas del estado con alta demanda. Esto difiere de las redes basadas en gas, como Ethereum, donde las comisiones son impredecibles y una transacción sencilla puede costar más de cien dólares durante periodos de alta congestión.
La arquitectura de Solana ofrece una composabilidad inigualable. Para los jugadores, esto significa una experiencia optimizada con una sola cartera. No necesitan preocuparse por la complejidad de usar puentes hacia otras plataformas. Todo es accesible y está interconectado dentro del ecosistema de Solana. Para los desarrolladores, la composabilidad presenta una gran cantidad de oportunidades. Pueden integrar y aprovechar fácilmente programas on-chain existentes (por ejemplo, la asociación entre The Remnants y Magic Eden). Esto evita que la liquidez de los activos del juego se fragmente entre otras L2 o shards. Solana fomenta un ecosistema componible que facilita la colaboración fluida entre juegos, comunidades y otras aplicaciones de la red.
Las altas velocidades y la baja latencia son esenciales para los videojuegos. Las transacciones lentas pueden dificultar las actualizaciones del estado del juego, provocar un retraso insoportable y generar largos tiempos de espera. Esto ofrecería una experiencia peor que el gaming tradicional. Solana está diseñada para procesar un gran volumen de transacciones. Alcanza un promedio de 400 transacciones generadas por usuarios por segundo (TPS) y supera las 2000 TPS durante periodos de alta demanda. Con innovaciones como Firedancer en camino, Solana tiene el potencial de escalar para admitir cualquier aplicación tradicional de consumo. Solana también tiene un tiempo objetivo de slot de 400 milisegundos (es decir, el tiempo que tarda cada libro mayor en incorporar transacciones y producir un bloque). Puede variar entre 500 y 600 milisegundos según la demanda de la red, lo que la convierte en la cadena de bloques disponible más rápida. Esto la hace una base de datos en tiempo real perfecta para géneros como juegos de estrategia, juegos por turnos, construcción de ciudades y juegos inactivos.
Los Forever Games son juegos completamente on-chain. Este es el caso más extremo de integración con cadenas de bloques, donde el estado y la lógica de un juego se ejecutan por completo en la cadena. El resultado es un juego persistente conectado a un amplio sistema de protocolos, dApps y programas, con una barrera de entrada baja. Algunos ejemplos en Solana son:
- SolanaCiv: un juego de estrategia 4X inspirado en Sid Meier’s Civilization
- Geoverse: un RPG de gestión de recursos con vista cenital
- The Heist: un juego inactivo de alto riesgo basado en probabilidades y restringido a quienes poseen sus NFT
- Sol-Chess: un motor de ajedrez escrito en Anchor
Como jugador, un tiempo de respuesta de 400 milisegundos suena terrible para juegos de carreras o disparos en tiempo real. Sin embargo, no todo debe ejecutarse directamente on-chain. Por ejemplo, es posible implementar rápidamente integraciones más pequeñas que usen NFT para representar objetos dentro del juego, tokens para compras en la aplicación y la cartera del jugador para la autenticación. Hoy tienes a tu disposición una gran variedad de herramientas para empezar a integrar Solana.
Herramientas para crear juegos en Solana
Este artículo analiza varios frameworks y plataformas populares para crear juegos integrados con Solana. Para ser breves, no abordamos algunas herramientas, pero incluimos enlaces a ellas en la sección de recursos adicionales más abajo. Entre ellas se encuentran el Godot Solana SDK y la plantilla inicial de Phaser 3 para TypeScript. Para los fines de este artículo, analizaremos cómo instalar, configurar y usar las siguientes herramientas:
Anchor
Desarrollar un juego on-chain es mucho más fácil con frameworks como Anchor. Anchor es un framework sólido que permite crear programas seguros con rapidez. Simplifica el proceso de desarrollo al reducir el código repetitivo, gestionar distintas comprobaciones de seguridad, automatizar la generación de bibliotecas cliente y ofrecer una configuración completa para pruebas. La forma más sencilla de desarrollar un juego completamente on-chain es almacenar su lógica y estado en un programa de Anchor. Anchor abstrae las complejidades del modelo de programación de bajo nivel de Solana. Así, los desarrolladores pueden concentrarse más en crear el juego que en lidiar con la SVM.
Instalación
Necesitas Rust para usar Anchor. Puedes instalarlo aquí o con el siguiente comando:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shAnchor también recomienda que quienes comienzan con Rust lean los primeros nueve capítulos del libro de Rust. Estos cubren los conceptos básicos, ya que la mayoría de las veces no necesitas conocimientos avanzados de Rust para escribir programas de Anchor.
Anchor también requiere Solana Tool Suite:
# 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"Puedes confirmar que instalaste la versión deseada de solana ejecutando el comando solana --version.
También necesitas Yarn, que puedes instalar mediante el administrador de paquetes npm: npm install --global yarn.
Se recomienda instalar Anchor mediante el administrador de versiones de Anchor (avm). Puedes instalarlo con cargo: cargo install --git <https://github.com/coral-xyz/anchor> avm --locked --force. Luego, puedes instalar y usar la versión más reciente:
avm install latest
avm use latest
# Verify the installation
avm --versionLa documentación de Anchor también ofrece una guía de instalación detallada.
Uso y ejemplos
SolanaCiv se desarrolla completamente on-chain con Anchor. La gestión de recursos, el reclutamiento de unidades, la investigación de nuevas tecnologías, las luchas contra bárbaros y el comercio ocurren on-chain. ¡También es de código abierto! Esto permite usarlo como referencia para desglosar la lógica y el estado del juego y ver cómo se almacena todo on-chain.
Clockwork es un motor de automatización de código abierto para Solana. Resulta especialmente útil para desarrollar juegos porque facilita la programación de transacciones y la creación de programas automatizados controlados por eventos. Puedes instalarlo con el comando cargo install -f --locked clockwork-cli y se integra bien con Anchor. Puedes consultar una lista de ejemplos sobre cómo usar Clockwork aquí.
Solana Playground es un entorno de desarrollo de código basado en el navegador para probar e implementar programas. Su entorno de desarrollo integrado (IDE) lo convierte en una opción ideal para quienes comienzan con Anchor y quieren aprender a desarrollar juegos en Solana. Incluye varios tutoriales de Anchor relevantes para el gaming on-chain. Por ejemplo, Tiny Adventure es un tutorial para principiantes sobre un juego on-chain. Te enseña a usar Anchor para mover un personaje hacia la izquierda y la derecha, y a usar una dirección derivada de un programa (PDA) para guardar los datos del juego. También muestra cómo configurar un front end en Next.js mediante el adaptador de carteras de Solana. Puedes consultar el código terminado aquí.
Para crear rápidamente un programa de Anchor con un cliente TypeScript, usa el comando npx create-solana-game seguido del nombre de tu juego. Este comando agiliza el proceso de desarrollo con Anchor y TypeScript al estructurar un proyecto nuevo. La herramienta fue desarrollada por Jonas Hahn y Beeman, y está disponible en el repositorio de GitHub solana-developers.
Turbo
Turbo es un motor y mercado de juegos 2D de próxima generación diseñado para empoderar a desarrolladores independientes. Incluye varias funciones innovadoras:
- Los juegos se recargan en caliente cada vez que se modifica el código, los shaders o los sprites
- Los juegos se ejecutan sin interfaz gráfica para que puedas verificar su estado en servidores remotos
- El motor funciona con WebAssembly y WebGPU, por lo que puede ejecutarse en cualquier plataforma
- Las API integradas del motor son fáciles de usar para principiantes
Jozanza está desarrollando Turbo en Rust. Al estar desarrollado en Rust, los desarrolladores pueden reutilizar fácilmente las structs de Anchor en sus programas sin necesidad de SDK ni plugins. El proyecto aún se encuentra en una etapa inicial de desarrollo. Sin embargo, su sitio web contiene varios ejemplos que se pueden ejecutar en el navegador y demuestran la potencia de Turbo y su experiencia intuitiva para desarrolladores. También puedes encontrar un tutorial de “¡Hola, mundo!” aquí.
Instalación
Para comenzar a usar Turbo, primero debemos instalar todas las dependencias relevantes de 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-watchDespués, debemos descargar y ejecutar el instalador de la interfaz de línea de comandos (CLI) de Turbo:
sh -c "$(curl -sSfL https://turbo.computer/install.sh)"Cuando termine la instalación, podemos usar el comando turbo-cli -h para verificar que la CLI de Turbo esté instalada correctamente. Este comando debería mostrar la información de uso de 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 versionProceso de desarrollo
Turbo incluye varias macros para simplificar el proceso de desarrollo. Como aclaración, las macros de Rust son potentes herramientas de metaprogramación para generar código (es decir, código que escribe otro código). Ayudan a reducir el código repetitivo y permiten usar patrones de código más expresivos.
La macro println es una implementación personalizada de la macro estándar println. Formatea una cadena y después la envía al sistema de registros del motor de juegos:
macro_rules! println {
($fmt:expr $(, $($arg:tt)*)?) => {
$crate::sys::log(&format!($fmt, $($($arg)*)?))
};
}La macro cfg se usa para la configuración. Expone la función config, que devuelve un entero de 64 bits que combina un puntero a una cadena de configuración y su longitud. Esto resulta útil para pasar datos de configuración de Rust a otro entorno, como 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)
}
};
}La macro init resulta útil para gestionar el estado del juego. Define una struct y proporciona métodos para cargar y guardar su estado. Implementa los métodos load y save para la struct y usa Borsh para conservar el estado:
macro_rules! init {
(struct $StructName:ident { $($fields:tt)* } = $default:expr) => {
...
};
}La macro go se usa para definir la lógica principal de un juego. Envuelve un bloque de código en una función que puede llamarse desde un entorno externo, como WebAssembly. También define un punto de entrada para la lógica del juego y una función run_snapshot para ejecutar el juego con una instantánea de su estado:
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 también usa la macro strike del crate structstruck para mejorar las capacidades de definición de structs de Rust. Por lo general, las structs anidadas deben definirse por separado. La macro strike permite definir una struct y sus structs anidadas en línea. Esta función simplifica el código y hace que las estructuras de datos complejas sean más legibles y concisas. También aplica automáticamente la serialización Borsch a toda la estructura. Además, propaga la macro derive de la struct de nivel superior a todas las structs anidadas.
Por lo tanto, el flujo de trabajo completo de desarrollo para un proyecto de Turbo es el siguiente:
// 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();
...
}Compatibilidad con Solana
Turbo se diferencia de otros motores de desarrollo de juegos basados en Rust porque tendrá compatibilidad total con Solana. Por ejemplo, puede obtener datos de una cuenta desde un RPC y decodificarlos con solo dos líneas de código. También se suscribe automáticamente a las actualizaciones de cuentas mediante WebSockets, para que tus datos siempre estén actualizados:
// 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 es un versátil framework de código abierto para crear juegos on-chain. Permite que cualquiera cree y juegue juegos en Solana o la SVM. Ofrece un amplio conjunto de herramientas para desarrollar juegos completamente on-chain o integrar Solana en juegos existentes. Incluye las siguientes funciones:
- Solana Unity SDK
- Generador de IDL → C#
- WebSockets nativos
- SOAR (logros y clasificaciones on-chain de Solana)
- Integración con Solana Mobile Stack
Con todas estas funciones, Magicblock busca abstraer la complejidad para que los desarrolladores puedan concentrarse en crear la mejor experiencia de usuario posible. Magicblock Labs (es decir, Andrea y Peak) mantiene el framework, que cuenta con licencia MIT.
Solana Unity SDK
El Solana Unity SDK es un paquete de código abierto con herramientas que permiten a los desarrolladores integrar NFT, tokens y programas on-chain basados en Solana en sus juegos de Unity. El SDK aprovecha Solana Unity Core, un framework compatible con el estándar .NET 2.0 que integra Solana con el ecosistema .NET. Incluye muchas funciones, como cobertura completa de la API JSON RPC, descompilación de instrucciones, compatibilidad con Solana Mobile Stack y operaciones DEX nativas.
Puedes consultar aquí una lista de juegos de ejemplo creados en Unity con Solana Unity SDK.
Instalación, configuración y uso
Para crear con Unity, descarga Unity Hub aquí. Unity Hub administra varias instalaciones de Unity Editor, lo que te permite trabajar y crear proyectos nuevos en distintas versiones. Antes de continuar, verifica que tu sistema cumpla los siguientes requisitos:
- SO: Windows 7 SP1+, 8 y 10, solo versiones de 64 bits; Mac OS X 10.13+; Ubuntu 16.04 y 18.04; y CentOS 7
- GPU: una tarjeta gráfica compatible con DX10 (modelo de shader 4.0)
Con Unity instalado, ya podemos crear y abrir un proyecto nuevo.
Con tu nuevo proyecto abierto, abre la ventana Package Manager. Puedes acceder desde el menú superior de Unity mediante Window > Package Manager.
Con la ventana abierta, haz clic en el botón Agregar (+) de la barra de estado. Aparecerán las opciones para agregar paquetes. Luego, selecciona “Add package from git URL” en el menú.
Ingresa la URL de Git https://github.com/magicblock-labs/Solana.Unity-SDK.git en el cuadro de texto y haz clic en “Add”. Puedes instalar una versión específica del paquete ingresando https://github.com/magicblock-labs/Solana.Unity-SDK.git#X.Y.Z y reemplazando X.Y.Z por la versión deseada. Puedes encontrar todas las versiones disponibles aquí.
Con Solana Unity SDK instalado, importa Samples mediante el inspector de Package Manager. Esto incluye una escena de ejemplo que puedes usar como referencia o modificar para integrarla en tu proyecto de Unity. La escena se encuentra en la carpeta Scenes e incluye un ejemplo de autenticación con cartera e intercambio de tokens mediante Orca. La carpeta Scripts contiene distintos ejemplos de scripts, incluido el script para intercambios en Orca. Puedes adjuntar el script Web3.cs a cualquier objeto de tu proyecto. Este script es el punto de entrada principal de Solana Unity SDK. Es un singleton que administra la conexión con Solana y facilita el inicio de sesión con carteras, la firma de transacciones y mucho más. La carpeta Prefabs contiene plantillas que almacenan configuraciones de objetos. Puedes usarlas para crear instancias de un mismo activo y reutilizarlas en todo el proyecto.
El canal de YouTube de Magicblock contiene tutoriales sobre cómo conectar carteras de Solana con Unity, obtener la clave pública y el saldo de una cartera, realizar pruebas con carteras dentro del juego y crear un motor de ajedrez on-chain.
El repositorio de GitHub de Solana Unity SDK también contiene varios scripts de ejemplo, que abarcan desde la decodificación de instrucciones hasta la creación de transacciones.
Ejemplo de implementación de Jupiter
Además de Orca, Jupiter cuenta con compatibilidad nativa en Solana Unity SDK. El SDK ofrece métodos auxiliares para facilitar las cotizaciones de intercambios, así como crear y enviar transacciones de intercambio.
Para realizar un intercambio, primero debemos crear una instancia de IDexAggregator y proporcionar una cuenta predeterminada. Esta instancia se usará para interactuar con Jupiter:
IDexAggregator dex = new JupiterDexAg(Web3.Account);Luego, definimos los tokens que queremos intercambiar. En este ejemplo, cambiaremos SOL por BONK:
TokenData tokenA = await dex.GetTokenBySymbol("SOL");
TokenData tokenB = await dex.GetTokenBySymbol("BONK");A continuación, obtenemos una cotización para el intercambio. Así se vería la cotización para intercambiar 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);También podemos mostrar la ruta del intercambio para ofrecer mayor transparencia:
Debug.Log(string.Join(" -> ", swapQuote.RoutePlan.Select(p => p.SwapInfo.Label)));Ahora podemos generar la transacción de intercambio, firmarla con nuestra cartera y enviarla:
Transaction tx = await dex.Swap(swapQuote);
await Web3.Wallet.SignAndSendTransaction(tx);Portar un programa a Unity
Los desarrolladores pueden usar el paquete Solana Unity Anchor para integrar programas de Anchor en Unity. Este paquete contiene un convertidor de IDL a C#. El convertidor agiliza la conversión de IDL de Anchor (es decir, representaciones JSON de programas de Solana) en código C# para proyectos de Unity. El proceso de integración consta de dos pasos principales:
- Instalación: el comando
dotnet tool install -g Solana.Unity.Anchor.Toolse usa para instalar Solana Unity Anchor Tool. El indicador-ggarantiza que el paquete se instale globalmente, por lo que no necesitas instalar esta herramienta en cada proyecto nuevo - Generación de código: el comando
dotnet anchorgen -i idl/file.json -o src/ProgramCode.csse usa para generar la representación del programa en C#. Este comando convierte la IDL especificada en un archivo C# listo para usarse en Unity.
Con estos pasos, los desarrolladores pueden portar programas de Solana a su entorno de Unity de forma eficiente. Puedes encontrar aquí un video de Jonas Hahn que explica el proceso paso a paso.
SOAR
Solana On-Chain Achievement and Ranking (SOAR) es un programa diseñado para ofrecer una solución fluida para administrar tablas de clasificación, logros, perfiles de jugadores y la distribución automática de recompensas en Solana. Admite varias funciones, entre ellas:
- Creación de tablas de clasificación
- Administración de logros
- Compatibilidad con clientes TypeScript
- Interacción con el programa SOAR mediante llamadas de invocación entre programas (CPI)
La compatibilidad con Solana Unity SDK está en desarrollo y se espera que esté disponible pronto.
SOAR puede integrarse fácilmente en un proyecto con unas pocas líneas de código. Por ejemplo:
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]);El código anterior proviene directamente de la documentación de Magicblocks sobre SOAR. El fragmento comienza importando los módulos necesarios de @magicblock-labs/soar-sdk, incluidos SoarProgram, GameType y Genre.
La clase SoarProgram proporciona al cliente acceso a cada instrucción del programa SOAR on-chain. También incluye funciones para derivar PDA y obtener varias cuentas.
Luego, inicializa un proveedor de Anchor (anchor.AnchorProvider.env()) y lo establece como proveedor predeterminado para las operaciones posteriores (anchor.setProvider(provider)). A continuación, crea un cliente SoarProgram con el proveedor configurado previamente.
El fragmento comienza a inicializar un juego nuevo. Se genera un nuevo par de claves para el juego y se definen datos esenciales, como el título, la descripción, el género (p. ej., Genre.Action) y el tipo de juego (p. ej., GameType.Web). También se genera un par de claves de metadatos NFT para el juego. Luego, se prepara una lista de autorizaciones (_auths) para definir el control de acceso dentro del juego.
Se llama al método initializeNewGame en el cliente SOAR y se le pasan la clave pública, el título, la descripción, el género, el tipo de juego, los metadatos NFT y las autorizaciones. Este método devuelve un objeto newGame y prepara la transacción del nuevo juego para enviarla. La transacción se envía y confirma mediante el método sendAndConfirmTransaction disponible en el cliente SOAR. El par de claves del juego se usa como firmante de la transacción, lo que garantiza que el creador del juego la autorice.
Inicializar un cliente y configurar un nuevo juego on-chain con SOAR es fácil. Ahora podemos usar GameClient para registrar nuestro juego, crear una tabla de clasificación y acceder al estado del juego. Las posibilidades son infinitas.
La dirección del programa SOAR es SoarNNzwQHMwcfdkdLc6kvbkoMSxcHy89gTHrjhJYkk y puedes consultar su documentación de TypeScript aquí.
Solana Unreal SDK
Solana Unreal SDK es un plugin y kit de herramientas que permite a los desarrolladores crear juegos de blockchain en Solana con Unreal Engine 5. El kit incluye plantillas iniciales para juegos multijugador masivos en línea (MMO) integrados con Solana, incluida una plantilla para el servidor del juego. También ofrece funciones como:
- Todas las capacidades de Solnet en C++ y programación visual con Blueprint
- Un sistema de billeteras dentro del juego con protección y cifrado de datos
- Acuñación de NFT de Metaplex
- Procesamiento de pagos
El plugin aprovecha Solnet y la potencia del entorno de ejecución .NET para que los desarrolladores puedan comunicarse directamente con Solana sin crear desde cero una biblioteca completa en C++. LinkStream puede enviar mensajes de transacciones desde los juegos a billeteras, como Tranquility, mediante servidores TCP y protocolos de cliente. El equipo de Star Atlas creó inicialmente el SDK, y Bifrost bifurcó y actualizó el código recientemente. Para nuestros fines, usaremos como referencia la versión del equipo de Star Atlas en la siguiente sección sobre la instalación. El proceso es el mismo para Bifrost.
Instalación
Primero debemos instalar Epic Games Launcher para usar Unreal Engine. Después, debemos crear una cuenta de Epic Games e iniciar sesión. Una vez dentro, ve a la pestaña Unreal Engine y haz clic en el botón Instalar para descargar la versión más reciente. Puedes consultar una guía detallada de este proceso aquí. Ten en cuenta los requisitos del sistema recomendados para Unreal Engine 5:
- Windows 10 de 64 bits, Intel o AMD de cuatro núcleos, 2.5 GHz o superior, 8 GB de RAM
- macOS Big Sur, Intel de cuatro núcleos, 2.5 GHz o superior, 8 GB de RAM
- Linux Ubuntu 18.04, Intel o AMD de cuatro núcleos, 2.5 GHz o superior, 32 GB de RAM
Abre Epic Games Launcher e inicia la versión de Unreal que instalaste:
Crea un proyecto nuevo y selecciona C++ como plantilla del proyecto:
Ahora cierra el editor y abre la carpeta Project Location definida al crear el proyecto. Después, crea una carpeta Plugins nueva en el directorio raíz:
Copia el plugin en el directorio Plugins. Haz clic con el botón derecho en el archivo .uproject del directorio raíz y selecciona Generate Visual Studio project files. Haz doble clic en el archivo .sln y abre el proyecto con tu IDE de C++. Luego, abre el archivo ubicado en Source/<ProjectName>/<ProjectName>.build.cs. Agrega el nombre del plugin a PublicDependencyModuleNames. En nuestro caso, debemos introducir Foundation:
Agrega el nombre del plugin a nuestro archivo .uproject:
Cierra tu IDE y vuelve a generar los archivos del proyecto. Después, abre la solución del proyecto, es decir, el archivo .sln, para completar la instalación.
Uso
Todo el contenido relacionado con el plugin se encuentra en Plugins > Solana SDK dentro del explorador de contenido. Puedes encontrar un blueprint de LinkStream en Plugins > Solana SDK Content > Blueprints. Este blueprint permite a los desarrolladores comunicarse con Solnet. Puedes usar el mapa de sandbox de la carpeta Maps como referencia para configurar correctamente Solana SDK. En el GitHub de Solana Unreal SDK encontrarás un desglose del uso general, cómo personalizar tu wrapper de LinkStream y cómo interactuar con la API REST para autenticar el servidor. Puedes consultar un desglose más detallado sobre cómo interactuar con Solana mediante Unreal SDK aquí.
El enfoque de Unreal en las optimizaciones y los efectos de posprocesamiento 3D permite crear juegos fotorrealistas frente a otros editores como Unity. Un ejemplo popular de este hiperrealismo es Star Atlas. Star Atlas es un juego inmersivo de estrategia que te lleva a las profundidades del espacio. Está repleto de oportunidades, conquistas territoriales e intrigas políticas. Otros juegos, como Yaku Corp, aprovechan el fotorrealismo de Unreal Engine para crear MMORPG inmersivos.
Honeycomb
Honeycomb es un protocolo desarrollado por Tumi Labs que busca agilizar el desarrollo de juegos Web3. Honeycomb es un conjunto de programas on-chain y herramientas de compresión de estado que gestionan funciones cruciales del ciclo de vida de un juego. Todos los programas están diseñados para ser interoperables y modulares. También pueden personalizarse para satisfacer las necesidades específicas de cada desarrollador. Su kit de herramientas de desarrollo de infraestructura se centra en las siguientes funciones principales:
- Recompensas para jugadores inactivos (staking)
- Aventuras (misiones)
- Cajas de botín o premios RNG (sorteos)
- Gremios / Grupos
- Tokens de juego (con custodia y sin custodia)
- Activos digitales mutables
- Creación y administración de activos digitales
- Perfiles de jugadores
- Estructuras de comisiones
Sus herramientas se dividen en las siguientes categorías:
- Hive Control: el programa maestro que administra todos los permisos y las delegaciones de las autoridades de los programas en Honeycomb
- Asset Hub: un conjunto de herramientas para crear y administrar activos dentro del juego
- Nectar Utility: un conjunto de herramientas que permite a los NFT ofrecer funciones únicas dentro del juego, como recompensas de tokens por inactividad (staking), aventuras y cajas de botín
- Buzz Kit: un conjunto de herramientas que facilita los gremios dentro del juego. Tumi Labs también planea desarrollar programas de emparejamiento y administración del estado del juego dentro de este conjunto de herramientas
Instalación
Los desarrolladores pueden interactuar con Honeycomb mediante su SDK de JavaScript y @solana/web3.js:
# Using npm
npm install @solana/web3.js @honeycomb-protocol/hive-control
# Using yarn
yarn add @solana/web3.js @honeycomb-protocol/hive-controlEjemplo de uso
Una vez instalado, los desarrolladores pueden inicializar un objeto Honeycomb con un objeto Connection de Solana:
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")
);A partir de aquí, las opciones son infinitas. Por ejemplo, los desarrolladores pueden interactuar con IdentityClient para administrar las identidades y los perfiles de los usuarios. guestIdentity es la identidad predeterminada que se usa como marcador de posición hasta que se registra un par de claves o una billetera con la instancia de Honeycomb. Un par de claves puede vincularse como identidad con el siguiente comando: honeycomb.use(keypairIdentity(<keypair>);. Del mismo modo, un objeto de billetera (Solana Wallet Adapter) puede registrarse como identidad mediante la función walletIdentity disponible en la instancia de Honeycomb. Las identidades pueden usarse para fines de autenticación, como firmar mensajes o transacciones.
Otro ejemplo interesante es HttpClient. Este módulo facilita las solicitudes HTTP mediante Axios o Fetch y ofrece funciones relacionadas con HTTP. Permite personalizar los encabezados de las solicitudes y proporciona métodos para realizar solicitudes GET, POST, PUT y 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);
});Esto es especialmente interesante porque los desarrolladores pueden acceder a API de terceros, como la API Digital Asset Standard (DAS), para consultar otros activos digitales on-chain fuera del juego.
Estos fragmentos de código están adaptados de la documentación de Honeycomb Protocol. Puedes consultar la documentación del SDK aquí.
GameShift
GameShift es una plataforma que Solana Labs lanzó para que los desarrolladores de juegos integren fácilmente elementos Web3 mediante una sola API. Su objetivo es facilitar la creación de experiencias Web2 intuitivas y, al mismo tiempo, aprovechar las ventajas de los juegos en Solana. GameShift ofrece una experiencia de usuario fluida dentro del ecosistema Web3 al gestionar todas las comisiones de gas, las interacciones con la blockchain y las billeteras. La API de GameShift tiene cuatro áreas:
- Creación de activos: acuñación de activos de juegos con metadatos estructurados
- Comercio de activos: compra y venta de activos en USD en mercados de marca, cuyo lanzamiento se espera pronto
- Pagos: pagos con tarjeta de crédito e integraciones de procesamiento de pagos disponibles en más de 170 países, con protección total contra contracargos
- Autocustodia de activos en billeteras: permite a los jugadores conservar e intercambiar sus activos en billeteras sin custodia (es decir, sin contraseñas ni frases semilla)
Los desarrolladores pueden comenzar a usar GameShift creando una cuenta en la consola de GameShift, configurando una organización, agregando desarrolladores a ella, agregando un juego y administrando su clave de API para desarrolladores. El proceso completo se explica aquí.
Se necesita una cuenta de comerciante para realizar transacciones con dinero fiat. Puedes crear una cuenta en dos pasos:
- Conoce tu negocio (KYB): exige que los desarrolladores proporcionen información sobre su empresa para cumplir con las leyes de transmisión de dinero. Actualmente, GameShift solo admite liquidaciones fiat en cuentas bancarias domiciliadas en EE. UU.
- Configuración de una cuenta de liquidación fiat: cuando estén listos para habilitar pagos fiat en producción, los desarrolladores deben contactar a GameShift para recibir un enlace al formulario de incorporación de comerciantes. La información de KYB se proporciona mediante este formulario. La validación puede tardar unos minutos, aunque algunos casos pueden requerir una revisión manual
Toda la actividad de GameShift se organiza dentro de organizaciones:
Incorporación de usuarios
Una vez configurado todo, los desarrolladores pueden interactuar con la API REST. Pueden registrar usuarios para darles acceso a las funciones del mercado, los activos on-chain y los flujos de pago. Para hacerlo, se envía una solicitud HTTP POST a https://api.gameshift.dev/users con la clave de API, la dirección de correo electrónico del usuario y un referenceId (un valor único, como un UUID) en el cuerpo de la solicitud:
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"
}Una vez registrado el usuario, puedes obtener su información y sus activos en cualquier momento. Para ello, envía una solicitud HTTP GET a 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:Si la solicitud se completa correctamente, se devolverá una lista paginada de los activos del usuario:
{
"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
}
}Puedes consultar todos los fragmentos de código del proceso de incorporación aquí.
Creación de un activo
Por ejemplo, los desarrolladores pueden crear mediante programación activos de juegos on-chain enviando una solicitud HTTP POST a 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"
}
'Los activos requieren los siguientes datos:
- description - una cadena de 64 caracteres que proporciona información sobre el activo
- name - una cadena de 32 caracteres para identificar el activo
- imageUrl - un enlace directo a la imagen que representa el activo
- displayType - un título con formato opcional
- traitType - un nombre opcional para el rasgo
- value - un campo opcional que representa el valor del atributo
La solicitud HTTP POST también requiere el referenceId de un usuario, proporcionado mediante el campo destinationUserReferenceId. Puedes consultar un desglose más detallado sobre cómo trabajar con activos de juegos aquí.
Conclusión
La integración de la tecnología blockchain en los videojuegos, especialmente mediante Solana, representa un avance importante en la forma en que percibimos los mundos digitales e interactuamos con ellos. Herramientas como Anchor, Turbo, Magicblock y los SDK de Solana para Unity y Unreal permiten a los desarrolladores crear nuevas formas de jugar. Ahora es más fácil que nunca que los jugadores desarrollen economías virtuales e interactúen en matrices sociales sin precedentes, de forma totalmente transparente y accesible. Plataformas como Honeycomb y GameShift demuestran aún más el potencial de los juegos Web3 al agilizar el proceso de desarrollo y aumentar la participación de los jugadores.
Solana está a la vanguardia de esta revolución de los videojuegos. La comunidad de gaming de Solana crece de forma constante, con hackatones dedicados y nuevos juegos. Solana Labs y Solana Foundation lideran iniciativas y crean tutoriales, herramientas y plataformas para impulsar esta comunidad emergente. Las posibilidades de lo que pueden llegar a ser los videojuegos son infinitas cuando se desarrollan sobre la blockchain más rápida disponible.
Si llegaste hasta aquí, anon, ¡gracias! Ingresa tu dirección de correo electrónico a continuación para no perderte ninguna novedad de Solana. ¿Quieres profundizar más? Únete a nuestro Discord y comienza hoy mismo a construir el futuro de los videojuegos en la blockchain de mayor rendimiento.
Recursos adicionales / Lecturas complementarias
- Juego de lanzamiento de moneda con aleatoriedad VRF
- Aplicaciones y bibliotecas de Dart y Flutter para Solana
- Godot SDK
- Taller de desarrollo de juegos on-chain de Superteam Germany
- Plantilla inicial de Phaser 3 para TypeScript
- Repositorio de GitHub con ejemplos de juegos en Solana
- Solana Playground
- Publicación verificada de Solana Unity SDK en Unity Asset Store
Artículos relacionados
Suscríbete a Helius
Mantente al día con las novedades del desarrollo en Solana y recibe actualizaciones cuando publiquemos


