GTokenTool全网最好的代币发行工具平台
当前位置:首页 >> solana教程 >> 如何使用 Seahorse 在 Python 中编写 Solana 程序

如何使用 Seahorse 在 Python 中编写 Solana 程序

admin solana教程 73

Solana 是一个高性能区块链网络,具有可扩展的智能合约功能,可在全球范围内采用。Solana 平均每秒处理 3,000 笔交易,是速度最快的区块链协议之一。Solana 程序是在 Solana 区块链网络上编写的智能合约,用于执行所有活动,包括代币转移、铸造 NFT 和链上投票。

本文将解释如何使用 Seahorse 开发框架从本地开发环境和在线 IDE 用 Python 编写 Solana 程序。

要开发 Solana 程序,您需要学习 Rust、使用 Anchor 开发框架进行构建,或者使用 Solana 的 Pythonic 开发框架 Seahorse。

Rust 是 Solana 所基于的编程语言,它是可用于与 Solana 的 Sealevel Runtime 交互的 默认web3 编程语言。

Anchor 是一个框架,它通过从普通用户中抽象出 Rust 语言的复杂性,使 Solana 应用程序开发更容易。

Anchor 为 Solana 开发人员提供了接口定义语言 (IDL)、从 IDL 生成客户端的 Typescript 包、Rust 板条箱和命令行界面 (CLI) 等工具。

Seahorse 是一个社区主导的 Solana 开发框架,它使开发人员能够使用 Python 编程语言编写 Solana 程序。

‍Seahorse让每个用 Python 编写的程序都拥有与 Rust 程序相同的安全措施。Seahorse 与 Anchor 完全兼容,也可以与 Rust 代码互操作。

Python 用于日常的 Web 应用程序和机器学习项目的编程,是最流行的编程语言。

由于许多有兴趣构建基于区块链的应用程序的开发人员可能已经具备 Python 编程技能,因此他们可以使用 Seahorse 构建 Solana 应用程序,而无需学习全新的编程语言(Rust)。

Solana Playground 之类的平台仅用于快速构建和测试应用程序,不应依赖于创建大型 dapp。为了在本地工作区上设置使用 Seahorse 构建所需的环境,我们将安装以下内容:

  1. Solana 工具套件

  2. 节点

  3. 海马

要安装 Rust、Solana 工具套件、Node 和 Anchor,请参阅有关设置本地 Solana 开发环境的教程。

如果您运行的是基于 Linux 的机器,则可能需要运行以下命令来添加其他依赖项:

已复制
sudo apt-get update && sudo apt-get upgrade && sudo apt-get install -y pkg-config build-essential libudev-dev

Seahorse 需要AnchorRustfmt才能正常工作。由于 Anchor 已在您的机器上运行,因此安装Rustfmt包和Anchor很容易。

运行以下命令添加Rustfmt包:

已复制
rustup component add rustfmt 

在终端中运行以下命令来安装 Seahorse:

已复制
Cargo install seahorse-lang

运行最后一条命令来检查 Seahorse 是否正确安装:

已复制
seahorse -- version

由于您已经安装了Solana 命令行工具,因此您可以创建一个本地“纸质”钱包,以便在本地工作时使用。

运行以下命令来验证 Solana CLI 工具是否已安装:  

已复制
Solana-keygen - -version 

然后输入下一个命令来生成新的密钥对:

已复制
Solana-keygen new

正确保存详细信息,以便您可以在本地环境中开始使用它们。

为你的纸钱包充值:

运行solana airdrop 2 命令获取 2 个测试 SOL 代币

如果您想使用在线开发环境来测试 Seahorse 而不是在本地运行它,那么 Solana Playground 是一个不错的选择。

Solana Playground 是一个在线集成开发环境,旨在启动 Solana 应用程序开发。 

Solana Playground提供以下预建的 Crates:

  1. Native(Rust)——适用于打算在没有任何框架的情况下在 Solana 上构建的开发人员

  2. Anchor(Rust)——供开发人员在 Solana 上使用 Rust 构建附加工具

  3. Seahorse (Python) - 适用于具有 Python 编程经验的 Solana 开发人员

Solana Playground 选择屏幕用于选择开发框架:Native、Anchor 和 Seahorse。
Screenshot.png

在 Solana Playground 上创建一个新项目,并为目录命名。创建名称后,将出现一个名为FizzBuzz的演示项目。这个迷你 dapp 就是我们将在本教程中使用的。 

您必须先生成一个 Playground 钱包,以便与您的 Seahorse 程序交互。Playground 钱包可作为应用程序的测试钱包。 

  • 点击“游乐场钱包”

  • 选择新钱包

  • 按照提示下载 JSON 文件

Solana Playground 界面用于创建新的 Playground 钱包
Screenshot.png

在游乐场终端中输入以下命令以获取 devnet SOL 代币

$连接

connect命令将您的测试钱包与项目链接起来。 

$ solana 地址

solana address 命令会打印出你的 Solana 钱包地址。我们稍后将使用此地址启动 FizzBuzz 应用程序。

$ solana 空投 2

solana airdrop命令将测试 SOL 代币存入您的钱包,以支付执行“构建”或“部署”等交易所需的费用

Solana Playground 的 FizzBuzz Seahorse dapp 项目文件
Screenshot.png

在本节中,我们将介绍如何创建流行但简单的链上 FizzBuzz 应用程序。我们的代码主要分为三个部分:

  1. 账户

  2. 说明 1

  3. 说明 2

可执行账户用于定义在 Solana 区块链上运行的可执行代码(智能合约)。在账户定义中,您可以分配 Solana 程序中所需的数据类型。 

FizzBuzz被定义为布尔数据类型,而“n”变量是无符号整数类型。 

已复制
class FizzBuzz(Account):   fizz: bool   buzz: bool   n: u64

还有一种账户形式, 称为内置账户。这些内置账户大多用于调用链上特定的指令。 

需要签名者的指令需要钱包的批准。签名者是使用此部分代码中定义的指令调用对交易进行签名的钱包。 

已复制
@instructiondef init(owner: Signer):

Owner关键字用于保存 Signer 详细信息的值。要获取 Signer 的公钥,可以添加以下代码:

已复制
key = owner.key()

使用空账户类型来初始化主账户(FizzBuzz)的类,尽管它最初是空的。 

已复制
@instruction def init(owner: Signer, fizzbuzz: Empty[FizzBuzz]): fizzbuzz.init(payer = owner, seeds = ['fizzbuzz', owner])

通过使用Empty关键字,可以构造主Account中定义的类,在FizzBuzz账户初始化时,创建费用由Owner(即交易的签名者)支付。

一旦账户在链上创建,同一所有者再次调用时将无法重新创建。初始化生成的种子可以识别原始账户。

第二条指令调用使用已经创建的账户及其值。 

已复制
@instruction def do_fizzbuzz(fizzbuzz: FizzBuzz, n: u64):   fizzbuzz.fizz = n % 3 == 0  fizzbuzz.buzz = n % 5 == 0  if not fizzbuzz.fizz and not fizzbuzz.buzz:        fizzbuzz.n = n   else:       fizzbuzz.n = 0

以下是 FizzBuzz 的完整代码示例: 

已复制
# fizzbuzz # Built with Seahorse v0.1.6# On-chain, persistent FizzBuzz!from seahorse.prelude import * # This is your program's public key and it will update #automatically when you build the project. declare_id('9q23KbCZWzeeCoyAdS9JTCeno6gWV9U6stzP7yozYWKh');   class FizzBuzz(Account):   fizz: bool   buzz: bool   n: u64   @instruction def init(owner: Signer, fizzbuzz: Empty[FizzBuzz]):   fizzbuzz.init(payer = owner, seeds = ['fizzbuzz', owner])   @instruction def do_fizzbuzz(fizzbuzz: FizzBuzz, n: u64):   fizzbuzz.fizz = n % 3 == 0   fizzbuzz.buzz = n % 5 == 0   if not fizzbuzz.fizz and not fizzbuzz.buzz: fizzbuzz.n = n   else: fizzbuzz.n = 0

Seahorse 是一个社区主导的开源项目,完全免费供公众使用。Seahorse 目前处于测试阶段,其许多功能尚未实现。虽然它尚未投入生产,但它可用于在Solana 的开发网络上试验和开发应用程序。 

借助 Seahorse,使用 Python 在 Solana 上进行构建变得简单而可行。如果您是一名对学习 web3 开发感兴趣的 Python 开发人员,那么使用 Solana Playground 探索 Seahorse 是一种安全而有趣的方式,可以开始使用 Anchor、Rust 和 Solana 程序来获得技能。

作者:GTokenTool一键发币平台

交流群:https://t.me/+Kz4u3xoDpFo3ZWY1

同类推荐