NOVO: Helius adquire a Light Protocol
Crie programas Solana com TypeScript e Poseidon
Blog/Desenvolvimento

Poseidon: crie programas Solana com TypeScript

O motor de talentos da Solana.Team Turbin3 no XTeam Turbin3 no LinkedIn
8 min de leitura

Poseidon é um novo framework transpilador que permite aos desenvolvedores web criar programas on-chain da Solana (ou seja, contratos inteligentes) usando apenas TypeScript, uma linguagem conhecida por milhões de pessoas no mundo todo. O framework reduz significativamente a barreira de entrada para o desenvolvimento on-chain, tornando a Solana mais acessível a um público maior de desenvolvedores. Poseidon traduz o código TypeScript diretamente para Anchor, o framework de programas mais adotado da Solana.

Este artigo aborda as origens, o design arquitetônico, os principais recursos e o possível impacto positivo do Poseidon no cenário de desenvolvimento da Solana. Além disso, apresentaremos um exemplo prático de um programa simples de cofre de tokens escrito com Poseidon, destacando alguns dos recursos do framework.

Contexto

No fim de 2023, a equipe da Turbin3 recebeu um desafio ambicioso da Solana Foundation: “É possível criar um framework que permita aos desenvolvedores desenvolver programas Solana usando TypeScript?” Naturalmente, a primeira resposta foi perguntar: “Por quê?”

TypeScript é um superconjunto de JavaScript com tipagem estática que ajuda os desenvolvedores a detectar erros mais cedo e escrever código mais fácil de manter. Como padrão de fato do desenvolvimento web moderno, TypeScript e JavaScript formaram uma das maiores comunidades de desenvolvedores do mundo. Introduzir o desenvolvimento de programas em TypeScript representa uma oportunidade significativa de ampliar o número de novos desenvolvedores da Solana e reduzir as barreiras de entrada para criar na blockchain.

Dominar o desenvolvimento de programas Solana é desafiador em comparação com muitas outras blockchains. Novos desenvolvedores precisam enfrentar simultaneamente dois obstáculos: entender o modelo de contas da Solana e aprender Rust, o que pode resultar em uma curva de aprendizado acentuada. Nós, da Turbin3, sabemos disso melhor do que ninguém: 15% de todos os novos desenvolvedores da Solana passam por nossos programas.

Com um framework TypeScript, os desenvolvedores podem separar esses desafios e aproveitar uma linguagem que já conhecem para implantar seus primeiros programas na rede de testes mais rapidamente. Pela primeira vez, um framework baseado em TypeScript para o desenvolvimento de programas on-chain permite criar aplicações Solana full-stack completas em uma única linguagem e sem atrito.

A solução: Poseidon

O projeto começou como uma biblioteca básica de tipos e um conceito de transpilador, mas rapidamente se tornou algo muito mais robusto após os protótipos iniciais e o feedback detalhado de especialistas em Solana e TypeScript. Depois de meses desenvolvendo, testando, solucionando problemas e recebendo contribuições valiosas de especialistas do setor, Poseidon atingiu um marco importante no início deste ano, durante a Breakpoint 2024, onde apresentamos nosso trabalho a um público de desenvolvedores curiosos. 

Em uma apresentação ao vivo, Shrinath, nosso principal desenvolvedor do Poseidon, demonstrou como escrever um programa Solana em TypeScript. Com um único comando de compilação, Poseidon transpila o código TypeScript para a sintaxe completa do Anchor diante dos olhos do público. A sala vibrou de entusiasmo, e começaram os comentários: “Será que isso realmente funciona?”

Desde então, o repositório open source do Poseidon cresceu rapidamente, impulsionado pelas contribuições do nosso crescente Poseidon Army no X e no Discord. Membros da comunidade resolveram problemas, enviaram pull requests e colaboraram na criação de novos pacotes, ajudando Poseidon a amadurecer a cada dia. As melhorias incluem uma CLI aprimorada, suporte adicional a funções de programas de tokens e mensagens de erro mais claras. Embora ainda esteja em seus estágios iniciais, o potencial do Poseidon é inegável.

Do ponto de vista técnico, dividimos a trajetória de desenvolvimento do Poseidon em quatro etapas. Após nossas conversas iniciais, sessões de brainstorming e projetos arquitetônicos, tivemos que tomar algumas decisões importantes. As principais foram: 

  • Definir premissas sobre as bibliotecas necessárias
  • Derivar contas no corpo da instrução por meio do encadeamento de métodos
  • Macros procedurais (um conceito novo para muitos desenvolvedores)

Depois, nos dedicamos intensamente à fase de desenvolvimento e iteração que antecedeu a apresentação na Breakpoint.  Aquele momento de revelação, com grande entusiasmo, abriu as portas para a fase atual: colocamos o framework nas mãos dos primeiros usuários para que experimentem, façam descobertas e o aprimorem.

No encerramento de 2024, continuamos promovendo o crescimento do framework, com foco em melhorias nas funcionalidades principais, participação da comunidade para ampliar o suporte e identificação das funções SPL e do suporte às bibliotecas Anchor necessários. Esses objetivos permitirão que os principais desenvolvedores se concentrem nas melhorias essenciais.

Para 2025, estamos acelerando o desenvolvimento com o lançamento da nossa primeira Turbin3 Poseidon Cohort no fim do primeiro trimestre (anúncio em breve). Essa iniciativa impulsionará o framework e se concentrará na criação de pacotes públicos, tutoriais e outros recursos educacionais. O objetivo é claro: transformar Poseidon na ferramenta definitiva para acelerar o desenvolvimento de programas Solana com TypeScript.

Principais recursos

Poseidon oferece vários recursos de destaque:

  • Desenvolvimento simplificado: uma interface baseada em TypeScript reduz a curva de aprendizado para desenvolvedores web, permitindo que se concentrem na lógica da aplicação em vez de lidar com Rust
  • Maior produtividade: Poseidon permite que os desenvolvedores trabalhem com mais eficiência usando ferramentas e fluxos de trabalho conhecidos, o que acelera o processo de desenvolvimento
  • Segurança e desempenho aprimorados: o framework garante que o código Rust transpilado esteja alinhado aos rigorosos padrões de segurança e desempenho da Solana, preservando a integridade dos programas on-chain
  • Integração perfeita: Poseidon se integra perfeitamente ao ecossistema da Solana, permitindo que os desenvolvedores aproveitem ferramentas e bibliotecas existentes

Arquitetura do sistema

A arquitetura do Poseidon inclui vários componentes essenciais:

  • Interface de programação baseada em TypeScript: essa camada oferece sintaxe e ferramentas conhecidas para que os desenvolvedores escrevam programas Solana
  • Mecanismo de transpilação: esse mecanismo converte código TypeScript em código Rust equivalente, aproveitando o sistema de tipos e os recursos da linguagem TypeScript
  • Geração de código Anchor: o código Rust transpilado passa por processamento adicional para gerar programas Anchor válidos, que podem ser compilados e implantados na rede Solana
  • Gerenciamento de contas: Poseidon oferece uma forma simplificada de gerenciar contas e seus dados associados, facilitando a interação com a blockchain Solana

Casos de uso

Poseidon foi criado para acelerar a compreensão do modelo de contas da Solana pelos desenvolvedores, reduzindo significativamente o tempo necessário para que novos desenvolvedores implantem seus primeiros programas na rede de testes. Devido aos rigorosos requisitos de segurança das aplicações blockchain, atualmente Poseidon não é adequado para criar aplicações de mainnet prontas para produção. Quem pretende se tornar engenheiro de protocolos Solana precisará, no fim das contas, aprender Anchor e Rust para compreender melhor a arquitetura subjacente da Solana.

O framework pode ser usado para explorar e testar uma ampla variedade de aplicações descentralizadas, incluindo:

  • Finanças descentralizadas (DeFi): desenvolva aplicações financeiras inovadoras, como protocolos de empréstimo, exchanges descentralizadas e plataformas de yield farming
  • Tokens não fungíveis (NFTs): crie e gerencie ativos digitais na blockchain Solana
  • Jogos: desenvolva jogos e mundos virtuais baseados em blockchain
  • Gerenciamento da cadeia de suprimentos: acompanhe e verifique a procedência de produtos e materiais

Primeiro, nos concentramos em programas fundamentais que sustentam quase todas as aplicações blockchain: Counter, Vault e Escrow. Esses componentes essenciais são a base de inúmeros protocolos, o que os torna o ponto de partida perfeito.

Exemplo de programa Poseidon

Vamos explorar o código e analisar em detalhes um exemplo de programa de cofre criado em TypeScript com Poseidon, dividindo o programa em suas partes constituintes. O código completo desse programa e de outros exemplos está disponível no repositório do Poseidon no GitHub.

Importações e declaração do programa

O programa é definido como uma classe TypeScript com um PROGRAM_ID estático que especifica o ID do programa. O pacote @solanaturbine/poseidon fornece os tipos necessários para definir instruções, como tipos Rust (u8, u64, i8, i128, boolean, string), tipos SPL (Pubkey, AssociatedTokenAccount, Mint, TokenAccount, TokenProgram) e tipos de conta 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");

Instruções

Normalmente, definimos métodos dentro da classe do programa para criar instruções com Poseidon. O contexto de cada instrução está implícito nos parâmetros do método. Para definir uma conta como um endereço derivado de programa (PDA) com @solanaturbine/poseidon, usamos o método derive para especificar a seed como o primeiro parâmetro dentro de um array.

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 da conta

Contas de estado personalizadas são definidas como uma interface que estende Account. Os campos da conta de estado personalizada podem ser definidos usando tipos do pacote @solanaturbine/Poseidon.

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

O impacto do Poseidon

Poseidon tem o potencial de impactar o cenário do desenvolvimento blockchain ao:

  • Expandir a comunidade de desenvolvedores da Solana: atrair um grupo maior de desenvolvedores para o ecossistema da Solana
  • Acelerar o desenvolvimento: reduzir o tempo e o esforço necessários para desenvolver projetos na Solana
  • Melhorar a experiência do desenvolvedor: oferecer uma experiência de desenvolvimento mais intuitiva e eficiente

Próximos passos

No futuro, Poseidon pretende ampliar ainda mais seus recursos ao:

  • Expandir o suporte a linguagens: oferecer suporte a outras linguagens, como JavaScript e Python
  • Melhorar o desempenho: otimizar o processo de transpilação e o código Rust gerado
  • Aprimorar a segurança: testar rigorosamente o framework e o código gerado em busca de vulnerabilidades

Conclusão

Poseidon representa um grande avanço para tornar o desenvolvimento de programas Solana acessível a um público mais amplo. Ao conectar o desenvolvimento web à programação blockchain, ele permite que os desenvolvedores criem aplicações inovadoras e de alto impacto na blockchain Solana. À medida que o ecossistema blockchain evolui, Poseidon tem o potencial de se tornar uma ferramenta essencial para novos desenvolvedores da Solana.

Recursos adicionais

‍

Assine a Helius

Acompanhe as novidades mais recentes do desenvolvimento Solana e receba atualizações quando publicarmos

Imagem ampliada