---
title: "什么是 Anchor 和 Anchor Program Registry？"
description: "了解如何使用 Anchor 和 Anchor Program Registry 在 Solana 上构建应用程序"
---

# 什么是 Anchor 和 Anchor Program Registry？

Anchor 是领先的 Solana 开发框架，用于在 Solana 上编写安全、可靠且高效的高级程序。Anchor 中的 program 是 Solana 区块链上的智能合约，使用户能够将数据锚定到 Solana 区块链上。得益于 Solana 庞大的开发者社区，Solana 上经过验证的 program 会托管在 Anchor Program Registry 上，方便访问。

本文将帮助你了解如何使用最[重要的 Solana 开发者工具](http://www.alchemy.com/overviews/solana-developer-tools)之一——Anchor，以及用于在 Solana 上构建应用的 Anchor Program Registry。我们还将对比 Anchor 与 Seahorse（一个基于 Python 的、用于与 Solana 交互的开发框架）。

## **什么是 Solana 账户模型？**

开发者在 Solana 区块链上构建的一切都涉及[**程序（programs）和账户（accounts）**](https://www.alchemy.com/overviews/solana-account-model)，它们负责在区块链上执行代码和存储数据。Solana 中有多种账户类别，包括：

- **数据账户（Data accounts）** - 存储数据
- **程序账户（Program accounts）** - 存储可执行程序
- **原生账户（Native accounts）** - 表示 Solana 上的原生程序

每个账户都存储一组信息：

- **lamports** - 账户所持有的 lamport 数量
- **owner** - 该账户的程序所有者
- **executable** - 用于检查该账户是否可以处理指令
- **data** - 账户存储的原始数据字节数组
- **rent_epoch** - 该账户下一次[需要缴纳租金费用](https://www.alchemy.com/overviews/how-to-calculate-rent-for-solana-programs)的 epoch

## **什么是 anchor？**

[**Anchor**](https://www.anchor-lang.com/) 是一个用于在 Solana 上编写安全、可靠的高级程序的框架，它抽象了账户的底层构造以及 Solana 程序接口的修改逻辑。

框架的作用是提供一个基础，使用户无需从零开始编写不必要的逻辑，帮助用户避免冗余代码，并帮助他们编写简洁、安全的程序。具体来说，Anchor 通过样板代码提供反序列化的账户和指令数据、一个命令行界面（CLI），以及一个用于[开发 Solana 应用](https://www.alchemy.com/overviews/learn-solana-development)的工作区。

### **anchor 是如何工作的？**

Anchor 使用宏（macros）和 trait 为开发者生成样板 Rust 代码。每个 Anchor 程序由三个部分组成：

1. **declare_id** - 用于声明程序链上地址的宏
1. **\#\[program\]** - 用于标记包含程序指令逻辑的模块的属性宏
1. **\#\[account\]** - 用于为程序定义自定义账户类型的属性宏

**以下是 Anchor 程序的基本结构：**

<ImageBlock
  src="https://media.alchemy.com/1703690818-basic-structure-of-an-anchor-program.png"
  alt="Anchor 程序的基本结构"
  width={1600}
  height={1080}
  caption="Anchor 程序的基本结构"
/>

### **1. 创建默认密钥对**

当我们第一次构建 Anchor 程序时，它会生成一个新的密钥对，作为部署该程序的默认密钥对。

该公钥应作为 declare_id! 宏中指定的 programID 使用。

### **2. 编写程序指令**

接着，我们可以使用 \#\[program\] 属性单独为程序编写指令。每个指令函数都需要一个 **Context** 类型的参数，并且可以选择性地包含表示指令数据的其他函数参数。Anchor 会自动处理指令数据的反序列化，因此用户可以将指令数据当作 Rust 类型来使用。

### **3. 实现账户反序列化器**

_\#\[derive\(Accounts\)\]_ 会在给定的 struct 上实现一个账户反序列化器，从而无需手动对每个账户进行反序列化。它负责执行所有必要的约束检查，确保各账户满足程序安全运行所需的条件。

### **4. 调用 initialize 函数**

当 Initialize 函数被调用时，程序会：

- 检查传入指令的账户是否与 Initialize struct 中指定的账户类型匹配
- 根据额外指定的约束条件检查账户

以上就是 Anchor 程序的工作原理，让你能够开始构建 Anchor 程序。想要了解更多关于 Anchor 程序的信息，强烈建议查阅其官方文档。

## **什么是 anchor program registry (apr)？**

**Anchor Program Registry（APR）是一个目录，收录了已在 Solana 区块链上注册的 Anchor 程序，方便用户查找和访问。APR 确保 Anchor 程序在区块链上完成注册和身份验证。**

Anchor Program Registry 中有许多程序可以简化你的工作，我们来看几个例子：

- token_signer - 提供一套用于 Solana 密钥管理和安全的程序。
- spl_governance - 一组面向 **Sealevel 并行运行时** 的链上程序。
- crate_token - 允许任何人创建、管理和交易一篮子代币化资产。

### **Solana 开发者如何使用 anchor program registry？**

Solana 开发者使用 Anchor Program Registry 访问 Solana 区块链上经过验证的程序。Anchor Program Registry 收录了经过验证程序的源代码，让开发者可以访问一个可用代码的仓库。

你可以按照以下流程使用 Anchor Program Registry：

1. 访问某个 Anchor Program 的地址
1. 连接你的钱包
1. 进入 UI 界面
1. 签名并发送交易以执行某条指令

APR 界面会列出该 Anchor 程序支持的指令列表，以及供你为特定指令配置输入参数的表单字段。

## **什么是 Seahorse？**

Seahorse 是一个类似 Anchor 的 Solana 开发框架，但它是为 Python 开发者构建的。Seahorse 提供了一套用于在 Solana 区块链上构建、部署程序和账户并与之交互的工具。它支持 JavaScript、Rust、Python 等多种编程语言，并为新开发者配备了完整的资源和文档。

### **Anchor 与 Seahorse 对比**

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "Feature", dataType: "object" },
      { key: "2", width: 200, title: "Seahorse", dataType: "object" },
      { key: "3", width: 200, title: "Anchor", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p>Programming languages supported</p>", tooltip: "", icon: "" },
        "2": { title: "<p>JavaScript, Rust, Python</p>", tooltip: "", icon: "" },
        "3": { title: "<p>JavaScript, TypeScript</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p>Focus</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Flexibility and scalability</p>", tooltip: "", icon: "" },
        "3": { title: "<p>User experience and ease of use</p>", tooltip: "", icon: "" },
        id: 1,
      },
      {
        "1": { title: "<p>Tools and feature</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Smart contract development</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Decentralized Application Development</p>", tooltip: "", icon: "" },
        id: 2,
      },
      {
        "1": { title: "<p>Local development environment</p>", tooltip: "", icon: "" },
        "2": { title: true, tooltip: "", icon: "" },
        "3": { title: true, tooltip: "", icon: "" },
        id: 3,
      },
      {
        "1": { title: "<p>Testnet for running simulations</p>", tooltip: "", icon: "" },
        "2": { title: true, tooltip: "", icon: "" },
        "3": { title: true, tooltip: "", icon: "" },
        id: 4,
      },
      {
        "1": { title: "<p>Documentation and resources</p>", tooltip: "", icon: "" },
        "2": { title: true, tooltip: "", icon: "" },
        "3": { title: true, tooltip: "", icon: "" },
        id: 5,
      },
    ],
  }}
/>

## **学习 anchor 的相关资源**

以下是一些可以帮助你学习 Anchor 框架的资源：

1. [Anchor Docs](https://www.anchor-lang.com/) - 查找最相关、最新的信息
1. [Soldev](https://soldev.app/course) - 通过示例代码开始使用 Anchor 开发智能合约
1. [Sol Playground](https://beta.solpg.io/) - 使用在线 IDE 开始用 Anchor 开发程序

还有大量资源可以帮助你学习 Anchor 框架，并开始构建自己的去中心化应用。

## **开始使用 anchor 和 Alchemy 进行开发**

Anchor 框架是构建**可靠且安全的 Solana 程序（智能合约）**的宝贵工具。此外，Anchor Program Registry 是 Solana 区块链上经过验证程序的目录，是实现更好可组合性的关键资源。

Anchor 框架的多功能性和可扩展性使其成为 Solana 开发者的理想选择。如果你已准备好开启 Solana 开发之旅，现在就注册一个免费的 [Solana RPC 账户](https://dashboard.alchemy.com/signup/?a=solana-anchor) 吧！
