概述
接下来,我们首先要确保您了解什么是智能合约。然后,我们将重点介绍编写智能合约所需的编程语言。在这里,我们会遇到 Solana 和 EVM 兼容链之间的第一个主要区别。毕竟,在 Solana 上编写智能合约需要与以太坊编程不同的方法。此外,在本文中,我们将重点介绍 Solana 网络。但是,我们将查看以太坊和 Solana 的一些智能合约示例,以确保您正确理解它们的关键组件。最后但并非最不重要的一点是,我们将进行分步教程,展示如何在 Solana 上编写智能合约。这也是您将使用 Moralis 为您带来的终极 Solana API 的地方。
智能合约简介
如果你看上面的图片,你会看到以太坊的标志。这是因为以太坊是第一个可编程链,因此也是提出智能合约概念的网络。然而,现在我们有几个著名的可编程区块链,其中许多都支持智能合约。此外,当谈到与 EVM 兼容的区块链时,“智能合约”是正确的术语。另一方面,当谈到 Solana 上的智能合约时,它们在技术上被称为“程序”。
因此,无论我们谈论的是“智能合约”还是链上“程序”,它们本质上都是同一个东西。在我们关注如何在 Solana 或其他链上编写智能合约之前,差异并不重要。毕竟,它们都是在区块链上运行的软件,旨在在满足相应条件时触发特定的预定义操作。因此,智能合约有能力创建无需信任的合约并消除中介。反过来,有无数的用例表明,这些链上程序将在未来发挥巨大的作用。
此外,值得指出的是,每笔链上交易背后都有一份智能合约。因此,所有代币(可替代和不可替代)的铸造都是通过部署智能合约来完成的。另外,请注意,智能合约必须遵守特定标准。例如,在以太坊网络和兼容 EVM 的链上,ERC-20、ERC-721 和 ERC-1155 智能合约用于铸造代币并控制其交易。此外,这些标准还使开发人员能够使用经过验证的智能合约模板。
现在您知道了什么是智能合约或链上程序,我们可以专注于创建它们所使用的编程语言。这就是 Solana 和 EVM 兼容链之间的智能合约编程任务不同之处。
智能合约使用什么编程语言?
如果您决定为以太坊或其他兼容 EVM 的链编写智能合约,您将使用 Solidity 或 Vyper 编程语言。在这两个选项中,Solidity 更受欢迎。因此,Solidity 有更多资源、更多智能合约模板等。因此,如果您决定为兼容 EVM 的链开发项目,我们鼓励您从 Solidity 开始。
另一方面,如果你想从头开始学习如何在 Solana 上编写智能合约,你就不能使用 Solidity。Solana 链的编程语言是 Rust、C 和 C++,其中 Rust 是开发人员的首选语言。因此,这是我们将在下面的“如何在 Solana 上编写智能合约”教程中使用的语言。
还值得注意的是,Solana 上的每个程序都有一个唯一且可识别的 ID,属于唯一的所有者,可以升级可执行代码:
尽管如此,除了不同的编程语言之外,在 Solana 上开发智能合约还需要不同的工具。例如,您不能使用 MetaMask Web3 钱包在 Solana 上支付交易费。此外,您不能使用 Hardhat 或 Remix 来编译、部署和验证智能合约。相反,您必须使用专为 Solana 编程设计的工具。首先,您需要 Solana CLI,还需要使用 Solana Web3 钱包。您将在下面的教程中了解有关创建 Solana 程序所需工具的更多信息。
智能合约示例
在寻找智能合约示例时,以太坊提供了更多模板。毕竟,以太坊区块链已经存在多年,并且拥有更大的社区。然而,这也意味着 Solana 为开发新合约提供了无数的机会。
此外,智能合约可用于各种目的。然而,大多数智能合约示例都集中在以下用例上:
加密代币创建(铸造)和交易
文档保存和可访问性
行政付款和帐单
工资单
税收
养老金
保险
账单支付
统计整理
健康和农业供应链
房地产和众筹
身份管理
话虽如此,我们将在下一节中查看 Solana 示例程序的代码行。下面,我们重点介绍以太坊的两个代币智能合约。另请注意,您可以在 OpenZeppelin 上找到无数经过验证的与 EVM 兼容的智能合约。
以下是一个基本的 ERC-20 智能合约:
以下是基本 ERC-721 智能合约的示例:
教程:如何在 Solana 上编写智能合约
按照此处介绍的步骤操作,并使用下面的视频了解有关如何完成本教程的更多详细信息。简而言之,学习如何在 Solana 上编写智能合约涉及以下三个步骤:
安装 Rust 和 Solana CLI
创建并部署示例 Solana 程序
创建测试 Dapp 来调用智能合约
关于第一步,您必须基本遵循 Solana 文档中概述的步骤。但是,第二步会变得更有趣一些。当然,我们的示例 Solana 程序非常简单;但是,如果您有大想法,您可以在这里创建各种智能合约。不过,对于最简单和最复杂的代码行来说,部署智能合约是相同的。
至于第三步,您将有机会创建一个真正的 dapp。使用我们的 repo,您可以在几分钟内完成此操作。但是,您也可以使用最终的以太坊样板作为起点,并应用调整来创建您独特的 dapp。此外,我们将向您展示如何获取您的 Moralis Web3 API 密钥。毕竟,后者也是通往最终 Solana API 的门户。最后,您将能够从您的 dapp 调用您的示例程序。
步骤 1:安装 Rust 和 Solana CLI
注意:如果您更喜欢按照视频说明操作,请务必使用下面的动态图片,从 2:09 开始。此外,如果这不是您第一次使用 Solana,并且您已经安装了这两个工具,请随意跳过此步骤。
首先打开一个新的 Unix 终端并输入以下命令:
运行上述命令后,您需要在几种安装类型中选择一种。为了本教程的目的,我们建议您使用默认选项。因此,只需输入“1”:
该过程可能需要一些时间才能完成,但 Rust 安装就到此为止了。因此,您可以继续进行 Solana CLI 安装(3:26)。首先,输入以下命令:
安装完成后,设置“ env path ”。你可以在终端日志中执行后者:
接下来,您必须创建一个新的本地 Solana 密钥对(本地钱包)。因此,输入以下两个命令:
然后,您将能够通过以下命令获取您的钱包地址:
接下来还需要设置devnet集群:
最后但同样重要的是,你必须获取一些测试 SOL 来覆盖 Solana devnet 上的交易。这是将向你空投一个 SOL 的命令:
上述命令行也完成了初始设置。
步骤 2:创建并部署示例 Solana 程序
注意:或者,使用下面的视频,从 5:07 开始。
此步骤是“如何在 Solana 上编写智能合约”任务的要点。我们将使用 Visual Studio Code (VSC) IDE,我们鼓励您也这样做,以避免不必要的混淆。当然,任何其他 IDE 也可以解决问题。
在 VSC 内部,创建一个新文件夹(我们的示例:“Solana-contract”)并启动一个新终端:
然后,使用以下命令创建一个新的 Rust 项目:
上述命令将把 Cargo 库添加到你的项目文件夹中:
接下来,进入“hello_world”文件夹。您可以通过输入以下命令来执行此操作:
进入上述文件夹后,继续更新“Cargo.toml”文件中的代码行。只需复制粘贴以下代码行:
它在 VSC 中的样子如下:
然后,打开“src”文件夹中的“lib.rs”文件并删除其内容。接下来,通过输入以下命令添加 Solana 程序包:
Solana 示例程序的代码行
此时,您已准备好添加构成 Solana 智能合约(Solana 程序)的代码行。因此,将以下代码行粘贴到“lib.rs”中:
注意:有关代码演练,请使用下面的视频。
有了上述代码,您就可以继续构建项目了。因此,请在终端中输入以下命令:
一旦上述命令构建了项目,您就可以使用“ solana program deploy ”命令部署您的 Solana 程序。您需要用目标路径补充此命令。因此,输入以下命令:
结果,您应该获得您的程序 ID(您将在第三步中使用它):
完成前两个步骤后,您已经知道如何在 Solana 上编写智能合约。因此,现在是时候学习如何使用 Solana 程序了。
步骤 3:创建测试 Dapp 来调用智能合约
正如承诺的那样,我们将从 9:38 开始向您提供下面的视频教程。本质上,您只需要从GitHub克隆代码,添加您的 Moralis Web3 API 密钥和您的 Solana 程序 ID:
克隆我们的代码:
获取您的 Web3 API 密钥(您需要一个 Moralis 帐户)并将其粘贴到“.env.local”文件中:
将您的 Solana 程序 ID(第二步结束)粘贴到“HelloWorld.tsx”文件的指定行中:
此外,请务必试用新的 Solana dapp 来测试它是否运行您的智能合约。