Anchor 区块链:定义及其必要性

2025年6月4日 | 阅读7分钟

Anchor 协助开发 Solana 的“程序”,这些程序是智能合约的替代品,正如 Solidity 协助在以太坊和其他 vcEVM 兼容应用程序上创建智能合约一样。随着 Solana 的受欢迎程度不断提高,可以预见对 Anchor 及其功能知识的需求将会增加。让我们来了解一下关于 Anchor 及其在 Solana 开发中的应用的一些最重要信息。

Anchor Protocol:它是什么?

Anchor Protocol (ANC) 是一个建立在 Terra 区块链上的去中心化金融 (DeFi) 协议。它提供了一个低波动性的储蓄环境,用户可以在其中对他们的数字资产进行借贷和赚取利息。该协议的货币市场和清算流程提供了稳定的收益,同时通过超额抵押设计确保了本金的安全。ANC 代币用于协议的治理和用户参与激励。

学习使用 Anchor 需要哪些基本先决条件?

在寻找安装 Anchor 到 Solana 的最佳资源之前,您需要了解必要的条件。您需要了解 Rust 的基础知识。有趣的是,用 Anchor 编写程序不需要对 Rust 编程有深入的了解。但是,您也不能忽视您对 Solana 的理解有多么重要。在开始使用 Anchor 之前,您需要了解 Solana 编程的关键概念。

Solana 的内存

从高层次来看,Solana 集群中的内存就像一个单一的、不变的数据堆。Solana 上的程序或智能合约可以访问它们在堆中的特定区域。程序可以读取全局堆的任何部分。然而,一些程序可能会尝试写入一个不属于它们的堆区域。在这种情况下,Solana 运行时会将该事务归类为失败。另外,需要牢记的是,当程序希望提高某个账户的余额时,Solana 运行时可以对此类情况做出例外处理。

在深入研究 Anchor 编程之前,您必须了解所有状态都包含在全局堆中。它包含智能合约、用户 SOL 账户以及智能合约使用的 RAM。“所有者”是指管理每个内存区域的软件。在 Solana 中,账户是内存区域,某些应用程序可能拥有数百个这样的账户。堆也是程序运行的最佳位置,“BPFLoader”程序负责存储程序的账户。它是 Solana 程序部署和升级的专用软件。

账户和交易

在进行全面的 Anchor 介绍之前,理解 Solana 中的交易和账户是您应该解决的另一个关键要求。为了确保 Solana 可以读写数据,您可以发送交易。您可以使用交易来访问 Solana 程序提供的端点。

为了调用端点,函数签名将需要两个参数。首先是应用程序在交易期间可以读取和写入的账户。Solana 交易中的另一个参数表示其他特定于函数的附加数据。

如何安装 Anchor?

由于 Anchor 是本 Solana 教程的主要主题,让我们直接了解一下该核心框架。要了解更多关于这个革命性的区块链平台的各种元素和功能,您可以查阅 Solana 的其他综合教程。关于安装 Anchor Solana 框架并理解必要要求的详细说明是您应该了解 Anchor 的第一批内容之一。

  1. 安装 Rust,然后安装 Solana 可能是过程的第一步。
  2. 要生成默认位置的密钥对,您必须然后执行“solana-keygen new”命令。
  3. Anchor 将使用这两个密钥来执行软件测试。
  4. 安装 Yarn 也至关重要,因为它有助于安装 Solana 应用程序所需的依赖项。

如何启动一个 Anchor 项目?

让我们直接进入使用 Anchor 框架启动新项目的细节。可以使用以下命令来启动新项目。

借助此命令,可以创建一个新 Anchor 工作区(文件夹)。Anchor 工作区文件夹包含各种文件类型。在此处可以看到 Anchor 工作区的文件的概述。

  • 出于测试目的,“.anchor”文件夹包含一个本地账本和最新的程序日志。
  • 使用 monorepo 时,“app”文件夹(为空)有助于存储前端。E2E 测试和用于测试示例代码的默认文件都包含在“tests”文件夹中。
  • “programs”文件夹,其中包含程序或 Solana 智能合约,也将是 Anchor 编程教程的主题。文件夹中最初只会有一个与新工作区同名的程序。但是,它也可以包含多个应用程序。
  • “migrations”文件夹,有助于存储应用程序部署和迁移脚本,也显示了 Anchor 工作区中的另一个重要亮点。

最重要的是,您需要使用“Anchor.toml”文件来完成 Anchor 的介绍。该文件帮助您设置工作区中程序的设置。它侧重于设置本地网络程序地址和发布程序的注册表。您可用于测试的供应商也在此文件中指定。此外,“Anchor.toml”文件提供了 Anchor 运行脚本的用户设置。

如何安装 Anchor?

由于 Anchor 是本 Solana 教程的主要主题,让我们直接了解一下该核心框架。要了解更多关于这个革命性的区块链平台的各种元素和功能,您可以查阅 Solana 的其他综合教程。关于安装 Anchor Solana 框架并理解必要要求的详细说明是您应该了解 Anchor 的第一批内容之一。

安装 Rust,然后安装 Solana 可能是过程的第一步。要生成默认位置的密钥对,您必须然后执行“solana-keygen new”命令。Anchor 将使用这两个密钥来执行软件测试。

高层次上对 Anchor 程序的概述

对“Solana 中的 Anchor 是什么?”这个问题的回答,理想情况下应侧重于提供 Anchor 程序的整体概述。Anchor 程序包含三个独立的部分:程序模块、账户结构体和“declare_id”宏。“program”模块有助于编写业务逻辑。账户结构体有助于验证账户。最后,“declare_id”宏有助于构建一个“ID”字段,为 Solana 程序提供地址存储。除了支持可以从您的程序地址访问的其他 crate 外,Anchor 还使用“ID”进行安全测试。

账户的结构是怎样的?

定义指令期望的账户的 Anchor 编程中最关键的元素之一是 Accounts 结构体。此外,Accounts 结构体是指定相关账户必须不惜一切代价遵守的限制的最佳工具。类型和约束是您可以用来实现这些目标的两种不同构造版本。

Accounts 结构体的“Types”适用于特定用例。Anchor 文档中的参考资料对各种账户类型进行了详细描述。尽管它们在管理 Solana 应用程序的所有安全检查方面缺乏灵活性,但账户类型可以满足多种用途。两种 Anchor 账户类型不检查提供的账户参数:UncheckedAccount 和 AccountInfo。然而,Anchor 使用安全检查来确保进一步的文档,而无需进一步检查。

如何定义程序模块?

程序模块是 Solana Anchor 教程中最有益的组件,因为它有助于定义业务逻辑。它便于脚本化函数,您可以在其他应用程序或客户中使用这些函数。程序模块的上下文和指令数据由其两个最关键的组件指示。

“Context”类型被假定为所有端点函数中的第一个输入。除了其他账户之外,此上下文参数有助于端点函数获取正在运行的应用程序的账户和程序 ID。“remaining_accounts”向量包含输入到指令但未在 Accounts 结构体中定义的所有账户。当您的函数需要处理不确定数量的账户时,这可能很有用。

您的端点函数可能还需要指令数据。通过在上下文参数之后向函数添加参数,您可以为 Solana 中的 Anchor 编程添加指令数据。然后,Anchor 将自动反序列化基于参数的指令数据。

什么是 Anchor 程序错误?

非 Anchor 错误和 AnchorErrors 是 Anchor 应用程序中可能发生的两种错误类型。此外,AnchorErrors 可分为两类:Anchor 内部错误和自定义错误。

AnchorErrors 可能提供不同类型的信息,如错误名称、抛出 Anchor 的代码位置或编号,或违反限制的账户。与 TypeScript 客户端类似,您可以在应用程序内部抛出错误后,在 Anchor 客户端中检索错误信息。TypeScript 客户端还将有关发生问题的应用程序的重要信息添加到错误报告中。

结论

如介绍书中所示,Anchor 是一个简单而有趣的用于创建 Solana 应用程序的框架。Anchor 编程有几个好处,最主要的是保证了速度和安全性。它提供了额外的安全检查,并加快了在 Solana 上创建智能合约的速度。

通过 Anchor 版本管理,您可以安装 Anchor 并立即开始使用 Solana,没有任何麻烦。此外,您还需要熟悉 Anchor 程序的关键元素,包括 Accounts 结构体、程序模块和“declare_id”宏。通过深入了解 Solana 的基础知识,发现 Anchor 架构的应用。