NOUVEAU : Helius acquiert Light Protocol
Un cerf-volant flottant au-dessus du texte « Introducing Kite », un framework Solana moderne pour TypeScript.
Blog/Développement

Présentation de Kite : le framework TypeScript moderne pour Solana

Formation des développeursMike MacCana sur XMike MacCana sur LinkedIn
4 min de lecture
Sommaire

    Aujourd’hui, nous sommes ravis d’annoncer Kite, le framework TypeScript moderne pour le navigateur et Node.js. Kite s’appuie sur la puissance de Solana web3.js version 2 tout en simplifiant considérablement les tâches courantes.

    Pourquoi Kite ?

    Kite exploite la rapidité et l’élégance de Solana web3.js version 2, tout en vous permettant d’effectuer les tâches Solana quotidiennes avec une seule fonction.

    Comme Kite s’appuie sur web3.js version 2 pour les opérations complexes, toutes les fonctionnalités de web3.js version 2 restent disponibles. Si vous n’avez plus besoin de Kite, vous pouvez facilement le supprimer et utiliser directement web3.js version 2.

    Kite est une mise à jour pour web3.js v2 de @solana-developers/helpers, la bibliothèque de haut niveau la plus populaire pour web3.js version 1, réalisée par son auteur d’origine.

    Le package Kite comprend des versions actualisées de la plupart des utilitaires d’origine, notamment des contributions de Helius, de la Solana Foundation, d’Anza, de Turbin3, d’Unboxed Software et de StarAtlas.

    Les fonctions de @solana-developers/helpers qui ne sont pas encore disponibles dans Kite seront bientôt ajoutées.

    Kite fonctionne à la fois dans le navigateur et dans node.js, avec des dépendances minimales.

    Que puis-je faire avec Kite ?

    Kite inclut des fonctions permettant d’effectuer les opérations suivantes :

    Portefeuilles

    SOL

    Tokens

    Transactions

    Explorer

    • Obtenir un lien Solana Explorer — une seule étape avec toutes les informations nécessaires pour afficher la transaction, le bloc ou l’adresse à l’aide de votre RPC.

    Comparaison entre Kite et Solana web3.js 2 :

    Voici un exemple rapide de création d’un token

    Avec Kite

    N’oubliez pas que Kite est simplement un framework reposant sur web3.js v2. Il utilise donc les mêmes types et les mêmes fonctionnalités sous-jacentes de web3.js v2.

    Making a token (including metadata) using Kite
    import { connect } from "@helius-dev/kite";
    const connection = connect();
    const mintAddress = await connection.makeTokenMint(
      mintAuthority,
      6,
      "My Token",
      "MTKN",
      "https://example.com/metadata.json",
      {
        description: "A sample token",
        website: "https://example.com",
      },
    );
    console.log(connection.getExplorerLink(mintAddress));

    Avec Solana web3.js v2

    ...sans Kite !

    Making a token using web3.js version 2
    import {
      airdropFactory,
      appendTransactionMessageInstructions,
      createSolanaRpc,
      createSolanaRpcSubscriptions,
      createTransactionMessage,
      generateKeyPairSigner,
      getSignatureFromTransaction,
      lamports,
      pipe,
      sendAndConfirmTransactionFactory,
      setTransactionMessageFeePayerSigner,
      setTransactionMessageLifetimeUsingBlockhash,
      signTransactionMessageWithSigners,
      some,
    } from "@solana/web3.js";
    import { getCreateAccountInstruction } from "@solana-program/system";
    import {
      getInitializeMintInstruction,
      getMintSize,
      TOKEN_2022_PROGRAM_ADDRESS,
      extension,
      getInitializeMetadataPointerInstruction,
      getInitializeTokenMetadataInstruction,
      tokenMetadataField,
      getUpdateTokenMetadataFieldInstruction,
    } from "@solana-program/token-2022";
    
    const rpc = createSolanaRpc("http://127.0.0.1:8899");
    const rpcSubscriptions = createSolanaRpcSubscriptions("ws://127.0.0.1:8900");
    
    const feePayer = await generateKeyPairSigner();
    console.log(feePayer.address);
    const mint = await generateKeyPairSigner();
    
    await airdropFactory({ rpc, rpcSubscriptions })({
      recipientAddress: feePayer.address,
      lamports: lamports(1_000_000_000n),
      commitment: "confirmed",
    });
    
    const balance = await rpc.getBalance(feePayer.address).send();
    console.log("balance:", balance.value);
    
    const metadataPointerExtension = extension("MetadataPointer", {
      authority: some(feePayer.address),
      metadataAddress: some(mint.address),
    });
    
    const tokenMetadataExtension = extension("TokenMetadata", {
      updateAuthority: some(feePayer.address),
      mint: mint.address,
      name: "OPOS",
      symbol: "OPOS",
      uri: "https://raw.githubusercontent.com/solana-developers/opos-asset/main/assets/DeveloperPortal/metadata.json",
      additionalMetadata: new Map<string, string>([["description", "Only Possible On Solana"]]),
    });
    
    const spaceWithoutMetadata = BigInt(getMintSize([metadataPointerExtension]));
    
    const spaceWithMetadata = BigInt(getMintSize([metadataPointerExtension, tokenMetadataExtension]));
    
    const rent = await rpc.getMinimumBalanceForRentExemption(spaceWithMetadata).send();
    
    const createAccountInstruction = getCreateAccountInstruction({
      payer: feePayer,
      newAccount: mint,
      lamports: rent,
      space: spaceWithoutMetadata,
      programAddress: TOKEN_2022_PROGRAM_ADDRESS,
    });
    
    const initializeMetadataPointerInstruction = getInitializeMetadataPointerInstruction({
      mint: mint.address,
      authority: feePayer.address,
      metadataAddress: mint.address,
    });
    
    const initializeMintInstruction = getInitializeMintInstruction({
      mint: mint.address,
      decimals: 2,
      mintAuthority: feePayer.address,
    });
    
    const initializeTokenMetadataInstruction = getInitializeTokenMetadataInstruction({
      metadata: mint.address,
      updateAuthority: feePayer.address,
      mint: mint.address,
      mintAuthority: feePayer,
      name: tokenMetadataExtension.name,
      symbol: tokenMetadataExtension.symbol,
      uri: tokenMetadataExtension.uri,
    });
    
    const updateTokenMetadataInstruction = getUpdateTokenMetadataFieldInstruction({
      metadata: mint.address,
      updateAuthority: feePayer,
      field: tokenMetadataField("Key", ["description"]),
      value: "Only Possible On Solana",
    });
    
    const instructions = [
      createAccountInstruction,
      initializeMetadataPointerInstruction,
      initializeMintInstruction,
      initializeTokenMetadataInstruction,
      updateTokenMetadataInstruction,
    ];
    
    const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();
    
    const transactionMessage = pipe(
      createTransactionMessage({ version: 0 }),
      (message) => setTransactionMessageFeePayerSigner(feePayer, message),
      (message) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, message),
      (message) => appendTransactionMessageInstructions(instructions, message),
    );
    
    const signedTransaction = await signTransactionMessageWithSigners(transactionMessage);
    
    const transactionSignature = getSignatureFromTransaction(signedTransaction);
    
    await sendAndConfirmTransactionFactory({ rpc, rpcSubscriptions })(signedTransaction, {
      commitment: "confirmed",
      skipPreflight: true,
    });
    
    console.log("Transaction Signature:", `https://explorer.solana.com/tx/${transactionSignature}?cluster=custom`);
    

    Comme vous pouvez le constater, sans Kite, il faudrait créer un message de transaction avec cinq instructions et les options correspondantes, signer le message de transaction, puis l’envoyer au RPC. Avec Kite, vous exécutez makeTokenMint et récupérez l’adresse du nouveau mint.

    Comparaison entre Kite et Poseidon

    Kite est une bibliothèque entièrement côté client destinée aux navigateurs et à node.js. Découvrez Poseidon si vous souhaitez créer des applications on-chain (par exemple, des smart contracts) avec TypeScript. 

    Contribuer

    Bien que Kite soit encore récent, nous nous engageons à en faire un framework robuste qui rend le développement sur Solana plus accessible à tous.

    En simplifiant les tâches courantes et en réduisant le code répétitif, nous pouvons aider davantage de développeurs à créer des projets exceptionnels sur Solana.

    Voici comment vous pouvez nous aider :

    Essayez Kite dès aujourd’hui

    Prêt à simplifier votre développement sur Solana ?

    Commencez avec Kite :

    Installing Kite
    npm i @helius-dev/kite

    Consultez notre dépôt GitHub pour accéder à la documentation complète et aux exemples.

    Accélérons ensemble le développement sur Solana ! 🪁

    Abonnez-vous à Helius

    Suivez les dernières actualités du développement sur Solana et recevez une notification à chaque publication