Poseidon是一种新的转译器框架,它使Web开发人员能够仅使用TypeScript(一种全球数百万人都熟悉的语言)创建Solana链上程序(即智能合约)。该框架大大降低了链上开发的门槛,使更广泛的开发人员更容易使用Solana。Poseidon将TypeScript代码直接
<!--StartFragment-->
Poseidon 是一种新的转译器框架,它使 Web 开发人员能够仅使用 TypeScript(一种全球数百万人都熟悉的语言)创建 Solana 链上程序(即智能合约)。该框架大大降低了链上开发的门槛,使更广泛的开发人员更容易使用 Solana。Poseidon 将 TypeScript 代码直接转换为 Anchor,这是 Solana 最广泛采用的程序框架。
本文将深入探讨 Poseidon 的起源、架构设计、主要功能以及对 Solana 开发前景的潜在积极影响。此外,我们将介绍一个使用 Poseidon 编写的简单代币保险库程序的实际示例,重点介绍该框架的一些功能。
<!--EndFragment-->
<!--StartFragment-->
2023 年底, Solana 基金会向[Turbin3]团队提出了一个雄心勃勃的挑战:“您能否构建一个框架,让开发人员能够使用 TypeScript 创建 Solana 程序?” 自然,第一个反应是问“为什么?”
TypeScript 是 JavaScript 的静态类型超集,可帮助开发人员更早地发现错误并编写更易于维护的代码。作为现代 Web 开发的事实标准,TypeScript 和 JavaScript 已经培育出全球最大的开发者社区之一。引入 TypeScript 程序开发为扩大新的 Solana 开发人员库和降低区块链构建的准入门槛提供了重要机会。
<!--EndFragment-->
<!--StartFragment-->
与许多其他区块链相比,掌握 Solana 程序开发具有挑战性。新开发人员必须同时克服理解[Solana 的账户模型]和学习 Rust 的双重障碍,这可能是一个陡峭的学习曲线。我们 Turbin3 比任何人都更了解这一点;[15% 的新 Solana 开发人员都是通过我们的程序学习的]。
通过引入 TypeScript 框架,开发人员可以解耦这些挑战,利用他们已经了解的语言更快地将他们的第一个程序部署到测试网。基于 TypeScript 的链上程序开发框架首次允许开发人员使用单一语言无缝构建全栈 Solana 应用程序。
该项目最初是一个基本类型库和转译器概念,但在最初的原型设计和 Solana 和 TypeScript 专家的全面反馈后,它迅速发展成为更加强大的项目。经过数月的构建、测试、故障排除以及从行业专家那里获得宝贵意见后,Poseidon 于今年早些时候在 Breakpoint 2024 上达到了一个关键里程碑,我们在那里向一群好奇的开发人员展示了我们的工作。
<!--EndFragment--> <!--StartFragment-->
在现场演示中,我们的 Poseidon 首席开发人员[Shrinath]演示了如何使用 TypeScript 编写 Solana 程序。只需一个构建命令,Poseidon 便可在观众眼前将 TypeScript 代码转换为完整的 Anchor 语法。房间里洋溢着兴奋的气氛,人们窃窃私语:“这真的可行吗?”
自那时起,[Poseidon 的开源存储库]迅速发展,这得益于我们在 X 和 Discord 上不断壮大的 Poseidon Army 的贡献。社区成员解决问题、提交拉取请求并合作构建新软件包,帮助 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。这些核心构建块是无数协议的基础,因此是完美的起点。
让我们深入研究代码,详细检查[使用 Poseidon 用 TypeScript 构建的示例保险库程序],将程序分解为各个组成部分。此程序和其他程序的完整代码可在[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)。
<!--EndFragment-->
import { Account, Pubkey, Result, Signer, SystemAccount, SystemProgram, UncheckedAccount, u64, u8 } from "@solanaturbine/poseidon";
export default class VaultProgram {
static PROGRAM_ID = new Pubkey("11111111111111111111111111111111");
<!--StartFragment-->
我们通常在程序类中定义方法来定义 Poseidon 的指令。每个指令的上下文都隐含在方法参数中。要使用@solanaturbine/poseidon将帐户定义为程序派生地址 (PDA) ,我们使用派生方法将种子指定为数组中的第一个参数。
<!--EndFragment-->
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])
// assign an argument of type Pubkey by calling the key property
state.owner = owner.key;
// to store bumps in the custom_Acc(state), we can simply call 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]
)
}
}
<!--StartFragment-->
自定义状态账户被定义为扩展Account 的接口。自定义状态账户的字段可以使用@solanaturbine/Poseidon包中的类型来定义。
<!--EndFragment-->
export interface Vault extends Account {
owner: Pubkey
stateBump: u8
authBump: u8
vaultBump: u8
}
<!--StartFragment-->
Poseidon 有可能通过以下方式影响区块链开发格局:
未来方向
未来,Poseidon 计划通过以下方式进一步增强其能力:
Poseidon 标志着 Solana 程序开发向更广泛的受众开放的重大进步。通过弥合 Web 开发和区块链编程之间的差距,开发人员能够在 Solana 区块链上创建创新且有影响力的应用程序。随着区块链领域的发展,Poseidon 有可能成为新兴 Solana 开发人员的必备工具。
<!--EndFragment-->
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!