---
title: "如何使用 Seahorse 用 Python 编写 Solana 程序"
description: "面向 Python 开发者的 Solana 应用编写指南"
---

# 如何使用 Seahorse 用 Python 编写 Solana 程序

Solana 是一个具备智能合约功能的高性能区块链网络，旨在为全球化应用提供扩展能力。Solana 平均每秒可处理 3,000 笔交易，是速度最快的区块链协议之一。Solana Programs 是部署在 Solana 区块链网络上的智能合约，用于执行各类操作，包括代币转账、铸造 NFT 以及链上投票。

本文将介绍如何使用 Seahorse 开发框架，分别在本地开发环境和在线 IDE 中用 Python 编写 Solana Programs。

## **在 Solana 上开发程序的主要方式有哪些？**

**要开发 Solana Programs，你需要学习 Rust 并使用 Anchor 开发框架进行构建，或者使用 Seahorse——一个面向 Solana 的 Python 风格开发框架。**

Rust 是构建 Solana 所使用的编程语言，也是与 Solana 的 Sealevel Runtime 交互的默认[ web3 编程语言](https://www.alchemy.com/overviews/web3-programming-languages)。

### **使用 Anchor 在 Solana 上开发**

**Anchor 是一个框架，通过将 Rust 语言的复杂性从普通用户面前抽象出来，使 Solana 应用开发变得更容易。**

Anchor 为 Solana 开发者提供了一系列工具，包括接口定义语言（IDL）、从 IDL 生成客户端的 TypeScript 包、Rust crate，以及命令行接口（CLI）。

### **使用 Seahorse 在 Solana 上开发**

**Seahorse 是一个由社区主导的 Solana 开发框架，让开发者能够用 Python 编程语言编写 Solana 程序。**

**‍**Seahorse 让每一个用 Python 编写的程序都具备与 Rust 程序相同的安全保障。Seahorse 与 Anchor 完全兼容，也可以与 Rust 代码互操作。

**Python 常用于日常的 Web 应用开发和机器学习项目，是目前最流行的编程语言。**

由于许多有意构建区块链应用的开发者可能已经具备 Python 编程能力，他们可以使用 Seahorse 构建 Solana 应用，而不必学习一门全新的编程语言（Rust）。

## **如何在本地 Solana 开发环境中使用 Seahorse**

像 Solana Playground 这样的平台仅适用于快速构建和测试应用，不应作为构建大型[应用](https://www.alchemy.com/dapps/top/defi-dapps)的依赖手段。要搭建在本地工作区中使用 Seahorse 进行开发所需的环境，我们需要安装以下组件：

1. Rust
1. Solana Tool Suite
1. Node
1. Anchor
1. Seahorse

### **1. 安装必要的 Solana 开发工具**

要安装 Rust、Solana Tool Suite、Node 和 Anchor，请参阅这篇关于[搭建本地 Solana 开发环境](https://www.alchemy.com/docs/reference/solana-api-quickstart)的教程。

如果你使用的是基于 Linux 的机器，可能需要运行以下命令来添加额外的依赖项：

### **2. 安装 Seahorse**

Seahorse 依赖 _Anchor_ 和 _Rustfmt_ 才能正常工作。由于 Anchor 已经在你的机器上运行，安装 _Rustfmt_ 包和 _Anchor_ 会很简单。

运行以下命令添加 Rustfmt 包：

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

**运行最后一条命令，检查 Seahorse 是否安装成功：**

### 3. 生成一个纸钱包

由于你已经安装了 [Solana Command Line Tools](https://www.alchemy.com/overviews/solana-developer-tools)，你可以创建一个本地“纸钱包”，用于本地开发。

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

**然后输入以下命令，生成一个新的密钥对：**

请妥善保存这些信息，以便在本地环境中使用。

**为你的纸钱包充值：**

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

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

## **如何在 Solana Playground 中设置 Seahorse**

Solana Playground 是一个在线[集成开发环境](https://www.alchemy.com/overviews/solidity-ide)，专为快速启动 Solana 应用开发而构建。

[Solana Playground](https://www.alchemy.com/overviews/solidity-ide) 提供以下预构建的 Crate：

1. **Native**（Rust）——适用于打算不使用任何框架直接在 Solana 上构建的开发者
1. **Anchor**（Rust）——适用于使用 Rust 及其附加工具在 Solana 上构建的开发者**‍**
1. Seahorse（Python）——适用于有 Python 编程经验的 Solana 开发者

<ImageBlock
  src="https://media.alchemy.com/1703683155-solana-playground-selection-screen.png"
  alt="Solana Playground 框架选择界面：Native、Anchor 和 Seahorse。"
  width={1600}
  height={813}
  caption="Solana Playground 框架选择界面：Native、Anchor 和 Seahorse。"
/>

### **1. 创建一个新的 Solana Playground 项目**

在 Solana Playground 上创建一个新项目，并为该目录命名。命名后，会出现一个名为 _FizzBuzz_ 的示例项目。本教程将使用这个小型 dapp 进行讲解。

### **2. 创建一个 Playground 钱包**

在与 Seahorse 程序交互之前，你需要先生成一个 Playground Wallet。该 Playground Wallet 作为应用的测试钱包使用。

- 点击“playground wallet”
- 选择新建钱包
- 按照提示操作，下载 JSON 文件

<ImageBlock
  src="https://media.alchemy.com/1703683340-creating-new-playground-wallet.jpg"
  alt="Solana Playground 中创建新 Playground Wallet 的界面"
  width={1600}
  height={900}
  caption="Solana Playground 中创建新 Playground Wallet 的界面"
/>

### **3. 获取测试 SOL 代币**

在 playground 终端中输入以下命令，[获取 devnet SOL 代币](https://www.alchemy.com/overviews/solana-faucet)：

**$ connect**‍

`connect` 命令用于将你的测试钱包与项目关联。

**$ solana address**

**‍**`solana address` 命令用于打印出你的 [Solana 钱包](https://www.alchemy.com/overviews/solana-wallets)地址。稍后我们将使用该地址来初始化 FizzBuzz 应用。

**$ solana airdrop 2**

`solana airdrop` 命令会向你的钱包充值测试 SOL 代币，用于支付执行“Build”或“Deploy”等操作所需的费用。

<ImageBlock
  src="https://media.alchemy.com/1703683491-solana-playground-project-file.jpg"
  alt="Solana Playground 中 FizzBuzz Seahorse dapp 项目文件"
  width={1600}
  height={791}
  caption="Solana Playground 中 FizzBuzz Seahorse dapp 项目文件"
/>

## **Seahorse 的 Python 组件是如何工作的**

在本节中，我们将逐步讲解如何在链上创建这个常见但简单的 FizzBuzz 应用。代码中主要包含三个部分：

1. Account
1. Instruction 1
1. Instruction 2

### **1. Account**

Executable Account 用于定义在 Solana 区块链上运行的可执行代码（智能合约）。在 Accounts 定义中，你可以指定 Solana 程序所需的数据类型。

**Fizz** 和 **Buzz** 被定义为布尔类型，而“n”变量则是无符号整数类型。

### **2. Instruction 1**

还有一类账户被称为内置账户（Built-In Accounts）。这些内置账户大多用于调用链上的特定指令。

#### **A. Signer 账户**

需要签名者的指令必须获得钱包的批准。_Signer_ 是对这部分代码中定义的指令调用进行交易签名的钱包。

owner 关键字用于保存 Signer 的详细信息。要获取 Signer 的公钥，可以添加以下代码：

#### **B. Empty 账户**

Empty 账户类型用于初始化主 Account（FizzBuzz）的类，即使该账户最初为空。

通过使用 _Empty_ 关键字，你可以构建主 Account 中定义的类。当 FizzBuzz 账户被初始化时，创建费用由 Owner（即交易的签名者）支付。

一旦该账户在链上创建完成，同一 owner 再次调用时就不能重新创建该账户。初始化时生成的 seed 可用于识别原始账户。

### **3. Instruction 2**

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

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

## **开始使用 Seahorse 通过 Python 构建 Solana 应用**

Seahorse 是一个由社区主导的开源项目，完全免费向公众开放使用。Seahorse 目前处于测试阶段，许多功能尚未实现。虽然它还未达到生产可用的水平，但可以用来在 [Solana 的 devnet](https://www.alchemy.com/overviews/solana-devnet) 上进行实验和开发应用。

借助 Seahorse，用 Python 在 Solana 上构建应用变得可行且简单。如果你是一名 Python [有意学习 web3 开发的开发者](https://www.alchemy.com/overviews/how-to-learn-web3-development)，通过 Solana Playground 探索 Seahorse，是开始掌握 Anchor、Rust 和 Solana 程序相关技能的一种安全且有趣的方式。
