
Comment créer des applications Solana avec Gill
Sommaire
- Qu’est-ce que Gill ?
- Installer Gill
- Gill ou @solana/kit
- Exemples de code avec Gill et Kit
- En quoi consiste la migration de Kit vers Gill ?
- Quels composants Gill inclut-il ?
- Fonctions utilitaires Node.js
- Générateurs de transactions
- Mode débogage
- Outils complémentaires pour développer avec Gill
- @gillsdk/react
- Codama
- L’avenir de Gill
- Comment contribuer à Gill
- Ressources supplémentaires
Gill est la toute dernière bibliothèque d’outils de développement Solana basée sur JavaScript/TypeScript. Initialement développée par Nick Frostbutter, cofondateur de Decal, lorsqu’il travaillait au sein de l’équipe des relations développeurs de la Solana Foundation, gill vise à améliorer considérablement l’expérience des développeurs d’applications JavaScript.
Gill comprend à la fois des abstractions légèrement orientées pour accélérer la productivité des développeurs et des primitives de plus bas niveau, ce qui leur permet de choisir librement leur approche.
Les abstractions légères réduisent une grande partie de la complexité et du code répétitif nécessaires aux interactions courantes avec Solana. Les primitives de plus bas niveau offrent quant à elles des « portes de sortie » lorsque les développeurs ont besoin, ou envie, de contrôler plus finement la logique de leur application.
Cet article présente les bases de la « bibliothèque gill », son contenu, la prise en main de gill et les différences avec @solana/kit (anciennement « web3.js v2 »).
Qu’est-ce que Gill ?
Gill est une bibliothèque TypeScript moderne permettant de développer des applications Solana dans tout environnement basé sur JavaScript, du navigateur au serveur en passant par les appareils mobiles.
La bibliothèque gill s’adresse aux développeurs Solana de tous niveaux, des débutants aux experts. Comme elle réunit dans un même package des abstractions de haut niveau et des primitives de bas niveau, les développeurs peuvent facilement utiliser les fonctionnalités avancées lorsque cela s’avère nécessaire ou lorsque les abstractions ne les prennent pas en charge.
Le meilleur dans tout ça ?
Gill est entièrement compatible avec le tree-shaking. Votre bundler supprimera donc automatiquement toutes les primitives ou abstractions qui ne sont pas utilisées dans votre codebase.
L’objectif principal de Gill est d’améliorer l’expérience développeur en simplifiant les tâches courantes de développement sur Solana et en éliminant le code répétitif, sans empêcher les développeurs de travailler à plus bas niveau s’ils le souhaitent ou en ont besoin. Ils ne devraient pas être limités aux abstractions de haut niveau ou aux primitives de bas niveau. Ils devraient pouvoir choisir facilement l’une ou l’autre selon leurs besoins.
Installer Gill
Gill peut être installé dans n’importe quel projet basé sur JavaScript ou TypeScript, notamment NodeJS/Bun, un navigateur, React Native ou presque tout autre environnement JavaScript.
npm install gillLa bibliothèque gill offre une prise en charge robuste de TypeScript et devrait fonctionner immédiatement dans la plupart des applications. La configuration propre à votre projet peut toutefois nécessiter quelques ajustements pour mieux fonctionner avec gill. Consultez la documentation pour en savoir plus sur la prise en charge de TypeScript dans gill.
Gill ou @solana/kit
La bibliothèque gill repose directement sur @solana/kit, les nouvelles primitives JavaScript de bas niveau développées par Anza pour remplacer l’ancien @solana/web3.js avec de meilleures performances.
Comme Kit ne fournit que ces primitives de bas niveau, les développeurs doivent tout créer manuellement. Leurs applications deviennent alors volumineuses et remplies de code répétitif et verbeux.
C’est là que gill intervient.
Gill fournit à la fois les mêmes primitives de bas niveau que Kit et des abstractions légèrement orientées qui simplifient les tâches courantes, le tout au moyen d’une interface unique et compatible. En simplifiant l’ensemble du processus avec gill, les développeurs peuvent consacrer plus de temps à la logique métier de leur application et moins au code répétitif et verbeux.
@solana/kit était auparavant connu sous le nom de « web3.js v2 », car il avait initialement été publié dans la série de versions 2.x de @solana/web3.js. Les ingénieurs d’Anza ont constaté que cela compliquait et rendait confus le processus de migration vers les nouvelles technologies. Ils ont donc décidé de le publier sous le nouveau nom de package @solana/kit.
Exemples de code avec Gill et Kit
Les extraits de code suivants montrent comment simplifier votre code tout en conservant les mêmes fonctionnalités, voire en en ajoutant. Presque toutes les applications doivent effectuer deux tâches : établir une connexion à la blockchain et créer des transactions.
Voici comment créer une connexion à la blockchain avec @solana/kit :
import {
devnet,
createSolanaRpc,
createSolanaRpcSubscriptions,
sendAndConfirmTransactionFactory,
} from "@solana/kit";
const rpc = createSolanaRpc(devnet("https://api.devnet.solana.com"));
const rpcSubscriptions = createSolanaRpcSubscriptions(
devnet("wss://api.devnet.solana.com"),
);
const sendAndConfirmTransaction = sendAndConfirmTransactionFactory({
rpc,
rpcSubscriptions,
});La même logique peut être appliquée et simplifiée avec la fonction createSolanaClient de gill :
import { createSolanaClient } from "gill";
const { rpc, rpcSubscriptions, sendAndConfirmTransaction } = createSolanaClient({
urlOrMoniker: "devnet",
});Vous pouvez maintenant effectuer de simples requêtes RPC à l’aide de l’objet rpc créé avec l’une ou l’autre des bibliothèques dans les exemples ci-dessus :
// get the latest blockhash from your RPC provider
const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();Voici comment créer dans @solana/kit une transaction simple comprenant une instruction memo et des optimisations de base, à l’aide d’instructions de budget de calcul :
import {
pipe,
createTransactionMessage,
setTransactionMessageFeePayerSigner,
appendTransactionMessageInstructions,
setTransactionMessageLifetimeUsingBlockhash,
} from "@solana/kit";
import { getAddMemoInstruction } from "@solana-program/memo";
import {
getSetComputeUnitLimitInstruction,
getSetComputeUnitPriceInstruction,
} from "@solana-program/compute-budget";
const transaction = pipe(
createTransactionMessage({ version: "legacy" }),
(tx) => setTransactionMessageFeePayerSigner(signer, tx),
(tx) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),
(tx) =>
appendTransactionMessageInstructions(
[
getAddMemoInstruction({
memo: "gm world!",
}),
getSetComputeUnitLimitInstruction({ units: 5000 }),
getSetComputeUnitPriceInstruction({ microLamports: 1000 }),
],
tx,
),
);L’exemple basé sur Kit ci-dessus nécessite l’installation manuelle de deux packages supplémentaires : @solana-program/compute-budget et @solana-program/memo.
La même logique peut être considérablement simplifiée avec gill comme suit :
import { createTransaction } from "gill";
import { getAddMemoInstruction } from "gill/programs";
const transaction = createTransaction({
version: "legacy",
feePayer: signer,
instructions: [
getAddMemoInstruction({
memo: "gm world!",
}),
],
latestBlockhash,
computeUnitLimit: 5000,
computeUnitPrice: 1000,
});Pour une comparaison plus complète entre ces deux bibliothèques, consultez la documentation de gill sur gill et @solana/kit.
En quoi consiste la migration de Kit vers Gill ?
Pour toute application utilisant la bibliothèque @solana/kit, la migration vers le package gill est très simple :
- Installez
gill - Remplacez tous les imports de
@solana/kitpargill - Désinstallez
@solana/kit
Comme gill intègre aussi directement les clients les plus courants de la Solana Program Library (SPL), vous pouvez également remplacer les imports de ces packages par gill. Gill inclut les clients SPL suivants, directement accessibles depuis le chemin d’import gill/programs :
@solana-program/system@solana-program/memo@solana-program/compute-budget@solana-program/address-lookup-table@solana-program/token-2022(voir la remarque ci-dessous concernant les clients de programmes de tokens)
Pour utiliser le seul package gill avec ces clients de programmes SPL :
- Remplacez les imports des packages
@solana-program/*répertoriés ci-dessus pargill/programs - Désinstallez les packages
@solana-program/*répertoriés ci-dessus.
Bien que le client @solana-program/token (Legacy Token Program) ne soit pas inclus, le client @solana-program/token-2022 (Token Extension Program, également appelé Token22) l’est et offre une rétrocompatibilité totale avec le client Legacy Token Program. Pour utiliser les instructions Legacy Token et d’autres fonctionnalités, vous devez explicitement utiliser TOKEN_PROGRAM_ADDRESS comme ID de programme pour les instructions et les adresses dérivées du programme.
Une fois vos imports mis à jour, votre application est immédiatement prête à utiliser la bibliothèque « gill core ». Vous pouvez désormais remplacer très facilement le code répétitif et verbeux de Kit, notamment pour créer des connexions à la blockchain et des transactions, par les abstractions gill disponibles.
Quels composants Gill inclut-il ?
La bibliothèque gill se compose de quelques éléments clés :
- Fonctionnalités de base (aussi appelées « gill core »)
- Utilitaires propres aux environnements d’exécution serveur (comme NodeJS et Bun)
- Clients de programmes
- Générateurs de transactions
- Mode débogage
Fonctions utilitaires Node.js
Le package gill comprend plusieurs utilitaires propres aux environnements d’exécution de serveurs JavaScript. Bien qu’ils soient inclus dans le package gill, ils disposent d’un chemin d’import distinct afin d’améliorer le tree-shaking. Ces utilitaires permettent notamment de charger et d’enregistrer facilement des paires de clés dans des fichiers ou des variables ENV.
import { ... } from "gill/node"Pour charger facilement un fichier de paire de clés depuis votre système de fichiers local, comme la paire de clés de Solana CLI :
import { loadKeypairSignerFromFile } from "gill/node";
// default file path: ~/.config/solana/id.json
const signer = await loadKeypairSignerFromFile();
console.log("address:", signer.address);Vous pouvez également charger une paire de clés encodée en base58 depuis une variable ENV :
import { loadKeypairSignerFromEnvironmentBase58 } from "gill/node";
// loads signer from base58 keypair stored at `process.env[variableName]`
const signer = await loadKeypairSignerFromEnvironmentBase58(variableName);
console.log("address:", signer.address);Générateurs de transactions
Pour simplifier la création de transactions courantes qui interagissent souvent avec plusieurs programmes à la fois, gill inclut différents « générateurs de transactions » permettant d’assembler facilement des transactions prêtes à signer pour ces tâches.
Comme chaque générateur de transactions est limité à une seule tâche, il peut facilement masquer diverses parties du code répétitif tout en contribuant à créer une transaction optimisée.
Voici quelques-uns des générateurs de transactions proposés par gill :
buildCreateTokenTransaction- créer un token avec des métadonnéesbuildMintTokensTransaction- créer des tokens dans un portefeuille de destinationbuildTransferTokensTransaction- transférer des tokens vers un portefeuille de destination
Chaque générateur de transactions est accompagné d’un « générateur d’instructions » qui rend ces abstractions gill plus flexibles pour les développeurs.
Mode débogage
Dans gill, vous pouvez activer le « mode débogage » afin de journaliser automatiquement des informations supplémentaires qui vous aideront à résoudre les problèmes liés à vos transactions.
Le mode débogage est désactivé par défaut afin de limiter les journaux supplémentaires générés par votre application. Grâce à son contrôleur flexible, vous pouvez l’activer depuis les environnements les plus courants dans lesquels votre code s’exécute, notamment le code lui-même, les backends NodeJS, les fonctions serverless et même la console du navigateur web.
Pour activer le mode débogage, définissez l’une des options suivantes sur true ou 1 :
process.env.GILL_DEBUGglobal.__GILL_DEBUG__window.__GILL_DEBUG__(par exemple, dans la console de votre navigateur web)- ou définissez manuellement n’importe quel niveau de journalisation du débogage (voir la documentation)
Consultez la documentation de gill sur le mode débogage pour en savoir plus.
Outils complémentaires pour développer avec Gill
@gillsdk/react
La bibliothèque gill contient directement un autre package, @gillsdk/react, qui regroupe des hooks React conçus pour améliorer radicalement l’expérience des développeurs d’applications frontend basées sur React. Il repose également sur TanStack Query, une bibliothèque de réactivité populaire, ce qui facilite son utilisation dans les applications existantes.
Le package @gillsdk/react en est encore à ses débuts et fait l’objet d’un développement actif. Il fournit actuellement plusieurs hooks React utiles pour les applications Solana :
useAccount- obtenir les informations du compte pour une adresseuseBalance- obtenir le solde du compte (en lamports)useLatestBlockhash- obtenir le dernier blockhashuseSignatureStatuses- obtenir les statuts des signaturesuseProgramAccounts- obtenir les comptes du programme (GPA)useTokenMint- obtenir le compte Mint décodé d’un tokenuseTokenAccount- obtenir le compte de token pour un Mint et un propriétaire donnés (ou ATA)
Codama
Codama est un outil qui permet aux développeurs de partir de l’IDL d’un programme Solana et de générer des bibliothèques clientes, par exemple en JavaScript ou en Rust, destinées à d’autres applications. Codama ramène toute la complexité de la création d’instructions Solana à un IDL, un fichier de configuration et l’import d’une fonction.
Gill et Codama s’intègrent facilement grâce à la fonction createCodamaConfig de gill. Le mainteneur de gill travaille aussi activement à renforcer encore davantage l’intégration gill<>Codama, notamment avec une prise en charge directe dans Codama CLI !
Par défaut, les clients TypeScript de programmes générés par Codama utilisent @solana/kit, mais cela peut être facilement modifié dans le fichier de configuration Codama de votre programme Solana. La fonction createCodamaConfig simplifie considérablement la migration vers gill dans votre configuration Codama.
Voici un exemple de fichier codama.js qui générera un client TypeScript de programme Solana utilisant gill :
import { createCodamaConfig } from "gill";
export default createCodamaConfig({
idl: "program/idl.json",
clientJs: "clients/js/src/generated",
});Vous trouverez dans la documentation de gill un guide complet pour générer des clients de programmes Solana avec Codama.
L’avenir de Gill
L’avenir de la bibliothèque gill est prometteur et il reste beaucoup à faire. Le site officiel de la documentation de gill vient d’être lancé et la bibliothèque approche les 20 000 téléchargements mensuels.
Pour en savoir plus sur la feuille de route actuelle de gill, consultez la page GitHub Projects. Pour le moment, la liste restreinte comprend :
- Prise en charge directe de la spécification Solana Pay
- Intégration native de la spécification de l’API Digital Assets Standard (DAS)
- Meilleure prise en charge des tokens basés sur Token Extension
- Meilleure prise en charge des Address Lookup Tables
- Documentation plus complète
Inclus dans la bibliothèque gill, le package @gillsdk/react en est encore à ses débuts, avec neuf hooks React différents. Son développement se poursuit afin de permettre aux développeurs d’ajouter facilement de la réactivité à leurs applications basées sur React, notamment grâce à la prise en charge de toutes les méthodes RPC Solana courantes et à une intégration plus étroite avec wallet-ui.
Le saviez-vous ? Il est prévu d’intégrer directement gill au framework Anchor afin que les développeurs puissent profiter plus facilement des optimisations de gill et de ses améliorations de l’expérience développeur dans leurs applications. Qui sait, gill deviendra peut-être la solution par défaut dans Anchor v2. :shhh:
Comment contribuer à Gill
La bibliothèque gill est open source sous licence MIT, et les contributions sont les bienvenues ! Si vous souhaitez contribuer à la bibliothèque, consultez les issues ouvertes et envisagez d’en traiter une vous-même.
Si vous souhaitez proposer une nouvelle fonctionnalité ou une amélioration de la bibliothèque, commencez par ouvrir une issue afin d’en discuter avec les mainteneurs avant de travailler sur le code d’une PR.
Ressources supplémentaires
Vous trouverez davantage d’informations et de ressources sur gill aux liens suivants :
Articles associés
Abonnez-vous à Helius
Suivez les dernières actualités du développement sur Solana et recevez une notification à chaque publication


