Kite 是一个现代的 TypeScript 框架,专为 Solana 开发设计,简化了常见的开发任务。它基于 Solana web3.js 版本 2,提供了钱包管理、SOL 操作、代币管理、交易处理等功能,并支持浏览器和 Node.js 环境。
今天,我们很高兴地宣布 Kite,这是一个现代的 TypeScript 框架,适用于浏览器和 Node.js。Kite 基于 Solana web3.js 版本 2 的强大功能,同时 显著简化常见任务。
Kite 利用 Solana web3.js 版本 2 的速度和优雅,使你能够 在单个函数中完成日常 Solana 任务。
由于 Kite 使用 web3.js 版本 2 进行重型操作,因此 web3.js 版本 2 的所有功能均可用。如果你不再需要 Kite,可以轻松移除并使用普通的 web3.js 版本 2。
Kite 是 @solana-developers/helpers 的 web3.js v2 更新,这是 web3.js 版本 1 的最受欢迎的高级库,由原始作者创建。
Kite 包包括大多数原始助手的更新版本,包括来自 Helius、Solana 基金会、Anza、Turbin3、Unboxed Software 和 StarAtlas 的贡献。
我们尚未在 Kite 中拥有的 @solana-developers/helpers 函数将很快添加。
Kite 可以在浏览器和 node.js 中使用,并具有 最小的依赖关系。
Kite 包括用于执行以下操作的函数:
这是一个创建代币的快速示例。
请记住,Kite 只是一个基于 web3.js v2 的框架,因此它使用相同的类型和底层 web3.js v2 特性来完成其工作。
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: "一个示例代币",
website: "https://example.com",
},
);
console.log(connection.getExplorerLink(mintAddress));
...没有 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.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", "仅可在 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: "仅可在 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("交易签名:", `https://explorer.solana.com/tx/${transactionSignature}?cluster=custom`);
如你所见,若没有 Kite,这将涉及创建一个带有五个指令及相关选项的交易消息,签名交易消息,并将其发送到 RPC。在 Kite 中,你可以运行 makeTokenMint 并获得新铸币的地址。
Kite 是一个纯客户端库,适用于浏览器和 node.js。如果你对 使用 TypeScript 构建链上应用程序(例如智能合约) 感兴趣,请查看 Poseidon。
尽管 Kite 尚处于新阶段,但我们致力于将其发展成为一个强大的框架,使 Solana 开发更加易于访问。
我们可以通过简化常见任务和减少模板代码,帮助更多的开发人员在 Solana 上构建出卓越的东西。
以下是你可以提供帮助的方法:
准备好让你的 Solana 开发更轻松了吗?
开始使用 Kite:
npm i @helius-dev/kite
查看我们的 GitHub 存储库 以获取完整的文档和示例。
让我们一起加速 Solana 开发! 🪁
- 原文链接: helius.dev/blog/kite-sol...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,在这里修改,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!