跳至內容
0%

什麼是 Anchor 和 Anchor Program Registry?

作者 Pari

發布於 2023年1月26日閱讀時間 3 分鐘

Anchor 是領先的 Solana 開發框架,用於編寫安全、可靠且高效的高階 Solana 程式。Anchor 中的一個 program 是 Solana 區塊鏈上的智能合約,讓使用者能夠將資料錨定(anchor)到 Solana 區塊鏈上。由於 Solana 龐大的開發者社群,經過驗證的 Solana programs 會被收錄在 Anchor Program Registry 中,方便存取。

本文將協助你了解如何使用其中一項最重要的 Solana 開發工具——Anchor,以及用於在 Solana 上建構應用的 Anchor Program Registry。我們也會比較 Anchor 與 Seahorse,後者是一個以 Python 為基礎、用於與 Solana 互動的開發框架。

什麼是 Solana 帳戶模型?

開發者在 Solana 區塊鏈上建構的一切都涉及programs 與 accounts,它們負責在區塊鏈上執行程式與儲存資料。Solana 中有不同的帳戶類別,包括:

  • Data accounts - 儲存資料
  • Program accounts - 儲存可執行的程式
  • Native accounts - 表示 Solana 上的原生程式

每個帳戶都儲存一組資訊:

  • lamports - 帳戶擁有的 lamports 數量
  • owner - 該帳戶的 program 擁有者
  • executable - 檢查該帳戶是否可以處理指令
  • data - 帳戶儲存的原始資料位元組陣列
  • rent_epoch - 該帳戶下一次需繳交租金費用的 epoch

什麼是 Anchor?

Anchor 是一個用於編寫安全、可靠且高階的 Solana programs 的框架,它將帳戶的低階建構與 Solana programs 介面的修改抽象化。

框架作為基礎,讓使用者不必從零開始建立不必要的邏輯,協助使用者避免重複的程式碼,並幫助他們編寫乾淨且安全的程式。具體來說,Anchor 透過樣板程式碼提供反序列化的帳戶與指令資料、一個命令列介面(CLI),以及一個用於開發 Solana 應用程式的工作空間。

Anchor 如何運作?

Anchor 使用 macros 與 traits 為開發者產生樣板 Rust 程式碼。每個 Anchor program 由三個部分組成:

  1. declare_id - 用於宣告 program 鏈上位址的 macro
  2. #[program] - 用於標示包含 program 指令邏輯之 module 的 attribute macro
  3. #[account] - 用於為該 program 定義自訂帳戶類型的 attribute macro

以下是 Anchor program 的基本結構:

Anchor 程式的基本結構
Anchor 程式的基本結構

1. 建立預設 keypair

當我們第一次建構 Anchor program 時,會產生一組新的 key pair,作為部署該 program 的預設 keypair。

該 public key 應作為 declare_id! Marco 中指定的 programID 使用。

2. 為 program 指定指令

接著,我們可以使用 #[program] attribute 分別指定 program 的指令。每個指令函式都需要一個型別為 Context 的參數,並可選擇性地包含代表指令資料的額外函式參數。Anchor 會自動處理指令資料的反序列化,讓使用者能以 Rust 型別來操作指令資料。

3. 實作帳戶反序列化器

#[derive(Accounts)] 會在給定的 struct 上實作一個 Account 反序列化器,免去手動反序列化每個帳戶的需求。它負責執行所有必要的約束檢查,並確保帳戶符合該 program 安全執行所需的條件。

4. 呼叫 initialize 函式

當 Initialize 函式被呼叫時,該 program 會:

  • 檢查傳入該指令的帳戶是否符合 Initialize struct 中指定的帳戶類型
  • 依照指定的任何額外約束條件檢查帳戶

以上就是 Anchor program 的運作方式,讓你能夠開始建構 Anchor programs。若想進一步了解 Anchor programs,強烈建議查閱其官方文件。

什麼是 Anchor Program Registry(APR)?

Anchor Program Registry(APR)是一個目錄,收錄已在 Solana 區塊鏈上註冊的 Anchor programs,讓使用者能輕鬆找到並存取它們。APR 確保 Anchor programs 已在區塊鏈上完成註冊與驗證。

Anchor Program Registry 中有許多 programs 可以簡化你的工作。以下舉幾個例子:

  • token_signer - 提供一整套用於 Solana 金鑰管理與安全性的 programs。
  • spl_governance - 一組針對 Sealevel 平行執行環境(parallel runtime) 的鏈上 programs。
  • crate_token - 讓任何人都能建立、管理並交易代幣化的資產組合(tokenized basket of assets)。

Solana 開發者如何使用 Anchor Program Registry?

Solana 開發者使用 Anchor Program Registry 存取 Solana 區塊鏈上經過驗證的 programs。Anchor Program Registry 收錄了經驗證 programs 的原始碼,讓開發者能夠存取可運作程式碼的儲存庫。

你可以依照以下流程來使用 Anchor Program Registry:

  1. 前往某個 Anchor Program 的位址
  2. 連接你的錢包
  3. 存取該 UI
  4. 簽署並發送交易以執行某個指令

APR 介面會列出該 Anchor program 支援的指令清單,以及可用來設定特定指令輸入參數的表單欄位。

什麼是 Seahorse?

Seahorse 是一個類似 Anchor 的 Solana 開發框架,但它是為 Python 開發者打造的。Seahorse 提供一整套工具,用於在 Solana 區塊鏈上建構、部署並與 programs 及 accounts 互動。它支援多種程式語言,如 JavaScript、Rust 和 Python,並附有完整的資源與文件,方便新進開發者使用。

Anchor 對比 Seahorse

Feature
Seahorse
Anchor

Programming languages supported

JavaScript, Rust, Python

JavaScript, TypeScript

Focus

Flexibility and scalability

User experience and ease of use

Tools and feature

Smart contract development

Decentralized Application Development

Local development environment

Testnet for running simulations

Documentation and resources

學習 Anchor 的資源

有幾種資源可以協助你學習 Anchor 框架:

  1. Anchor Docs - 尋找最相關且最新的資訊
  2. Soldev - 透過範例程式碼開始用 Anchor 開發智能合約
  3. Sol Playground - 使用線上 IDE 開始用 Anchor 開發 programs

有大量資源可協助你學習 Anchor 框架,並開始建構屬於自己的去中心化應用程式。

開始使用 Anchor 與 Alchemy 進行開發

Anchor 框架是建構**可靠且安全的 Solana programs(智能合約)**的實用工具。此外,Anchor Program Registry 是 Solana 區塊鏈上經驗證 programs 的目錄,也是提升可組合性(composability)的重要資源。

Anchor 框架的多樣性與可擴展性,使其成為 Solana 開發者的一個具吸引力的選擇。如果你已準備好展開 Solana 開發之旅,立即註冊免費的 Solana RPC 帳戶吧!

Background gradient

打造區塊鏈魔法

Alchemy 結合最強大的 Web3 開發者產品與工具,並提供資源、社群與卓越的支援。