
Giới thiệu Kite: framework TypeScript hiện đại cho Solana
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
- Airdrop SOL nếu số dư thấp — cách thuận tiện để nhận SOL khi cần mà không tạo yêu cầu không cần thiết tới các faucet devnet/testnet.
- Lấy số dư SOL của một tài khoản - lấy số dư SOL.
- Chuyển SOL giữa các ví.
Token
- Tạo token mới — kèm Token Metadata.
- Lấy địa chỉ tài khoản token — để tìm địa chỉ của ví cho một token cụ thể.
- Lấy thông tin mint của token — để xem chi tiết về một mint.
- Mint token vào một tài khoản — để Mint Authority sử dụng một token mint và tạo token mới trong tài khoản của người khác.
- Chuyển token giữa các tài khoản — xác định các tài khoản token cần thiết cho bên gửi và bên nhận, tạo tài khoản token của bên nhận nếu cần rồi chuyển token giữa các tài khoản!
Giao dịch
- Ký, gửi và xác nhận một giao dịch — chỉ trong một bước. Nhận các instruction của giao dịch, tạo giao dịch, lấy blockhash gần đây, ký message bên trong giao dịch rồi gửi đi.
- Gửi và xác nhận một giao dịch — nếu bạn đã tạo giao dịch
- Kiểm tra xem giao dịch đã được xác nhận chưa.
- Lấy log giao dịch — lấy log của một 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.
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!
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:
- Báo cáo sự cố
- Đọc hướng dẫn đóng góp của chúng tôi và gửi pull request
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:
npm i @helius-dev/kiteXem 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! 🪁
Bài viết liên quan
Đă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


