---
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（一個 Python 風格的 Solana 開發框架）。**

Rust 是 Solana 建置所採用的程式語言，也是與 Solana 的 Sealevel Runtime 互動時預設使用的[web3 程式語言](https://www.alchemy.com/overviews/web3-programming-languages)。

### **使用 Anchor 在 Solana 上開發**

**Anchor 是一個框架，透過將 Rust 語言的複雜性從一般使用者手中抽象化，讓 Solana 應用程式開發更容易。**

Anchor 為 Solana 開發者提供了介面定義語言（Interface Definition Language, IDL）、根據 IDL 產生客戶端的 Typescript 套件、Rust crates，以及命令列介面（CLI）等工具。

### **使用 Seahorse 在 Solana 上開發**

**Seahorse 是由社群主導的 Solana 開發框架，讓開發者能夠以 Python 程式語言撰寫 Solana programs。**

**‍**Seahorse 讓每個以 Python 撰寫的程式，都能擁有與 Rust 程式相同的安全保障。Seahorse 與 Anchor 完全相容，也能與 Rust 程式碼互通。

**Python 廣泛用於網頁應用程式與機器學習專案的日常開發，是目前最受歡迎的程式語言。**

由於許多對開發區塊鏈應用有興趣的開發者，可能已經具備 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. 產生紙錢包（paper wallet）

由於你已經安裝好 [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)（Integrated Development Environment），專為快速啟動 Solana 應用程式開發而打造。

[Solana Playground](https://www.alchemy.com/overviews/solidity-ide) 提供以下預先建置的 Crates：

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 錢包**

你必須先產生一個 Playground Wallet，才能與你的 Seahorse programs 互動。Playground Wallet 是作為此應用程式的測試錢包。

- 點選「playground wallet」
- 選擇新增錢包
- 依照畫面指示操作，並下載 JSON 檔案

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

### **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 Accounts 用來定義在 Solana 區塊鏈上執行的可執行程式碼（智能合約）。在 Accounts 定義中，你可以指定 Solana programs 所需的資料型別。

**Fizz** 和 **Buzz** 被定義為布林（Boolean）資料型別，而變數「n」則為無號整數（unsigned integer）型別。

### **2. Instruction 1**

還有另一種帳戶類型，稱為 Built-In Accounts。這些內建帳戶大多用於在鏈上呼叫特定的 instructions。

#### **A. Signer account**

需要簽署者的 instructions，必須取得錢包的核准。_Signer_ 就是在這段程式碼中，對定義的 instruction 呼叫進行簽署的錢包。

owner 這個關鍵字用來儲存 Signer 的相關資訊。若要取得 Signer 的公鑰，可以加入以下程式碼：

#### **B. Empty account**

Empty account 型別用來初始化主要 Account（FizzBuzz）的類別，即使該帳戶一開始是空的。

透過使用 _Empty_ 關鍵字，你可以建構主要 Account 中定義的類別。當 FizzBuzz account 被初始化時，建立費用會由 Owner（即該交易的簽署者）支付。

一旦該帳戶在鏈上建立完成，同一個 owner 之後再次呼叫時就無法重新建立。初始化時產生的 seed 可用來識別原始帳戶。

### **3. Instruction 2**

第二個 instruction 呼叫會使用已建立好的帳戶及其對應的值。

以下是 FizzBuzz 的完整程式碼範例：

## **開始使用 Seahorse 以 Python 建置 Solana 應用程式**

Seahorse 是一個由社群主導的開源專案，完全免費供大眾使用。Seahorse 目前仍處於 beta 階段，許多功能尚未實作完成。雖然尚未達到正式上線（production-ready）的程度，但仍可用來在 [Solana 的 devnet](https://www.alchemy.com/overviews/solana-devnet) 上進行實驗與應用程式開發。

透過 Seahorse，以 Python 在 Solana 上進行開發是可行且簡單的。如果你是一位[對學習 web3 開發有興趣的 Python 開發者](https://www.alchemy.com/overviews/how-to-learn-web3-development)，透過 Solana Playground 探索 Seahorse，是開始學習 Anchor、Rust 與 Solana programs 相關技能的一種安全又有趣的方式。
