
Poseidon : créez des programmes Solana avec TypeScript
Poseidon est un nouveau framework de transpilation qui permet aux développeurs web de créer des programmes Solana on-chain (c’est-à-dire des smart contracts) uniquement avec TypeScript, un langage connu de millions de personnes dans le monde. Ce framework réduit considérablement les obstacles au développement on-chain et rend Solana accessible à un plus large public de développeurs. Poseidon traduit directement le code TypeScript en Anchor, le framework de développement de programmes Solana le plus répandu.
Cet article présente les origines de Poseidon, sa conception architecturale, ses principales fonctionnalités et son impact positif potentiel sur l’écosystème de développement Solana. Nous examinerons également un exemple pratique de programme simple de coffre-fort de tokens écrit avec Poseidon afin de mettre en évidence certaines des possibilités offertes par le framework.
Contexte
Vers la fin de l’année 2023, la Solana Foundation a proposé un défi ambitieux à l’équipe de Turbin3 : « Pouvez-vous créer un framework qui permette aux développeurs de concevoir des programmes Solana avec TypeScript ? » Naturellement, la première réponse a été : « Pourquoi ? »
TypeScript est un sur-ensemble de JavaScript à typage statique qui aide les développeurs à détecter les erreurs plus tôt et à écrire du code plus facile à maintenir. Devenus la norme de facto du développement web moderne, TypeScript et JavaScript ont fédéré l’une des plus grandes communautés de développeurs au monde. Permettre le développement de programmes en TypeScript offre une formidable occasion d’élargir le vivier de nouveaux développeurs Solana et de réduire les obstacles à la création d’applications sur la blockchain.
Maîtriser le développement de programmes Solana est difficile par rapport à de nombreuses autres blockchains. Les nouveaux développeurs doivent relever deux défis simultanément : comprendre le modèle de comptes de Solana et apprendre Rust, ce qui peut représenter une courbe d’apprentissage abrupte. Chez Turbin3, nous le savons mieux que quiconque : 15 % des nouveaux développeurs Solana passent par nos programmes.
Grâce à un framework TypeScript, les développeurs peuvent dissocier ces difficultés et exploiter un langage qu’ils connaissent déjà afin de déployer plus rapidement leurs premiers programmes sur le testnet. Pour la première fois, un framework TypeScript destiné au développement de programmes on-chain leur permet de créer facilement des applications Solana full-stack dans un seul langage.
La solution : Poseidon
Le projet a débuté sous la forme d’une simple bibliothèque de types et d’un concept de transpileur. Après les premiers prototypes et les retours approfondis d’experts de Solana et TypeScript, il est rapidement devenu beaucoup plus robuste. Après des mois de développement, de tests, de résolution de problèmes et de précieuses contributions d’experts du secteur, Poseidon a franchi une étape décisive plus tôt cette année lors de Breakpoint 2024, où nous avons présenté notre travail à un public de développeurs curieux.
Lors d’une présentation en direct, Shrinath, notre développeur principal de Poseidon, a montré comment écrire un programme Solana en TypeScript. Avec une seule commande de build, Poseidon a transpilé le code TypeScript en syntaxe Anchor complète, sous les yeux du public. L’enthousiasme a gagné la salle et une question s’est propagée à voix basse : « Cela pourrait-il vraiment fonctionner ? »
Depuis, le dépôt open source de Poseidon s’est rapidement développé grâce aux contributions de notre Poseidon Army grandissante sur X et Discord. Les membres de la communauté ont traité des problèmes, soumis des pull requests et collaboré à la création de nouveaux packages, contribuant ainsi chaque jour à la maturation de Poseidon. Parmi les améliorations figurent une CLI optimisée, la prise en charge des fonctions de programmes de tokens et des messages d’erreur plus clairs. Bien qu’il n’en soit encore qu’à ses débuts, le potentiel de Poseidon est indéniable.
Sur le plan technique, nous envisageons la trajectoire de développement de Poseidon en quatre étapes. Après nos premiers échanges, séances de réflexion et travaux de conception architecturale, nous avons dû prendre plusieurs décisions importantes. Notamment :
- Formuler des hypothèses sur les bibliothèques nécessaires
- Dériver les comptes dans le corps de l’instruction en chaînant les méthodes
- Utiliser des macros procédurales (un nouveau concept pour de nombreux développeurs)
Nous avons ensuite travaillé d’arrache-pied pendant la phase de développement et d’itération qui a précédé la présentation à Breakpoint. Ce dévoilement spectaculaire a ouvert la voie à la phase actuelle : nous avons confié le framework aux premiers utilisateurs afin qu’ils puissent l’explorer, faire des découvertes et l’améliorer.
À l’approche de la fin de l’année 2024, nous continuons à favoriser la croissance du framework en nous concentrant sur l’amélioration de ses fonctionnalités essentielles, la participation de la communauté pour étendre sa prise en charge et l’identification des fonctions SPL et bibliothèques Anchor nécessaires. Ces objectifs permettront aux développeurs principaux de se concentrer sur les améliorations fondamentales.
Pour 2025, nous accélérons le développement avec le lancement de notre première Turbin3 Poseidon Cohort à la fin du premier trimestre (annonce à venir). Cette initiative fera progresser le framework et se concentrera sur la création de packages publics, de tutoriels et d’autres ressources pédagogiques. L’objectif est clair : faire de Poseidon l’outil incontournable pour accélérer le développement de programmes Solana avec TypeScript.
Fonctionnalités principales
Poseidon propose plusieurs fonctionnalités remarquables :
- Développement simplifié : une interface basée sur TypeScript réduit la courbe d’apprentissage des développeurs web, leur permettant de se concentrer sur la logique applicative plutôt que de devoir se familiariser avec Rust
- Productivité accrue : Poseidon permet aux développeurs de travailler plus efficacement grâce à des outils et des workflows familiers, ce qui accélère le processus de développement
- Sécurité et performances renforcées : le framework garantit que le code Rust transpilé respecte les normes strictes de Solana en matière de sécurité et de performances, tout en préservant l’intégrité des programmes on-chain
- Intégration fluide : Poseidon s’intègre parfaitement à l’écosystème Solana, permettant aux développeurs d’exploiter les outils et bibliothèques existants
Architecture du système
L’architecture de Poseidon comprend plusieurs composants essentiels :
- Interface de programmation basée sur TypeScript : cette couche fournit aux développeurs une syntaxe et des outils familiers pour écrire des programmes Solana
- Moteur de transpilation : ce moteur convertit le code TypeScript en code Rust équivalent en exploitant la puissance du système de types et des fonctionnalités de TypeScript
- Génération de code Anchor : le code Rust transpilé est ensuite traité pour générer des programmes Anchor valides, qui peuvent être compilés et déployés sur le réseau Solana
- Gestion des comptes : Poseidon simplifie la gestion des comptes et de leurs données associées, ce qui facilite les interactions avec la blockchain Solana
Cas d’usage
Poseidon est conçu pour accélérer la compréhension du modèle de comptes de Solana par les développeurs et réduire considérablement le temps nécessaire aux nouveaux venus pour déployer leurs premiers programmes sur le testnet. En raison des exigences de sécurité strictes des applications blockchain, Poseidon ne convient pas actuellement à la création d’applications mainnet prêtes pour la production. Les futurs ingénieurs de protocoles Solana devront à terme apprendre Anchor et Rust afin de mieux comprendre l’architecture sous-jacente de Solana.
Le framework permet d’explorer et de tester un large éventail d’applications décentralisées, notamment :
- Finance décentralisée (DeFi) : développer des applications financières innovantes telles que des protocoles de prêt, des plateformes d’échange décentralisées et des plateformes de yield farming
- Tokens non fongibles (NFT) : créer et gérer des actifs numériques sur la blockchain Solana
- Jeux vidéo : développer des jeux et des mondes virtuels basés sur la blockchain
- Gestion de la chaîne d’approvisionnement : suivre et vérifier la provenance des produits et des matériaux
Nous nous sommes d’abord concentrés sur les programmes fondamentaux qui sous-tendent presque toutes les applications blockchain : Counter, Vault et Escrow. Ces composants essentiels constituent la base d’innombrables protocoles, ce qui en fait le point de départ idéal.
Exemple de programme Poseidon
Plongeons dans le code et examinons en détail un exemple de programme de coffre-fort créé en TypeScript avec Poseidon, en le décomposant en ses différentes parties. Le code complet de ce programme et d’autres exemples est disponible dans le dépôt GitHub de Poseidon.
Imports et déclaration du programme
Le programme est défini comme une classe TypeScript dotée d’un PROGRAM_ID statique qui spécifie l’ID du programme. Le package @solanaturbine/poseidon fournit les types nécessaires à la définition des instructions, notamment les types Rust (u8, u64, i8, i128, boolean, string), les types SPL (Pubkey, AssociatedTokenAccount, Mint, TokenAccount, TokenProgram) et les types de comptes Anchor (Signer, UncheckedAccount, SystemAccount).
import { Account, Pubkey, Result, Signer, SystemAccount, SystemProgram, UncheckedAccount, u64, u8 } from "@solanaturbine/poseidon";
export default class VaultProgram {
static PROGRAM_ID = new Pubkey("11111111111111111111111111111111");Instructions
Avec Poseidon, nous définissons généralement les instructions au moyen de méthodes au sein de la classe du programme. Le contexte de chaque instruction est implicite dans les paramètres de la méthode. Pour définir un compte comme une adresse dérivée du programme (PDA) avec @solanaturbine/poseidon, nous utilisons la méthode derive afin de spécifier la seed comme premier paramètre d’un tableau.
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]
)
}
}État du compte
Les comptes d’état personnalisés sont définis sous la forme d’une interface qui étend Account. Les champs du compte d’état personnalisé peuvent être définis à l’aide des types du package @solanaturbine/Poseidon.
export interface Vault extends Account {
owner: Pubkey
stateBump: u8
authBump: u8
vaultBump: u8
}L’impact de Poseidon
Poseidon pourrait transformer le paysage du développement blockchain de plusieurs façons :
- Élargissement de la communauté de développeurs Solana : attirer davantage de développeurs dans l’écosystème Solana
- Accélération du développement : réduire le temps et les efforts nécessaires au développement de projets Solana
- Amélioration de l’expérience développeur : offrir une expérience de développement plus intuitive et efficace
Orientations futures
À l’avenir, Poseidon vise à renforcer encore ses capacités grâce aux mesures suivantes :
- Extension de la prise en charge des langages : prendre en charge d’autres langages comme JavaScript et Python
- Amélioration des performances : optimiser le processus de transpilation et le code Rust généré
- Renforcement de la sécurité : tester rigoureusement le framework et le code généré afin d’identifier les vulnérabilités
Conclusion
Poseidon constitue une avancée majeure pour rendre le développement de programmes Solana accessible à un public plus large. En comblant le fossé entre le développement web et la programmation blockchain, il permet aux développeurs de créer des applications innovantes et à fort impact sur la blockchain Solana. À mesure que l’univers de la blockchain évolue, Poseidon pourrait devenir un outil essentiel pour les nouveaux développeurs Solana.
Ressources supplémentaires
- Présentation de Kite : le framework TypeScript moderne pour Solana
- Programmes éducatifs de Turbin3
- Dépôt GitHub de Poseidon
- Exemples de programmes Poseidon
- Package NPM @solanaturbine/poseidon
Articles associés
Abonnez-vous à Helius
Suivez les dernières actualités du développement sur Solana et recevez une notification à chaque publication


