NEU: Helius übernimmt Light Protocol
Ein Drachen schwebt über dem Text „Introducing Kite“, einem modernen Solana-Framework für TypeScript.
Blog/Entwicklung

Wir stellen Kite vor: das moderne Solana-TypeScript-Framework

Developer EducationMike MacCana auf XMike MacCana auf LinkedIn
4 Min. Lesezeit
Inhaltsverzeichnis

    Heute freuen wir uns, Kite vorzustellen: das moderne TypeScript-Framework für Browser und Node.js. Kite baut auf der Leistungsfähigkeit von Solana web3.js Version 2 auf und vereinfacht gängige Aufgaben erheblich.

    Warum Kite?

    Kite nutzt die Geschwindigkeit und Eleganz von Solana web3.js Version 2, ermöglicht dir aber, alltägliche Solana-Aufgaben mit einer einzigen Funktion zu erledigen.

    Da Kite web3.js Version 2 für die aufwendige Arbeit nutzt, stehen dir alle Funktionen von web3.js Version 2 zur Verfügung. Wenn du Kite nicht mehr brauchst, kannst du es einfach entfernen und direkt web3.js Version 2 verwenden.

    Kite ist die web3.js-v2-Weiterentwicklung von @solana-developers/helpers, der beliebtesten High-Level-Bibliothek für web3.js Version 1, und stammt vom ursprünglichen Autor.

    Das Kite-Paket enthält aktualisierte Versionen der meisten ursprünglichen Hilfsfunktionen, darunter Beiträge von Helius, der Solana Foundation, Anza, Turbin3, Unboxed Software und StarAtlas.

    Die Funktionen von @solana-developers/helpers, die Kite noch nicht enthält, werden bald ergänzt.

    Kite funktioniert sowohl im Browser als auch in Node.js und hat minimale Abhängigkeiten.

    Was kann ich mit Kite tun?

    Kite enthält Funktionen für folgende Aufgaben:

    Wallets

    SOL

    Token

    Transaktionen

    Explorer

    Kite und Solana web3.js 2 im Vergleich:

    Hier ist ein kurzes Beispiel für die Erstellung eines Tokens

    Mit Kite

    Denk daran: Kite ist nur ein Framework auf Basis von web3.js v2. Daher verwendet es dieselben Typen und zugrunde liegenden Funktionen von 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));

    Mit Solana web3.js v2

    ...ohne 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`);
    

    Wie du siehst, müsstest du ohne Kite eine Transaktionsnachricht mit fünf Anweisungen und den entsprechenden Optionen erstellen, die Transaktionsnachricht signieren und sie an das RPC senden. Mit Kite führst du makeTokenMint aus und erhältst die Adresse des neuen Mints zurück.

    Kite und Poseidon im Vergleich

    Kite ist eine reine Client-Bibliothek für Browser und Node.js. Sieh dir Poseidon an, wenn du On-Chain-Apps (z. B. Smart Contracts) mit TypeScript entwickeln möchtest. 

    Mitwirken

    Kite ist noch neu. Wir wollen es jedoch zu einem robusten Framework ausbauen, das die Solana-Entwicklung für alle zugänglicher macht.

    Indem wir gängige Aufgaben vereinfachen und Boilerplate-Code reduzieren, können wir mehr Entwicklern helfen, großartige Dinge auf Solana zu entwickeln.

    So kannst du helfen:

    Probiere Kite noch heute aus

    Bist du bereit, deine Solana-Entwicklung einfacher zu machen?

    Leg mit Kite los:

    Installing Kite
    npm i @helius-dev/kite

    In unserem GitHub-Repository findest du die vollständige Dokumentation und Beispiele.

    Beschleunigen wir gemeinsam die Solana-Entwicklung! 🪁

    Helius abonnieren

    Bleib bei der Solana-Entwicklung auf dem Laufenden und erhalte Updates, wenn wir neue Beiträge veröffentlichen