使用 Poseidon 把 TypeScript 转移为 Solana rust 程序
- 原文链接:www.helius.dev/blog...
- 译者:AI翻译官,校对:翻译小组
- 本文链接:learnblockchain.cn/article…
Poseidon 是一个新的转译器框架,使 Web 开发人员能够仅使用 TypeScript 语言创建 Solana 链上程序(即智能合约),这种语言对全球数百万开发者来说都很熟悉。该框架显著降低了链上开发的门槛,使更多开发者能够接触到 Solana。Poseidon 将 TypeScript 代码直接转换为 Anchor,Solana 最广泛采用的程序框架。
本文将深入探讨 Poseidon 的起源、架构设计、关键特性及其对 Solana 开发生态可能产生的积极影响。此外,我们还将通过一个使用 Poseidon 编写的简单代币保险库程序的实际示例,突出框架的一些能力。
在 2023 年末,Turbin3 团队受 Solana 基金会的委托,面临一个雄心勃勃的挑战:“你们能否构建一个框架,使开发者能够使用 TypeScript 创建 Solana 程序?”自然,最初的反应是问:“为什么?”
TypeScript 是 JavaScript 的一种静态类型超集,帮助开发者更早发现错误,编写更可维护的代码。作为现代 Web 开发的事实标准,TypeScript 和 JavaScript 培养了全球最大的开发者社区之一。在 TypeScript 中引入程序开发为扩展新的 Solana 开发者群体提供了重要机会,降低了在区块链上构建的门槛。
上图:量化 JavaScript(62.3%)和 TypeScript(38.5%)在开发者中的普及程度的数据 ( 来源)。
掌握 Solana 程序开发相较于许多其他区块链来说具有挑战性。新的开发者必须同时理解 Solana 的账户模型 和学习 Rust,这可能是一个陡峭的学习曲线。我们 Turbin3 比任何人都更清楚这一点;15% 的新 Solana 开发者都是通过我们的项目参与进来的 。
通过引入 TypeScript 框架,开发者可以将这些挑战解耦,利用他们已经熟悉的语言更快地将他们的第一个程序部署到测试网上。基于 TypeScript 的链上程序开发框架使开发者能够首次无缝地用一种语言构建全栈 Solana 应用程序。
该项目最初作为一个基本类型库和转译器(transpiler)概念开始,但在初步原型制作和来自 Solana 和 TypeScript 专家的深入反馈后迅速发展成为一个更强大的框架。经过几个月的构建、测试、故障排除以及来自行业专家的宝贵输入,Poseidon 在今年早些时候的 Breakpoint 2024 上达到了一个重要里程碑,我们向一群好奇的开发者展示了我们的工作。
在一次现场演示中,Shrinath,我们 Poseidon 的首席开发者,演示了如何用 TypeScript 编写 Solana 程序。通过一个简单的构建命令,Poseidon 将 TypeScript 代码转换为完整的 Anchor 语法——就在观众面前。房间里充满了兴奋,低语声开始蔓延:“这真的可行吗?”
自那时起,Poseidon 的开源代码库 快速增长,得益于我们在 X 和 Discord 上日益壮大的 Poseidon 队伍的贡献。社区成员们解决了问题,提交了PR,并协作构建新包,帮助 Poseidon 每天都在成熟。改进包括增强的 CLI、对代币程序函数的支持以及更好的错误消息。尽管仍处于早期阶段,但 Poseidon 的潜力显而易见。
从技术角度来看,我们将 Poseidon 的开发轨迹分为四个阶段。在我们最初的会议、头脑风暴和架构设计之后,面临了一些关键决策。最显著的是:
然后我们在构建和迭代阶段潜心工作,直至 Breakpoint 揭晓。那个揭示的时刻,令人瞩目,打开了目前阶段的洪水闸门——我们将框架交到早期采用者手中,让他们进行探索、发现和改进。
随着 2024 年的结束,我们持续培养框架的成长,专注于核心功能的改进、社区参与以扩展支持,以及识别所需的 SPL 函数和 Anchor 库支持。这些目标将使顶尖开发者能够专注于核心改进。
展望 2025 年,我们正在加速开发,计划在第一季度末启动我们的第一期 Turbin3 Poseidon Cohort(即将宣布)。这一举措将推进框架,专注于创建公共包、教程和其他教育资源。目标明确:使 Poseidon 成为加速使用 TypeScript 进行 Solana 程序开发的权威工具。
Poseidon 提供了几个突出的特性:
Poseidon 的架构由几个关键组件组成:
Poseidon 旨在加速开发者对 Solana 账户模型的理解,显著减少新开发者将他们的第一个程序部署到测试网所需的时间。由于区块链应用的严格安全需求,Poseidon 目前不适合构建生产级的主网应用程序。有志成为 Solana 协议工程师的人最终需要学习 Anchor 和 Rust,以更好地理解 Solana 的底层架构。
该框架可用于探索和实验各种去中心化应用,包括:
我们首先关注支撑几乎所有区块链应用的基础程序:Counter、Vault 和 Escrow。这些核心构建块是无数协议的基础,使它们成为完美的起点。
让我们深入代码,详细检查一个 用 TypeScript 构建的示例 Vault 程序 ,将程序分解为其组成部分。该程序及其他程序的完整代码可以在 Poseidon GitHub 仓库 中找到。
该程序被定义为一个 TypeScript 类,具有静态 PROGRAM_ID 指定程序 ID。@solanaturbine/poseidon 包提供了定义指令所需的类型,如 Rust 类型 (u8, u64, i8, i128, boolean, string)、SPL 类型 (Pubkey, AssociatedTokenAccount, Mint, TokenAccount, TokenProgram ) 和 Anchor 账户类型 (Signer, UncheckedAccount, SystemAccount)。
import { Account, Pubkey, Result, Signer, SystemAccount, SystemProgram, UncheckedAccount, u64, u8 } from "@solanaturbine/poseidon";
export default class VaultProgram {
static PROGRAM_ID = new Pubkey("11111111111111111111111111111111");
我们通常在程序类中定义方法,以使用 Poseidon 定义指令。每个指令的上下文在方法参数中隐含。要将账户定义为程序派生地址 (PDA),使用 @solanaturbine/poseidon 的 derive 方法将种子作为数组中的第一个参数。
initialize(
owner: Signer,
state: Vault,
auth: UncheckedAccount,
vault: SystemAccount
): Result {
auth.derive(['auth', state.key])
state.derive(['state', owner.key]).init(owner)
vault.derive(['vault', auth.key])
// 通过调用 key 属性分配 Pubkey 类型的参数
state.owner = owner.key;
// 要在 custom_Acc(state) 中存储 bumps,我们可以简单地调用 getBump
state.stateBump = state.getBump()
state.authBump = auth.getBump()
state.vaultBump = vault.getBump()
}
deposit(
owner: Signer,
state: Vault,
auth: UncheckedAccount,
vault: SystemAccount,
amount: u64
) {
state.deriveWithBump(['state', owner.key], state.stateBump)
auth.deriveWithBump(['auth', state.key], state.authBump)
vault.deriveWithBump(['vault', auth.key], state.vaultBump)
SystemProgram.transfer(
owner, // from
vault, // to
amount // amount to be sent
)
}
withdraw(
owner: Signer,
state: Vault,
auth: UncheckedAccount,
vault: SystemAccount,
amount: u64
) {
state.deriveWithBump(['state', owner.key], state.stateBump)
auth.deriveWithBump(['auth', state.key], state.authBump)
vault.deriveWithBump(['vault', auth.key], state.vaultBump)
SystemProgram.transfer(
vault,
owner,
amount,
['vault', state.key, state.authBump]
)
}
}
自定义状态账户被定义为扩展 Account 的接口。自定义状态账户的字段可以使用 @solanaturbine/Poseidon 包中的类型进行定义。
export interface Vault extends Account {
owner: Pubkey
stateBump: u8
authBump: u8
vaultBump: u8
}
Poseidon 有潜力影响区块链开发领域,通过:
未来方向
未来,Poseidon 旨在进一步增强其能力,通过:
Poseidon 标志着在使 Solana 程序开发对更广泛受众可及方面的重大进展。弥合 Web 开发与区块链编程之间的差距,使开发者能够在 Solana 区块链上创建创新和有影响力的应用。随着区块链领域的发展,Poseidon 有潜力成为新兴 Solana 开发者的重要工具。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!