Poseidon:使用 TypeScript 构建 Solana 程序

  • 想样
  • 更新于 2024-12-10 10:21
  • 阅读 159

Poseidon是一种新的转译器框架,它使Web开发人员能够仅使用TypeScript(一种全球数百万人都熟悉的语言)创建Solana链上程序(即智能合约)。该框架大大降低了链上开发的门槛,使更广泛的开发人员更容易使用Solana。Poseidon将TypeScript代码直接

<!--StartFragment-->

Poseidon 是一种新的转译器框架,它使 Web 开发人员能够仅使用 TypeScript(一种全球数百万人都熟悉的语言)创建 Solana 链上程序(即智能合约)。该框架大大降低了链上开发的门槛,使更广泛的开发人员更容易使用 Solana。Poseidon 将 TypeScript 代码直接转换为 Anchor,这是 Solana 最广泛采用的程序框架。

本文将深入探讨 Poseidon 的起源、架构设计、主要功能以及对 Solana 开发前景的潜在积极影响。此外,我们将介绍一个使用 Poseidon 编写的简单代币保险库程序的实际示例,重点介绍该框架的一些功能。

<!--EndFragment-->

Screenshot11.png

<!--StartFragment-->

背景

2023 年底, Solana 基金会向[Turbin3]团队提出了一个雄心勃勃的挑战:“您能否构建一个框架,让开发人员能够使用 TypeScript 创建 Solana 程序?” 自然,第一个反应是问“为什么?”

TypeScript 是 JavaScript 的静态类型超集,可帮助开发人员更早地发现错误并编写更易于维护的代码。作为现代 Web 开发的事实标准,TypeScript 和 JavaScript 已经培育出全球最大的开发者社区之一。引入 TypeScript 程序开发为扩大新的 Solana 开发人员库和降低区块链构建的准入门槛提供了重要机会。

<!--EndFragment-->

Screenshot11.png

<!--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 具有以下几个突出的特点:

  • 简化开发:基于 TypeScript 的界面最大限度地缩短了 Web 开发人员的学习曲线,使他们能够专注于应用程序逻辑,而不必费心学习 Rust
  • 提高生产力: Poseidon 可帮助开发人员利用熟悉的工具和工作流程提高工作效率,从而加快开发进程
  • 增强的安全性和性能:该框架确保转译后的 Rust 代码符合 Solana 严格的安全性和性能标准,从而维护链上程序的完整性
  • 无缝集成: Poseidon 与 Solana 生态系统无缝集成,使开发人员能够利用现有的工具和库

系统架构

Poseidon 的架构由几个关键部分组成:

  • 基于 TypeScript 的编程接口:这一层为开发人员提供了熟悉的语法和工具来编写 Solana 程序
  • 转译引擎:该引擎将 TypeScript 代码转换为等效的 Rust 代码,充分利用 TypeScript 的类型系统和语言特性
  • 锚代码生成:转译后的 Rust 代码经过进一步处理,生成有效的 Anchor 程序,可编译并部署到 Solana 网络
  • 账户管理: Poseidon 提供了一种简化的方式来管理账户及其相关数据,使与 Solana 区块链的交互更加容易

使用案例

Poseidon 旨在加速开发人员对 Solana 账户模型的理解,从而大大减少新开发人员将他们的第一批程序部署到测试网的时间。由于区块链应用程序的严格安全要求,Poseidon 目前不适合构建生产级主网应用程序。有抱负的 Solana 协议工程师最终将需要学习 Anchor 和 Rust,以更好地理解 Solana 的底层架构。

该框架可用于探索和试验各种分散式应用程序,包括:

  • 去中心化金融 (DeFi):开发创新金融应用,如借贷协议、去中心化交易所和收益农业平台
  • 非同质化代币 (NFT):在 Solana 区块链上创建和管理数字资产
  • 游戏:开发基于区块链的游戏和虚拟世界
  • 供应链管理:跟踪和验证产品和材料的来源

我们首先关注的是支撑几乎所有区块链应用的基础程序:Counter、Vault 和 Escrow。这些核心构建块是无数协议的基础,因此是完美的起点。

波塞冬程序示例

让我们深入研究代码,详细检查[使用 Poseidon 用 TypeScript 构建的示例保险库程序],将程序分解为各个组成部分。此程序和其他程序的完整代码可在[Poseidon GitHub 存储库]中找到。

进口及项目申报

该程序被定义为一个 TypeScript 类,具有一个静态PROGRAM_ID来指定程序 ID。@solanaturbine/poseidon包提供了定义指令所需的类型,例如 Rust 类型(u8u64i8i128booleanstring)、SPL 类型(PubkeyAssociatedTokenAccountMintTokenAccountTokenProgram)和 Anchor 帐户类型(SignerUncheckedAccountSystemAccount)。

<!--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 有可能通过以下方式影响区块链开发格局:

  • 扩大 Solana 开发者社区:吸引更多开发者加入 Solana 生态系统
  • 加速开发:减少 Solana 项目的开发时间和精力
  • 提升开发者体验:提供更直观、高效的开发体验

未来方向

未来,Poseidon 计划通过以下方式进一步增强其能力:

  • 扩展语言支持:支持 JavaScript 和 Python 等其他语言
  • 提高性能:优化转译过程和生成的 Rust 代码
  • 增强安全性:严格测试框架和生成的代码是否存在漏洞

结论

Poseidon 标志着 Solana 程序开发向更广泛的受众开放的重大进步。通过弥合 Web 开发和区块链编程之间的差距,开发人员能够在 Solana 区块链上创建创新且有影响力的应用程序。随着区块链领域的发展,Poseidon 有可能成为新兴 Solana 开发人员的必备工具。

<!--EndFragment-->

作者:GTokenTool 来源:https://www.gtokentool.com

  • 原创
  • 学分: 3
  • 分类: Solana
  • 标签:
点赞 0
收藏 0
分享

0 条评论

请先 登录 后评论
想样
想样
江湖只有他的大名,没有他的介绍。