Solana 是一个专注于智能合约开发的区块链平台,旨在解决现有区块链面临的挑战。它承载了多种区块链项目,包括 NFT 和 DeFi 项目。
Solana 生态系统近年来因其极低的交易费用和高可扩展性而受到欢迎。其独特之处在于结合了权益证明共识算法和独特的历史证明机制,为开发者提供了一个多功能的网络,用于创建 NFT 平台、去中心化应用等。
本文将解释 Solana 智能合约的工作原理,如何创建和部署 Solana 程序,以及必要的工具。此外,我们还将回顾一些 Solana 智能合约教程、示例、代码库、开发工具和资源,帮助你快速入门。
什么是 Solana 智能合约?
Solana 智能合约,也称为程序,是解释指令并建立协议条款的代码。许多开发者认为 Solana 智能合约是以太坊智能合约的可行替代方案,因为它具有相对较低的交易费用。
智能合约使开发者能够创建利用区块链安全性、可靠性和可访问性的应用,同时提供复杂的点对点功能,涵盖从贷款和保险到物流和游戏的各个领域。
Solana 智能合约可以用多种编程语言编写。虽然 Rust 是 Solana 智能合约的本地语言,但该协议还支持通过第三方 JSON RPC API SDK 客户端使用 C++、Solidity 和其他语言进行智能合约开发。
Solana 智能合约架构
Solana 使用与传统基于 EVM 的区块链不同的智能合约模型。在传统区块链中,代码和状态组合在一个合约中,而 Solana 智能合约是无状态的,仅包含程序逻辑。
Solana 架构旨在展示一组软件算法的存在,这些算法在组合实现区块链时,消除了软件作为性能瓶颈的问题,使交易吞吐量能够与网络带宽成比例地扩展。
为了增强与去中心化应用的交互,Solana 还配备了命令行界面和 JSON RPC API。去中心化应用还可以使用现有的 SDK 与区块链和 Solana 程序进行交互。
Solana 的历史证明机制
Solana 通过结合权益证明和历史证明来提高区块链的可扩展性。它使用 Tower 拜占庭容错系统,消除了节点需要实时相互通信的需求,从而提高了效率,实现了每秒 50,000 笔交易的高吞吐率。
因此,Solana 可以处理高交易量,同时保持去中心化。Solana 在 200 个验证节点的协助下每 400 毫秒创建一个新区块,同时将交易费用保持在一美元以下。
Solana 以其增加的可扩展性和更快的交易速度而闻名。Solana 网络在核心级别是可扩展的,因此不需要第二层解决方案来增加可扩展性。
Solana 网络的技术将数据分解为更小的块,使得在网络中传输数据更加容易。Solana 还使用 Sealevel 来帮助在 GPU 和 SSD 之间处理交易,从而形成一个高效的区块链网络。
Solana 程序与以太坊智能合约的区别
以太坊的智能合约使用 Solidity 编程语言编写,而 Solana 的智能合约主要使用 Rust 编写,并称为程序。它们是无状态的,仅代表程序逻辑。
两者之间最显著的区别在于所采用的共识机制。以太坊使用权益证明,旨在实现更去中心化和节能的网络。而 Solana 利用历史证明,这是一种独特的方法,优先考虑速度和效率,从而实现快速低成本的交易。
Solana 程序完全由代码组成,不包含任何数据。所有数据都作为输入提供。这种解耦设计通过允许多个 Solana 程序副本在不同输入上并行运行来实现高性能。换句话说,来自多个用户账户到同一 Solana 程序的交易可以同时发生。这是使 Solana 具有高度可扩展性的特性之一。
如何创建 Solana 智能合约
本节深入探讨在 Solana 上创建智能合约所需的步骤。我们将指导你完成整个过程,并提供所有必要的信息。
前提条件
- 对 Solana 工作原理有基本了解
- 根据以下设置部分安装 Anchor 和 Rust
- 准备好学习
第一步:安装 Rust、Solana、Yarn 和 Anchor
让我们开始设置 Solana 开发环境。
安装 Rust
首先安装 Rust,这是用于 Solana 程序的编程语言。
使用以下命令验证 Rust 和 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,请运行以下命令。
然后,确认安装。
第二步:设置项目
在本节中,我们将 solana cli 配置为开发网,并使用 anchor 框架初始化一个项目。为了模拟实际部署,我们将部署到 Solana 开发网。
要继续,请在终端中运行以下命令。
下一步是创建一个钱包,这是运行和分发程序所必需的。
使用以下命令检索你的公钥。
之后,你可以通过运行以下命令来查询你的地址。
然后,你需要一些测试网 SOL 进行开发。你可以使用以下命令向你的钱包空投一些。
运行下面的命令将显示你的余额。
让我们通过运行以下命令来初始化我们的 Anchor 项目。该命令将创建项目所需的所有文件夹和额外依赖项:
第三步:编写第一个 HelloWorld 程序
在项目结构中,你将看到以下文件和文件夹。
- program — 包含所有 Solana 程序的目录
- test — 用于 JavaScript 测试代码的文件夹
- migrations — 程序的部署脚本
- app — 构建前端的位置
请记住,lib.rs 是我们 Solana 程序的启动器和主文件。它有一些启动代码,如下所示。
让我们探索 Rust 的工作原理。
Rust 的第一行代码导入依赖项或库。在这种情况下,它正在导入 anchor 库。
Solana 在 declare\_Id 变量中存储地址或程序 ID。Anchor 默认为我们创建一个程序 ID。
接下来是程序部分,程序的逻辑所在。
最后部分是 derive Accounts 部分,账户结构所在。
initialize 结构定义了 initialize 函数的上下文,而结构用于声明结构。在 Rust 中定义方法与其他编程语言不同。Solana 能够分离代码和数据是其关键卖点之一。
让我们深入了解 Hello World Solana 程序。请记住,Solana 程序只是 Solana 网络上的特殊账户,可以存储和执行指令。我们将使用 solana-program crate,这就像是 Solana 程序的标准库。我们需要使用 solana-program crate 中的一些东西来制作一个基本程序。
第一部分使用 Borsh,代表用于哈希的二进制对象表示序列化器。Borsh 用于序列化和反序列化传递给已部署程序的参数。_AccountInfo_ 是 account \_info 模块中的一个结构,提供对账户信息的访问。_entrypoint_ 声明程序的入口点。
entrypoint 模块中的 ProgramResult 返回 ProgramReport 或 ProgramError。最后,_msg_ 是另一个宏,用于将消息打印到程序日志,而结构 pubkey 允许我们以公钥形式访问地址。
上面的代码片段定义了账户中存储的状态类型和计数器 _u32_,这是引用问候次数的 32 位无符号整数类型。
Solana 程序需要一个 entrypoint 宏来处理程序指令,如上面代码的第一行所示。入口点将需要一个带有 program\_id 参数的 process\_instruction 函数,这是生成 hello world 程序的账户的公钥。_accounts_ 参数是我们打算打招呼的账户,而 instruction\_data 参数包含其他输入。_ProgramResult_ 打印一条消息“Hello World Rust Program”。
'let' 语句获取要问候的账户。'if' 语句说明了修改数据的条件,即程序必须拥有该账户。
如何部署 Solana 智能合约
本节概述了在 Solana 上部署智能合约的步骤。
第一步:测试 Solana 程序
要运行测试,请执行以下命令。
这将针对特定集群构建、部署和测试程序。
第二步:部署到开发网
部署到实时网络很容易,我们首先必须确认我们在开发网上。
找到你的 Anchor.toml 并将集群更新为 devnet _cluster = "devnet"_。
通过运行以下命令构建程序。
最后,部署程序。
第三步:在 Solana 浏览器上验证
接下来,我们在 Solana 开发网浏览器上验证程序,通过提供程序 ID 来验证它是否成功部署。你应该在历史部分看到部署日志。
Solana NFT 铸造智能合约实战
现在我们扎实了解了智能合约的工作原理,让我们深入一个真实项目,掌握 Solana 开发架构的工作方式。我们将构建的项目是一个用于铸造 NFT 的 Solana 智能合约。我们可以通过多种方式铸造 NFT,其中之一是使用 Metaplex candy machine。NFT 是智能合约最流行的用例之一。
在本节中,你将学习:
- 如何配置 Solana CLI 实用程序以使用开发网以及 Solana 中的其他有用命令
- 如何在 Rust 中编写更复杂的程序
- 如何使用 anchor 框架初始化项目
- 理解 Rust 变量和语法
要求包括:
- NodeJS v14
- NPM
- 最新的稳定 Rust 构建
- Solana CLI v1.7.11 或更高版本
- Git
快速设置
我们使用以下命令配置开发环境,设置 Solana 以与开发网网络配合工作。
然后生成你的钱包,这将需要运行和部署你的程序,使用以下命令。
系统将提示你输入密码以保护你的钱包。然后你将看到你的助记词,这是 12 个单词的组合:
然后你可以检查你的地址。
然后,运行以下命令向你的地址空投 4 个测试网 SOL。
空投 4 个测试网 SOL 后,通过运行以下命令检查你的余额。
现在你已经配置了 Solana 以与开发网网络配合工作并创建了一个新钱包,让我们创建一个 Anchor 项目来管理所有文件夹和繁琐的配置。转到你的终端并键入以下命令。
Solana 智能合约
在深入了解智能合约之前,我们需要设置我们的 spl-token CLI,它将用于与 SPL 代币交互。你可以在终端中运行以下命令来完成此操作。
安装 solana sdk 和 solana-program。
你会在 programs 文件夹中看到一个 lib.rs 文件。这是我们编写 Solana 程序的地方。如前所述,我们将在 lib.rs 中给定的默认基础上进行构建。你应该看到类似这样的内容。
在这里,我们在代码顶部导入了我们将要使用的工具。
定义程序逻辑
我们使用 mint\_authority 授予程序权限来创建铸币(_mint\_nft_),然后为其分配一个代币账户(_mint\_token\_account_)。然后我们将使用我们之前导入的 token\_program 和 associated\_token\_program。
权威意味着账户可以铸造更多代币或打印更多货币。它通常由钱包账户创建。它是可选的,因为铸币权威可以撤销自己的权利,使铸币账户不可变。
创建铸币账户
创建代币账户
编写铸造函数
接下来,我们将 NFT 铸造到我们上面创建的代币账户。
部署程序
你现在已经准备好使用 Anchor 框架构建 NFT 铸造 Solana 程序!
构建过程为你的程序账户生成密钥对。在你部署程序之前,你必须将此公钥添加到你的 lib.rs 文件中,因为这是使用 Anchor 的程序所必需的。为此,你需要使用以下命令从 Anchor 生成的 keypair.json 文件中获取密钥对。
下一步是编辑 lib.rs 文件,并将 declare\_id!() 定义中的密钥对替换为从上一步获得的值。
接下来,你还需要将获得的程序 ID 值插入到 Anchor.toml 文件中的 chainlink\_solana\_demo devnet 定义中。
因为你已用新的 ID 替换了密钥对,你可能希望再次使用 Anchor 构建程序。
最后,你可以部署程序。
一旦程序成功部署,终端输出将显示程序 ID,这应该与你输入到 lib.rs 和 Anchor.toml 文件中的值相关。
部署的合约也可以在 Solana 开发网浏览器上验证。
Solana 智能合约示例与资源
有许多 Solana 智能合约示例和代码库对你的 Solana 开发之旅非常有价值。我们在下面概述了其中一些。
1. Hello World 智能合约
Hello World 智能合约提供了一个使用 Anchor 和 Rust 的亲身体验的 Solana 程序示例。它遵循在 Solana 上构建智能合约和去中心化应用的分步方法。它还提供了用于使用、构建和部署链上程序的示例代码。
2. 简单 Solana 程序
简单 Solana 程序在功能上与 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 智能合约主要使用 Rust 语言编写,这是其原生支持的语言。此外,通过第三方工具和 SDK,也支持使用 C++ 和 Solidity 等语言进行开发。Rust 因其高性能和内存安全特性而被选为 Solana 的主要开发语言。
Solana 与以太坊智能合约的主要区别是什么?
主要区别在于架构设计和共识机制。Solana 采用无状态设计,将程序逻辑与数据分离,而以太坊将代码和状态组合在单一合约中。在共识机制上,Solana 结合权益证明和历史证明,实现了更高吞吐量和更低交易费用,👉查看实时性能对比了解最新数据。
开发 Solana 智能合约需要哪些工具?
基本工具包括 Rust 编程环境、Solana CLI、Anchor 框架和 Node.js。此外,开发者通常使用 Solana Playground 进行在线测试和开发,以及各种 SDK 和库来简化开发过程。这些工具共同提供了完整的 Solana 智能合约开发体验。
Solana 智能合约的部署成本是多少?
Solana 以其极低的交易费用著称,部署智能合约的成本通常远低于其他主流区块链。具体费用取决于合约复杂性和网络状态,但一般都在几美元范围内,这使得 Solana 成为高频率、低成本应用场景的理想选择。
如何测试 Solana 智能合约?
可以使用 Anchor 测试框架进行自动化测试,它支持本地网络测试和开发网测试。测试包括单元测试和集成测试,可以通过命令行工具运行。此外,Solana 提供了本地验证器功能,允许开发者在部署前在本地环境中全面测试智能合约功能。
Solana 智能合约适合哪些应用场景?
Solana 高性能特性使其特别适合需要高吞吐量和低延迟的应用场景,包括去中心化交易、高频交易、游戏应用、NFT市场和社交媒体平台。其低费用结构也使得微交易和小额支付应用成为可能,为创新DApp开发提供了广阔空间。
结语
探索区块链和智能合约的世界可能很复杂,但像 Solana 这样的平台正在为更高效、可扩展和成本效益的解决方案铺平道路。本指南全面概述了 Solana 在智能合约开发方面的独特方法,强调了其独特的架构、共识机制以及为开发者提供的工具。
无论你是经验丰富的开发者还是刚刚进入区块链领域,Solana 都为创新提供了一个有前景的途径。随着区块链 landscape 的发展,👉探索更多开发策略像 Solana 这样的平台无疑将在塑造去中心化应用和更广泛的 web3 生态系统的未来中发挥关键作用。深入探索,进行实验,并为你的下一个项目利用 Solana 的力量。