Solana 智能合约完整指南
Solana 是一个专注于智能合约开发的区块链平台,旨在解决现有区块链面临的各种挑战。它承载了包括 NFT 和 DeFi 项目在内的多种区块链项目。
近年来,Solana 生态系统因其极低的交易费用和高可扩展性而广受欢迎。Solana 的独特之处在于它将权益证明共识算法与独特的历史证明机制结合在一起,为开发者提供了一个多功能网络,用于构建 NFT 平台、应用等。
本文将介绍 Solana 智能合约的工作原理、如何创建和部署 Solana 程序,以及所需的工具。此外,我们还会介绍一些 Solana 智能合约教程、示例、代码仓库、开发者工具和资源,帮助你入门。
什么是 Solana 智能合约?
Solana 智能合约也称为程序(programs),是解释指令并确立协议条款的代码。由于交易费用相对较低,许多开发者认为 Solana 智能合约是 Ethereum 智能合约的可行替代方案。
智能合约让开发者能够构建利用区块链的安全性、可靠性和可访问性的应用,同时提供从贷款、保险到物流和游戏等复杂的点对点功能。
Solana 智能合约可以用多种编程语言编写。虽然 Rust 是 Solana 智能合约的原生语言,但该协议也通过第三方 JSON RPC API SDK 客户端支持使用 C++、Solidity 等语言进行智能合约开发。
Solana 智能合约架构
Solana 采用了与传统基于 EVM 的区块链不同的智能合约模型。在传统区块链中,代码和状态被合并到单个合约中,而 Solana 智能合约是无状态的,只包含程序逻辑。
Solana 架构旨在证明存在这样一套软件算法:将它们组合起来实现区块链后,可以消除软件作为性能瓶颈的问题,使交易吞吐量能够随网络带宽成比例扩展。
为了增强与应用的交互,Solana 还提供了命令行界面(CLI)和 JSON RPC API。应用也可以使用现有的 SDK 与区块链和 Solana 程序进行交互。
Solana 验证流程示意图
Solana 的历史证明机制
Solana 旨在通过将权益证明与历史证明相结合来提升区块链的可扩展性。它使用了一种 Tower 拜占庭容错(BFT)系统,消除了节点之间实时通信的需求,从而提高了效率,实现了每秒 50,000 笔交易(TPS)的高交易速率。
因此,Solana 能够在保持去中心化的同时处理大量交易。Solana 借助 200 个验证节点每 400 毫秒创建一个新区块,同时将交易费用维持在一美元以下。
Solana 以其更高的可扩展性和更快的交易速度著称。Solana 网络在核心层面就具备可扩展性,因此不需要二层解决方案来提升可扩展性。
Solana 网络的技术会将数据拆分成更小的数据块,从而更便于在网络中传输数据。Solana 还使用 Sealevel 来协助在 GPU 和 SSD 上处理交易,从而实现高效的区块链网络。
图片来源:Solana Labs
Solana 程序与 Ethereum 智能合约有什么区别?
Ethereum 的智能合约使用 Solidity 编程语言编写,而 Solana 的智能合约主要使用 Rust 编写,被称为程序(programs)。它们是无状态的,仅表示程序逻辑。
两者之间最显著的区别在于所采用的共识机制。Ethereum 使用权益证明(PoS),旨在实现更去中心化和节能的网络。而 Solana 则使用历史证明(PoH),这是一种独特的方法,优先考虑速度和效率,从而实现快速、低成本的交易。
Solana 程序完全由代码组成,不包含任何数据。所有数据都以输入的形式提供。这种解耦设计通过允许同一个 Solana 程序的多个副本针对不同输入并行运行,实现了高性能。换句话说,来自多个用户账户、面向同一个 Solana 程序的交易可以并发进行。这也是使 Solana 具备高度可扩展性的特性之一。
如何在 Solana 上创建智能合约
本节将详细介绍在 Solana 上创建智能合约所需的步骤。我们将指导你完成整个过程,并提供入门所需的全部信息。
前提条件
- 对 Solana 的工作原理有一定的了解
- 按照下方“安装”部分的说明安装好 Anchor 和 Rust
- 做好学习的准备
步骤 1:安装 Rust、Solana、yarn 和 anchor
让我们从搭建 Solana 开发环境开始。
安装 Rust
我们先安装 Rust,这是编写 Solana 程序所使用的编程语言。
使用以下命令验证 Rust 及其编译器是否安装正确。
现在你还应该已经安装了 Cargo,即 Rust 的包管理器。运行以下命令确认 Cargo 安装正确。
Rustup 是用于安装和更新 Rust 的工具。
Rustc 是 Rust 编程语言的编译器;它能将 Rust 程序编译为可在所有主流操作系统上运行的可执行文件。
Cargo 是 Rust 编程语言的构建系统与包管理工具。
安装 Solana
如果安装过程要求你修改路径,请按照提示操作。
安装 node.js
访问官方网站下载 Node.js,确保选择适合你操作系统的版本。
你可以通过运行以下命令来确认 Node.js 是否安装成功:
安装 yarn
Yarn 是一个类似 npm 的包管理器。
检查你的 Yarn 版本。
安装 anchor
Anchor 是面向 Solana Sealevel 运行时的框架,提供了多种实用的开发者工具。
运行以下命令安装 Anchor。
然后,确认安装结果。
步骤 2:设置项目
在本节中,我们将把 Solana CLI 配置为使用 devnet,并使用 Anchor 框架初始化一个项目。为了模拟实际部署,我们将部署到 Solana Devnet。
要继续,请在终端中运行以下命令。
下一步是创建一个钱包,这是运行和分发程序所必需的。
使用以下命令获取你的 pubkey。
之后,你可以通过运行以下命令查询你的地址。
接下来,你需要一些测试网 SOL用于开发。你可以使用以下命令向钱包空投一些 SOL。
运行以下命令将显示你的余额。
让我们运行以下命令来初始化 Anchor 项目。该命令会创建项目所需的所有文件夹和额外依赖:
步骤 3:编写我们的第一个 HelloWorld 程序
在项目结构中,你会看到以下文件和文件夹。
- program — 该目录包含你所有的 Solana 程序
- test — 用于存放 JavaScript 测试代码的文件夹
- migrations — 该程序的部署脚本
- app — 用于构建前端的目录
请记住,lib.rs 是我们 Solana 程序的起始文件和主文件。它包含一些起始代码,如下所示。
让我们来探索 Rust 的工作原理。 Rust 代码的第一行用于导入依赖或库。在这里,导入的是 Anchor 库。
Solana 将地址或程序 ID 存储在 declare_Id 变量中。Anchor 默认会为我们创建一个程序 ID。
接下来是 program 部分,程序的逻辑就存放在这里。
最后一部分是 derive Accounts 部分,account struct 就存放在这里。
initialize struct 定义了 initialize 函数的上下文,struct 用于声明一种结构。在 Rust 中定义方法的方式与其他编程语言不同。将代码与数据分离的能力是 Solana 的核心卖点之一。
让我们深入了解 Hello World Solana 程序。请记住,Solana 程序只是 Solana 网络上的一类特殊账户,可以存储并执行指令。我们将使用 solana-program crate,它相当于 Solana 程序的标准库。要编写一个基础程序,我们需要用到 solana-program crate 中的一些内容。
第一部分使用了 Borsh,即 Binary Object Representation Serializer for hashing(用于哈希的二进制对象表示序列化器)的缩写。Borsh 用于对传入和传出已部署程序的参数进行序列化和反序列化。AccountInfo 是 account_info 模块中的一个 struct,用于提供对账户信息的访问。entrypoint 声明了程序的入口点。
entrypoint 模块中的 ProgramResult 会返回 ProgramReport 或 ProgramError。最后,msg 是另一个宏,用于向程序日志打印消息,而 pubkey struct 则让我们能够以公钥的形式访问地址。
上面的代码片段定义了账户中存储的状态类型,以及 counter u32,即用于表示问候次数的 32 位无符号整数类型。
如上面第一行代码所示,Solana 程序需要一个 entrypoint 宏来处理程序指令。entrypoint 需要一个带有 program_id 参数的 process_instruction 函数,该参数是生成 hello world 程序的账户的公钥。accounts 参数是我们打算问候的账户,instruction_data 参数则包含额外的输入。ProgramResult 会打印出消息 “Hello World Rust Program”。
'let' 语句用于获取要问候的账户。'if' 语句声明了这样一个条件:只有当程序拥有该账户时,数据才能被修改。
'let' 语句用于获取要问候的账户。'if' 语句声明了这样一个条件:只有当程序拥有该账户时,数据才能被修改。
如何在 Solana 上部署智能合约
本节概述了在 Solana 上部署智能合约的步骤。
步骤 1:测试 Solana 程序
要运行测试,请执行以下命令。
这将针对特定集群构建、部署并测试程序。
步骤 2:部署到 Devnet
部署到正式网络很简单,我们首先要确认自己处于 Devnet。
找到你的 Anchor.toml 文件,并将 cluster 更新为 devnet,即 cluster = "devnet"。
运行以下命令来构建程序。
最后,部署该程序。
步骤 3:在 Solana 浏览器中验证
接下来,我们通过提供程序 ID,在 Solana Devnet explorer 上对程序进行验证,以确认其已成功部署。你应该能在历史记录部分看到部署日志。
Solana 智能合约教程
在对智能合约的工作原理有了扎实的理解之后,让我们通过一个实际项目来深入掌握 Solana 开发架构的工作方式。我们要构建的项目是一个用于铸造 NFT 的 Solana 智能合约。我们可以用多种方式铸造 NFT,其中一种是使用 Metaplex candy machine。NFT 是智能合约最热门的应用场景之一。
在本节中,你将学到:
- 如何配置 Solana CLI 工具以使用 Devnet,以及 Solana 中其他常用命令
- 如何用 Rust 编写更复杂的程序
- 如何使用 Anchor 框架初始化一个项目
- 理解 Rust 的变量与语法
所需条件为:
- NodeJS v14
- NPM
- 最新稳定版 Rust
- Solana CLI v1.7.11 或更高版本
- Git
快速搭建
我们使用以下命令配置开发环境,将 Solana 设置为使用 Devnet 网络。
然后使用以下命令生成你的钱包,运行和部署程序时会用到它。
系统会提示你输入密码以保护你的钱包。之后你会看到你的助记词,它由 12 个单词组成:
接下来你可以查看你的地址。
然后,运行以下命令向你的地址空投 4 个测试网 SOL。
在空投 4 个测试网 SOL 之后,运行以下命令检查你的余额。
现在你已经将 Solana 配置为使用 Devnet 网络并创建了一个新钱包,接下来让我们创建一个 Anchor 项目,由它来帮我们管理所有文件夹和繁琐的配置。打开终端,输入以下命令。
Solana 智能合约
在深入智能合约之前,我们需要先设置好用于与 SPL 代币交互的 spl-token CLI。你可以在终端中运行以下命令来完成此操作。
安装 solana sdk 和 solana-program。
你会在 programs 文件夹中看到一个 lib.rs 文件。这就是我们编写 Solana 程序的地方。如前所述,我们会基于 lib.rs 中给出的默认内容进行构建。你应该会看到类似下面的内容。
在这里,我们在代码顶部导入了会用到的工具。
定义我们程序的逻辑
我们使用 mint_authority 授予程序权限,以创建一个 mint(mint_nft),然后为其分配一个代币账户(mint_token_account)。接着我们会使用之前导入的 token_program 和 associated_token_program。
Authority(权限)意味着该账户可以铸造更多代币,即“印钱”。它通常由钱包账户创建。它是可选的,因为一个 mint authority 可以放弃自己的权限,从而使该 mint account 变为不可变的。
创建 mint account
创建 token account
编写 mint 函数
接下来,我们会将 NFT 铸造到上面创建的 token account 中。
部署程序
现在你已经准备好使用 Anchor 框架构建这个 NFT 铸造 Solana 程序了!
构建过程会为你的程序账户生成密钥对。在部署程序之前,你必须将这个公钥添加到 lib.rs 文件中,因为使用 Anchor 的程序都需要这个公钥。为此,你需要使用以下命令,从 Anchor 生成的 keypair.json 文件中获取这个密钥对。
下一步是编辑 lib.rs 文件,将 declare_id!() 定义中的密钥对替换为上一步获取到的值。
接下来,你还需要将获取到的 Program ID 值填入 Anchor.toml 文件中 chainlink_solana_demo 的 devnet 定义部分。
由于你已经用新的 ID 替换了 keypair,你可能需要使用 Anchor 重新构建程序。
最后,你可以部署该程序。
程序成功部署后,终端输出会显示程序 ID,该值应与你填入 lib.rs 和 Anchor.toml 文件中的值一致。
已部署的合约也可以在 Solana Devnet Explorer 上进行验证。
已部署的合约显示在 Solana Devnet explorer 中。
Solana 智能合约示例与代码仓库
有许多 Solana 智能合约示例和代码仓库,对你的 Solana 开发历程会有很大帮助。下面我们列出了其中一些。
1. Hello world 智能合约
Hello World smart contract 提供了一个使用 Anchor 和 Rust 编写的实践性 Solana 程序示例。它按照循序渐进的方式介绍如何在 Solana 中构建智能合约和应用,同时还提供了用于使用、构建和部署链上程序的示例代码。
2. Simple Solana program
Simple Solana Program 在功能上与 Hello World 示例相关。它演示了如何在 Solana 区块链上创建和调用一个程序。在这个示例中,该 Solana 程序会统计自身被执行的次数,并将该信息存储在链上。
3. Awesome Solana
Awesome Solana 是一个内容详尽的资源库,包含了适合初学者和进阶 Solana 开发者的各种资源。它提供了关于 Solana 开发、Solana 交易、Solana 库、Solana 程序工作原理的说明,以及帮助学习的视频示例。
4. Break Solana
Break Solana 是一款由 Web 客户端前端、Web 服务器后端和一个链上 Solana 程序组成的游戏。Break Solana 游戏允许玩家尽可能快地发送简单的智能合约交易,以此展示 Solana 的速度。
用于编写程序的 Solana 开发者工具与资源
有一系列学习资源和开发者工具,在编写 Solana 程序时会很有用。
1. Solana playground
Solana Playground 提供了一种极其简便的方式,让用户能够根据自身独特需求完全自定义 Solana 交易,从而与区块链系统进行交互。即使是没有任何编程开发经验的人,也可以使用 Solana Playground 来更好地理解区块链的运作方式。该项目的代码仓库托管在 Github 上。
2. Start on Solana
Start on Solana 为在 Solana 上进行构建以及为 Solana 生态系统做贡献提供了指导。它以 JavaScript 和 Rust 提供了多种任务,涵盖从在 Solana 上创建 NFT,到使用 JavaScript 铸造和创建加密货币等内容。
3. Solana cookbook
Solana Cookbook 是一个开发者资源,提供了在 Solana 上构建应用所需的基础概念和参考资料。它是一个专注于 Solana 开发的重要资源,为开发者提供了大量示例。
4. Sol dev course
Sol Dev Course 旨在简化 Solana 的开发体验,是初学者开始在 Solana 上构建应用的最佳选择之一。它还拥有一个活跃的社区,成员可以贡献内容,帮助其他 web3 开发者。
5. 由 buildspace 提供的《用 react 和 Rust 在 Solana 上构建 Web3 应用》
Buildspace 是一个出色的社区,你可以在其中开始 Solana 开发之旅,并在完成里程碑后获得 NFT 奖励。这些互动课程非常适合想要在 Solana 上快速构建产品的初学者。
开始编写 Solana 程序
探索区块链与智能合约的世界可能颇为复杂,但像 Solana 这样的平台正在为更高效、可扩展且具有成本效益的解决方案铺平道路。本指南全面介绍了 Solana 在智能合约开发方面的独特方式,重点讲解了其独特的架构、共识机制,以及可供开发者使用的各种工具。
无论你是经验丰富的开发者,还是刚踏入区块链领域,Solana 都为创新提供了一条充满前景的道路。随着区块链格局的不断演进,像 Solana 这样的平台无疑将在塑造去中心化应用及更广泛的 web3 生态系统的未来方面发挥关键作用。动手实践、不断实验,在你的下一个项目中充分发挥 Solana 的能力。
相关概览
Solana2026年7月27日
Solana 节点:验证者节点、RPC 节点与自建节点
Solana 节点是什么,验证者节点、RPC 节点与辅助数据系统有何区别,以及何时应自建节点、何时应使用第三方服务。
Solana2026年7月22日
Solana 归档数据:如何查询完整的区块与交易历史
Solana 归档数据详解:节点为何修剪历史数据、哪些 RPC 方法需要归档访问权限,以及如何大规模查询完整的区块与交易历史。
Solana2026年5月28日
Solana Agent Kit 与 GOAT 与 ElizaOS:该选哪个框架?
对比 Solana Agent Kit、GOAT 与 ElizaOS:Solana 原生深度、多链广度还是完整的 agent 运行时。包含代码示例与决策框架。

构建区块链应用
Alchemy 将最强大的 Web3 开发者产品和工具与资源、社区及专业支持结合在一起。