NUEVO: Helius adquiere Light Protocol
Crea programas de Solana con TypeScript y Poseidon
Blog/Desarrollo

Poseidon: crea programas de Solana con TypeScript

El motor de talento de Solana.Team Turbin3 en XTeam Turbin3 en LinkedIn
8 min de lectura

Poseidon es un nuevo framework de transpilación que permite a los desarrolladores web crear programas on-chain de Solana (es decir, contratos inteligentes) usando únicamente TypeScript, un lenguaje conocido por millones de personas en todo el mundo. El framework reduce significativamente la barrera de entrada al desarrollo on-chain, lo que hace que Solana sea más accesible para un público más amplio de desarrolladores. Poseidon traduce el código TypeScript directamente a Anchor, el framework para programas de Solana con mayor adopción.

Este artículo profundiza en los orígenes, el diseño arquitectónico, las funciones clave y el posible impacto positivo de Poseidon en el entorno de desarrollo de Solana. Además, veremos un ejemplo práctico de un programa sencillo de bóveda de tokens escrito con Poseidon para destacar algunas de las capacidades del framework.

Antecedentes

A finales de 2023, Solana Foundation planteó al equipo de Turbin3 un desafío ambicioso: “¿Pueden crear un framework que permita a los desarrolladores crear programas de Solana con TypeScript?”. Naturalmente, la primera respuesta fue preguntar: “¿Por qué?”.

TypeScript es un superconjunto de JavaScript con tipado estático que ayuda a los desarrolladores a detectar errores antes y escribir código más fácil de mantener. Como estándar de facto para el desarrollo web moderno, TypeScript y JavaScript han dado lugar a una de las comunidades de desarrolladores más grandes del mundo. Introducir el desarrollo de programas en TypeScript ofrece una gran oportunidad para ampliar la comunidad de nuevos desarrolladores de Solana y reducir las barreras de entrada al desarrollo en la blockchain.

Dominar el desarrollo de programas de Solana es difícil en comparación con muchas otras blockchains. Los nuevos desarrolladores deben afrontar al mismo tiempo dos desafíos: comprender el modelo de cuentas de Solana y aprender Rust, lo que puede implicar una curva de aprendizaje pronunciada. En Turbin3 lo sabemos mejor que nadie: el 15% de todos los nuevos desarrolladores de Solana pasan por nuestros programas.

Al introducir un framework de TypeScript, los desarrolladores pueden separar estos desafíos y aprovechar un lenguaje que ya conocen para implementar más rápido sus primeros programas en la testnet. Por primera vez, un framework basado en TypeScript para desarrollar programas on-chain permite crear aplicaciones full stack de Solana sin cambiar de lenguaje.

La solución: Poseidon

El proyecto comenzó como una biblioteca básica de tipos y un concepto de transpilador, pero evolucionó rápidamente hasta convertirse en algo mucho más sólido tras los primeros prototipos y los comentarios detallados de expertos en Solana y TypeScript. Después de meses de desarrollo, pruebas, resolución de problemas y valiosos aportes de expertos del sector, Poseidon alcanzó un hito crucial a principios de este año en Breakpoint 2024, donde presentamos nuestro trabajo ante un público de desarrolladores curiosos. 

En una presentación en vivo, Shrinath, nuestro desarrollador principal de Poseidon, mostró cómo escribir un programa de Solana en TypeScript. Con un solo comando de compilación, Poseidon transpila el código TypeScript a la sintaxis completa de Anchor ante los ojos del público. La sala se llenó de entusiasmo y comenzó a escucharse una pregunta: “¿De verdad podría funcionar?”.

Desde entonces, el repositorio de código abierto de Poseidon ha crecido rápidamente gracias a las contribuciones de nuestro creciente Poseidon Army en X y Discord. Los miembros de la comunidad han resuelto problemas, enviado pull requests y colaborado en la creación de nuevos paquetes, lo que ayuda a Poseidon a madurar cada día. Las mejoras incluyen una CLI optimizada, compatibilidad con funciones de programas de tokens y mensajes de error más claros. Aunque Poseidon todavía se encuentra en sus primeras etapas, su potencial es innegable.

Desde el punto de vista técnico, dividimos la trayectoria de desarrollo de Poseidon en cuatro etapas. Tras nuestras conversaciones iniciales, sesiones de lluvia de ideas y diseños arquitectónicos, tuvimos que tomar algunas decisiones clave. En particular: 

  • Definir supuestos sobre las bibliotecas necesarias
  • Derivar cuentas en el cuerpo de la instrucción mediante el encadenamiento de métodos
  • Usar macros procedimentales (un concepto nuevo para muchos desarrolladores)

Luego nos concentramos plenamente en la etapa de desarrollo e iteración previa a la presentación en Breakpoint.  Ese gran momento de revelación abrió las puertas a la etapa actual: pusimos el framework en manos de los primeros usuarios para que pudieran experimentar, descubrir y mejorarlo.

Al cerrar 2024, seguimos impulsando el crecimiento del framework. Nos enfocamos en mejorar las funciones principales, involucrar a la comunidad para ampliar la compatibilidad e identificar las funciones SPL y la compatibilidad con bibliotecas de Anchor que hacen falta. Estos objetivos permitirán que los desarrolladores principales se concentren en las mejoras fundamentales.

De cara a 2025, aceleraremos el desarrollo con el lanzamiento de nuestro primer Turbin3 Poseidon Cohort hacia finales del primer trimestre (anuncio próximamente). Esta iniciativa permitirá avanzar el framework y se centrará en crear paquetes públicos, tutoriales y otros recursos educativos. El objetivo es claro: convertir a Poseidon en la herramienta definitiva para acelerar el desarrollo de programas de Solana con TypeScript.

Funciones clave

Poseidon ofrece varias funciones destacadas:

  • Desarrollo simplificado: una interfaz basada en TypeScript reduce la curva de aprendizaje de los desarrolladores web y les permite concentrarse en la lógica de la aplicación en lugar de lidiar con Rust
  • Mayor productividad: Poseidon permite trabajar con más eficiencia mediante herramientas y flujos de trabajo conocidos, lo que acelera el proceso de desarrollo
  • Seguridad y rendimiento mejorados: el framework garantiza que el código Rust transpilado cumpla los estrictos estándares de seguridad y rendimiento de Solana, preservando la integridad de los programas on-chain
  • Integración fluida: Poseidon se integra perfectamente con el ecosistema de Solana y permite a los desarrolladores aprovechar las herramientas y bibliotecas existentes

Arquitectura del sistema

La arquitectura de Poseidon consta de varios componentes clave:

  • Interfaz de programación basada en TypeScript: esta capa ofrece una sintaxis y herramientas conocidas para que los desarrolladores escriban programas de Solana
  • Motor de transpilación: este motor convierte el código TypeScript en código Rust equivalente y aprovecha el sistema de tipos y las funciones del lenguaje TypeScript
  • Generación de código Anchor: el código Rust transpilado se procesa para generar programas de Anchor válidos que puedan compilarse e implementarse en la red de Solana
  • Administración de cuentas: Poseidon ofrece una forma optimizada de administrar cuentas y sus datos asociados, lo que facilita la interacción con la blockchain de Solana

Casos de uso

Poseidon está diseñado para acelerar la comprensión del modelo de cuentas de Solana y reducir significativamente el tiempo que necesitan los nuevos desarrolladores para implementar sus primeros programas en la testnet. Debido a los estrictos requisitos de seguridad de las aplicaciones blockchain, Poseidon aún no es adecuado para crear aplicaciones de mainnet listas para producción. Quienes aspiren a convertirse en ingenieros de protocolos de Solana deberán aprender Anchor y Rust para comprender mejor la arquitectura subyacente de Solana.

El framework puede usarse para explorar y experimentar con una amplia variedad de aplicaciones descentralizadas, como:

  • Finanzas descentralizadas (DeFi): desarrolla aplicaciones financieras innovadoras, como protocolos de préstamos, exchanges descentralizados y plataformas de yield farming
  • Tokens no fungibles (NFT): crea y administra activos digitales en la blockchain de Solana
  • Videojuegos: desarrolla juegos y mundos virtuales basados en blockchain
  • Gestión de la cadena de suministro: rastrea y verifica la procedencia de productos y materiales

Primero nos enfocamos en programas fundamentales que sustentan casi todas las aplicaciones blockchain: Counter, Vault y Escrow. Estos componentes esenciales sirven como base para innumerables protocolos, por lo que son el punto de partida perfecto.

Programa de ejemplo con Poseidon

Veamos el código y analicemos en detalle un programa de bóveda de ejemplo creado en TypeScript con Poseidon, desglosándolo en sus distintas partes. Puedes encontrar el código completo de este y otros programas en el repositorio de Poseidon en GitHub.

Importaciones y declaración del programa

El programa se define como una clase de TypeScript con un PROGRAM_ID estático que especifica el ID del programa. El paquete @solanaturbine/poseidon proporciona los tipos necesarios para definir instrucciones, como tipos de Rust (u8, u64, i8, i128, boolean, string), tipos SPL (Pubkey, AssociatedTokenAccount, Mint, TokenAccount, TokenProgram) y tipos de cuentas de Anchor (Signer, UncheckedAccount, SystemAccount).

Código
import { Account, Pubkey, Result, Signer, SystemAccount, SystemProgram, UncheckedAccount, u64, u8 } from "@solanaturbine/poseidon";

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

Instrucciones

Por lo general, definimos métodos dentro de la clase del programa para definir instrucciones con Poseidon. El contexto de cada instrucción está implícito en los parámetros del método. Para definir una cuenta como una dirección derivada de programa (PDA) con @solanaturbine/poseidon, usamos el método derive para especificar la semilla como primer parámetro dentro de un arreglo.

Código
    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]
        )
    }
}

Estado de la cuenta

Las cuentas de estado personalizadas se definen como una interfaz que extiende Account. Los campos de la cuenta de estado personalizada pueden definirse con tipos del paquete @solanaturbine/Poseidon.

Código
export interface Vault extends Account {
    owner: Pubkey
    stateBump: u8
    authBump: u8
    vaultBump: u8
}

El impacto de Poseidon

Poseidon tiene el potencial de transformar el panorama del desarrollo blockchain al:

  • Ampliar la comunidad de desarrolladores de Solana: atraer a más desarrolladores al ecosistema de Solana
  • Acelerar el desarrollo: reducir el tiempo y el esfuerzo necesarios para desarrollar proyectos de Solana
  • Mejorar la experiencia de desarrollo: ofrecer una experiencia de desarrollo más intuitiva y eficiente

Próximos pasos

En el futuro, Poseidon busca ampliar aún más sus capacidades mediante las siguientes iniciativas:

  • Ampliar la compatibilidad con lenguajes: admitir lenguajes adicionales como JavaScript y Python
  • Mejorar el rendimiento: optimizar el proceso de transpilación y el código Rust generado
  • Reforzar la seguridad: someter el framework y el código generado a pruebas rigurosas para detectar vulnerabilidades

Conclusión

Poseidon representa un gran avance para hacer que el desarrollo de programas de Solana sea accesible a un público más amplio. Al cerrar la brecha entre el desarrollo web y la programación blockchain, permite a los desarrolladores crear aplicaciones innovadoras y de gran impacto en la blockchain de Solana. A medida que evoluciona el sector blockchain, Poseidon tiene el potencial de convertirse en una herramienta esencial para los nuevos desarrolladores de Solana.

Recursos adicionales

‍

Suscríbete a Helius

Mantente al día con las novedades del desarrollo en Solana y recibe actualizaciones cuando publiquemos

Imagen ampliada