MỚI: Helius mua lại Light Protocol
Một cánh diều bay phía trên dòng chữ 'Giới thiệu Kite', một framework Solana hiện đại cho TypeScript.
Blog/Phát triển

Giới thiệu Kite: framework TypeScript hiện đại cho Solana

Đào tạo nhà phát triểnMike MacCana trên XMike MacCana trên LinkedIn
Đọc trong 4 phút
Mục lục

    Hôm nay, chúng tôi rất vui được giới thiệu Kite, framework TypeScript hiện đại dành cho cả trình duyệt và Node.js. Kite phát huy sức mạnh của Solana web3.js phiên bản 2, đồng thời đơn giản hóa đáng kể các tác vụ phổ biến.

    Tại sao nên chọn Kite?

    Kite tận dụng tốc độ và sự tinh gọn của Solana web3.js phiên bản 2, đồng thời cho phép bạn thực hiện các tác vụ Solana hằng ngày chỉ bằng một hàm.

    Vì Kite sử dụng web3.js phiên bản 2 để xử lý các tác vụ phức tạp, bạn vẫn có thể dùng toàn bộ tính năng của web3.js phiên bản 2. Nếu không còn cần Kite, bạn có thể dễ dàng gỡ bỏ và sử dụng trực tiếp web3.js phiên bản 2.

    Kite là bản cập nhật web3.js v2 của @solana-developers/helpers, thư viện cấp cao phổ biến nhất dành cho web3.js phiên bản 1, do chính tác giả ban đầu phát triển.

    Gói Kite bao gồm phiên bản cập nhật của hầu hết helper ban đầu, với sự đóng góp từ Helius, Solana Foundation, Anza, Turbin3, Unboxed Software và StarAtlas.

    Các hàm @solana-developers/helpers chưa có trong Kite sẽ sớm được bổ sung.

    Kite hoạt động trên cả trình duyệt và node.js, đồng thời có rất ít dependency.

    Bạn có thể làm gì với Kite?

    Kite cung cấp các hàm để thực hiện những tác vụ sau:

    Ví

    • Tạo ví mới — với địa chỉ tùy chỉnh, số dư SOL sẵn sàng sử dụng và/hoặc được lưu vào tệp.
    • Tải ví từ tệp — sử dụng định dạng id.json tiêu chuẩn của Anza.
    • Tải ví từ biến môi trường — sử dụng định dạng 'mảng số' thông thường mà hầu hết công cụ Solana sử dụng.

    SOL

    Token

    Giao dịch

    Explorer

    • Lấy liên kết Solana Explorer — thực hiện trong một bước với đầy đủ thông tin để hiển thị giao dịch, block hoặc địa chỉ bằng RPC của bạn.

    So sánh Kite với Solana web3.js 2:

    Dưới đây là ví dụ nhanh về cách tạo token

    Sử dụng Kite

    Hãy nhớ rằng Kite chỉ là một framework xây dựng trên web3.js v2, vì vậy nó sử dụng cùng các type và tính năng nền tảng của web3.js v2 để hoạt động.

    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));

    Sử dụng Solana web3.js v2

    ...không dùng 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`);
    

    Như bạn có thể thấy, nếu không có Kite, quy trình này sẽ bao gồm việc tạo transaction message với năm instruction và các tùy chọn liên quan, ký transaction message rồi gửi đến RPC. Trong Kite, bạn chỉ cần chạy makeTokenMint và nhận lại địa chỉ của mint mới.

    So sánh Kite với Poseidon

    Kite là thư viện hoàn toàn chạy phía client dành cho trình duyệt và node.js. Hãy khám phá Poseidon nếu bạn quan tâm đến việc xây dựng ứng dụng on-chain (ví dụ: smart contract) bằng TypeScript. 

    Đóng góp

    Dù Kite còn mới, chúng tôi cam kết phát triển nó thành một framework mạnh mẽ, giúp mọi người dễ dàng tiếp cận hơn với việc phát triển trên Solana.

    Bằng cách đơn giản hóa các tác vụ phổ biến và giảm mã soạn sẵn, chúng ta có thể giúp nhiều nhà phát triển hơn xây dựng những sản phẩm tuyệt vời trên Solana.

    Bạn có thể hỗ trợ như sau:

    Dùng thử Kite ngay hôm nay

    Bạn đã sẵn sàng đơn giản hóa việc phát triển trên Solana chưa?

    Bắt đầu với Kite:

    Installing Kite
    npm i @helius-dev/kite

    Xem repository GitHub của chúng tôi để đọc toàn bộ tài liệu và xem các ví dụ.

    Hãy cùng tăng tốc phát triển Solana! 🪁

    Đăng ký nhận tin từ Helius

    Luôn cập nhật những thông tin mới nhất về phát triển Solana và nhận thông báo khi chúng tôi đăng bài