【引介】 Kite:一个现代化的Solana TypeScript框架

  • Helius
  • 发布于 5天前
  • 阅读 93

Kite 是一个现代的 TypeScript 框架,专为 Solana 开发设计,简化了常见的开发任务。它基于 Solana web3.js 版本 2,提供了钱包管理、SOL 操作、代币管理、交易处理等功能,并支持浏览器和 Node.js 环境。

Kite

今天,我们很高兴地宣布 Kite,这是一个现代的 TypeScript 框架,适用于浏览器和 Node.js。Kite 基于 Solana web3.js 版本 2 的强大功能,同时 显著简化常见任务

为什么选择 Kite?

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 包括用于执行以下操作的函数:

钱包

SOL

代币

交易

浏览器

将 Kite 与 Solana web3.js 2 进行比较

这是一个创建代币的快速示例。

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

使用 Solana web3.js v2

...没有 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 与 Poseidon 进行比较

Kite 是一个纯客户端库,适用于浏览器和 node.js。如果你对 使用 TypeScript 构建链上应用程序(例如智能合约) 感兴趣,请查看 Poseidon。

贡献

尽管 Kite 尚处于新阶段,但我们致力于将其发展成为一个强大的框架,使 Solana 开发更加易于访问。

我们可以通过简化常见任务和减少模板代码,帮助更多的开发人员在 Solana 上构建出卓越的东西。

以下是你可以提供帮助的方法:

今天尝试 Kite

准备好让你的 Solana 开发更轻松了吗?

开始使用 Kite:

npm i @helius-dev/kite

查看我们的 GitHub 存储库 以获取完整的文档和示例。

让我们一起加速 Solana 开发! 🪁

  • 原文链接: helius.dev/blog/kite-sol...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,在这里修改,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Helius
Helius
https://www.helius.dev/