GTokenTool全网最好的代币发行工具平台
当前位置:首页 >> solana教程 >> 如何编写智能合约并在 Solana 上实现它们

如何编写智能合约并在 Solana 上实现它们

admin solana教程 251

概述

接下来,我们首先要确保您了解什么是智能合约。然后,我们将重点介绍编写智能合约所需的编程语言。在这里,我们会遇到 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 上编写智能合约”教程中使用的语言。 

Rust 与 Solidity 智能合约。

还值得注意的是,Solana 上的每个程序都有一个唯一且可识别的 ID,属于唯一的所有者,可以升级可执行代码:

Solana 浏览器示例。

尽管如此,除了不同的编程语言之外,在 Solana 上开发智能合约还需要不同的工具。例如,您不能使用 MetaMask Web3 钱包在 Solana 上支付交易费。此外,您不能使用 Hardhat 或 Remix 来编译、部署和验证智能合约。相反,您必须使用专为 Solana 编程设计的工具。首先,您需要 Solana CLI,还需要使用 Solana Web3 钱包。您将在下面的教程中了解有关创建 Solana 程序所需工具的更多信息。 

智能合约示例

在寻找智能合约示例时,以太坊提供了更多模板。毕竟,以太坊区块链已经存在多年,并且拥有更大的社区。然而,这也意味着 Solana 为开发新合约提供了无数的机会。 

图表展示了 Solana 智能合约如何运作。

此外,智能合约可用于各种目的。然而,大多数智能合约示例都集中在以下用例上:

  • 加密代币创建(铸造)和交易 

  • 文档保存和可访问性

  • 行政付款和帐单

    • 工资单

    • 税收

    • 养老金

    • 保险

    • 账单支付

  • 统计整理

  • 健康和农业供应链

  • 房地产和众筹

  • 身份管理

话虽如此,我们将在下一节中查看 Solana 示例程序的代码行。下面,我们重点介绍以太坊的两个代币智能合约。另请注意,您可以在 OpenZeppelin 上找到无数经过验证的与 EVM 兼容的智能合约。  

以下是一个基本的 ERC-20 智能合约:

// 合约/GLDToken.sol
// SPDX 许可证标识符:MIT
编译指示 solidity ^ 0.8 . 0
导入“@openzeppelin/contracts/token/ERC20/ERC20.sol”
合约GLDToken是ERC20 {
   构造函数uint256 initialSupply ERC20 “Gold” “GLD” {
       _mint 消息发送者, initialSupply
   }
}

以下是基本 ERC-721 智能合约的示例:

// 合约/GameItem.sol
// SPDX 许可证标识符:MIT
编译指示 solidity ^ 0.8 . 0
导入“@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol”
导入“@openzeppelin/contracts/utils/Counters.sol”
合约 GameItem 是 ERC721URIStorage {
   使用计数器进行计数器。计数器
   计数器。计数器私有_tokenIds;
   构造函数ERC721 “GameItem” “ITM” { }
   函数awardItem 玩家地址,字符串内存tokenURI
       民众
       返回uint256
   {
uint256 newItemId =        _tokenIds.current ( )
       _mint (玩家, newItemId )
       _setTokenURI ( newItemId, tokenURI ) ;
       _tokenIds.增量
       返回新的ItemId;
   }
}

教程:如何在 Solana 上编写智能合约

按照此处介绍的步骤操作,并使用下面的视频了解有关如何完成本教程的更多详细信息。简而言之,学习如何在 Solana 上编写智能合约涉及以下三个步骤:

  1. 安装 Rust 和 Solana CLI

  2. 创建并部署示例 Solana 程序

  3. 创建测试 Dapp 来调用智能合约

关于第一步,您必须基本遵循 Solana 文档中概述的步骤。但是,第二步会变得更有趣一些。当然,我们的示例 Solana 程序非常简单;但是,如果您有大想法,您可以在这里创建各种智能合约。不过,对于最简单和最复杂的代码行来说,部署智能合约是相同的。

至于第三步,您将有机会创建一个真正的 dapp。使用我们的 repo,您可以在几分钟内完成此操作。但是,您也可以使用最终的以太坊样板作为起点,并应用调整来创建您独特的 dapp。此外,我们将向您展示如何获取您的 Moralis Web3 API 密钥。毕竟,后者也是通往最终 Solana API 的门户。最后,您将能够从您的 dapp 调用您的示例程序。 

Solana 横幅。

步骤 1:安装 Rust 和 Solana CLI

注意:如果您更喜欢按照视频说明操作,请务必使用下面的动态图片,从 2:09 开始。此外,如果这不是您第一次使用 Solana,并且您已经安装了这两个工具,请随意跳过此步骤。

首先打开一个新的 Unix 终端并输入以下命令:

curl --proto '=https' --tlsv1.2 -sSf https: //sh.rustup.rs|sh

运行上述命令后,您需要在几种安装类型中选择一种。为了本教程的目的,我们建议您使用默认选项。因此,只需输入“1”:

指向默认选项的箭头。

该过程可能需要一些时间才能完成,但 Rust 安装就到此为止了。因此,您可以继续进行 Solana CLI 安装(3:26)。首先,输入以下命令:

sh -c "$(curl -sSfL https://release.solana.com/stable/install)"

安装完成后,设置“ env path ”。你可以在终端日志中执行后者:

Rust 成功消息。

接下来,您必须创建一个新的本地 Solana 密钥对(本地钱包)。因此,输入以下两个命令:

mkdir ~/my-solana-wallet
solana-keygen new --outfile ~/my-solana-wallet/my- keypair.json

然后,您将能够通过以下命令获取您的钱包地址:

solana 地址

接下来还需要设置devnet集群:

solana 配置设置--url https://api.devnet.solana.com

最后但同样重要的是,你必须获取一些测试 SOL 来覆盖 Solana devnet 上的交易。这是将向你空投一个 SOL 的命令:

solana 空投1

上述命令行也完成了初始设置。

步骤 2:创建并部署示例 Solana 程序

注意:或者,使用下面的视频,从 5:07 开始。

此步骤是“如何在 Solana 上编写智能合约”任务的要点。我们将使用 Visual Studio Code (VSC) IDE,我们鼓励您也这样做,以避免不必要的混淆。当然,任何其他 IDE 也可以解决问题。

在 VSC 内部,创建一个新文件夹(我们的示例:“Solana-contract”)并启动一个新终端:  

VSC 新航站楼。

然后,使用以下命令创建一个新的 Rust 项目:

货物初始化 hello_world --lib

上述命令将把 Cargo 库添加到你的项目文件夹中:

接下来,进入“hello_world”文件夹。您可以通过输入以下命令来执行此操作:

你好世界

进入上述文件夹后,继续更新“Cargo.toml”文件中的代码行。只需复制粘贴以下代码行:

[]
名称= “hello_world”
板条箱类型 = [ “cdylib” “lib” ]

它在 VSC 中的样子如下:

然后,打开“src”文件夹中的“lib.rs”文件并删除其内容。接下来,通过输入以下命令添加 Solana 程序包:

货物添加 solana_program

Solana 示例程序的代码行

此时,您已准备好添加构成 Solana 智能合约(Solana 程序)的代码行。因此,将以下代码行粘贴到“lib.rs”中:

使用 solana_program:: {
   account_info ::账户信息,
   入口点,
   入口点::ProgramResult,
   公钥::公钥,
   信息,
}
入口点!process_instruction
pub fn进程指令
   程序 ID:&Pubkey,
   账户:& [账户信息]
   指令数据:& [ u8 ]
) - >程序结果{
   msg! ( "你好,世界!" ) ;
   好的(())
}

注意:有关代码演练,请使用下面的视频。 

有了上述代码,您就可以继续构建项目了。因此,请在终端中输入以下命令:

货物建造-bpf

一旦上述命令构建了项目,您就可以使用“ solana program deploy ”命令部署您的 Solana 程序。您需要用目标路径补充此命令。因此,输入以下命令:

solana 程序部署./target/deploy/hello_world.so

结果,您应该获得您的程序 ID(您将在第三步中使用它):

程序 ID。

完成前两个步骤后,您已经知道如何在 Solana 上编写智能合约。因此,现在是时候学习如何使用 Solana 程序了。 

步骤 3:创建测试 Dapp 来调用智能合约

正如承诺的那样,我们将从 9:38 开始向您提供下面的视频教程。本质上,您只需要从GitHub克隆代码,添加您的 Moralis Web3 API 密钥和您的 Solana 程序 ID:

克隆我们的代码:

克隆 Solana 智能合约代码。

获取您的 Web3 API 密钥(您需要一个 Moralis 帐户)并将其粘贴到“.env.local”文件中:

获取莫里斯钥匙。

将您的 Solana 程序 ID(第二步结束)粘贴到“HelloWorld.tsx”文件的指定行中:

将程序ID添加到Solana智能合约。

此外,请务必试用新的 Solana dapp 来测试它是否运行您的智能合约。

作者:GTokenTool一键发币平台

交流群:https://t.me/+Kz4u3xoDpFo3ZWY1

同类推荐