如何在Stacks区块链上创建和部署Clarity智能合约

  • QuickNode
  • 发布于 2025-01-30 21:24
  • 阅读 17

这篇文章详细介绍了如何在Stacks区块链上创建和部署Clarity智能合约,提供了从环境配置到代码编写及测试的完整指导。包括Clarinet工具的使用说明以及Hiro Web Wallet的设置,适合有一定基础的开发者学习掌握与Stacks生态相关的智能合约开发技能。

概览

Stacks 是一个开源的第一层区块链,利用转移证明(Proof of Transfer,PoX)共识机制。Stacks 区块链利用比特币的安全性,并允许直接读取比特币链。Stacks 还非常令人兴奋,因为它支持智能合约,因此开发者可以构建去中心化应用(dApps),例如去中心化交易所、去中心化自治组织(DAOs)、NFT 市场等!本指南将演示如何使用 Clarinet(一个用于开发、测试和部署智能合约的命令行工具)在 Stacks 测试网上创建和部署 Clarity 智能合约。让我们开始吧!

你将需要的工具

  • 在你的计算机上安装 Clarinet(按照链接中的说明进行安装)

  • IDE 或文本编辑器(我们推荐 VSCode

  • Hiro Web 钱包(了解更多关于安装的信息 这里

  • STX 测试网代币(你可以在这个 水龙头 获取一些代币)

你将做的事情

  • 了解 Clarity 和 Clarinet

  • 设置 Clarinet 项目

  • 使用 Clarity 创建一个存储智能合约

  • 在本地环境中测试智能合约

  • 将智能合约部署到 Stacks 测试网

Clarity 101

Clarity 是一种 Lisp 风格的智能合约语言,专为 Stacks 区块链设计。它与其他智能合约语言不同,因为它是未编译的和非图灵完备的。这到底是什么意思呢?在大多数基于 EVM 的链上,你需要将 Solidity 合约代码编译成字节码,以便 EVM 能够理解它。Stacks 区块链则不同,你无需编译代码。相反,执行的代码是人类可读的,这使得审计变得容易。对用户的另一个好处是,当你在 Stacks 区块链上部署智能合约时,合约的源代码会自动可用,而在基于 EVM 的链上并不总是这样。

Clarity 的其他特性包括:

  • 无重入攻击漏洞

  • 无算术下溢或溢出

  • 精确的气体估算

  • 内置支持自定义代币

  • 后条件(即帮助你验证所做操作的提示)

要了解 Clarity 语言,你可以查看以下 Clarity 语言书籍资源。在下一节中,我们将讨论一下智能合约开发工具 Clarinet。

什么是 Clarinet?

现在你对 Stacks 和 Clarity 有了一些了解,让我们深入了解将用于构建智能合约的工具 Clarinet。Clarinet 是一个命令行工具,便于高效的智能合约开发。它可用于开发、测试、调试以及将合约部署到本地和生产环境。它类似于其他流行的 Web3 智能合约库,例如 Hardhat。

Hiro Web 钱包设置

为了将我们的 Clarity 智能合约部署到 Stacks 测试网,我们需要安装 Hiro Web 钱包。设置好钱包后,你还需要将钱包的网络配置更改为测试网。你可以通过单击钱包主页上的省略号("...")按钮,然后点击 更改网络 来实现。

接下来,你需要确保拥有一些 STX 测试网代币。你可以在 Stacks Explorer 水龙头 页面请求一些代币。只需连接你的钱包,然后点击 请求 STX 按钮。

一旦你拥有了钱包和 STX 测试网代币,请继续下一节!

设置 Clarinet 项目

安装好所有先决条件后,打开终端并运行以下命令以创建一个新的 Clarinet 项目。

clarinet new storage-project && cd storage-project

上面的 clarinet 命令创建了一个名为 storage-project 的模板项目目录,我们可以用它快速开发智能合约。

接下来,我们需要创建一个智能合约文件来持有我们的存储逻辑。我们可以在同一终端窗口中运行以下命令,以创建一个 .clar 文件用于我们的智能合约,以及一个 .ts 文件用于我们的测试(我们暂时不考虑测试,但是在生产中,创建单元测试是最佳实践)。

clarinet contract new storage-contract

创建和定义 Clarity 智能合约

在你选择的代码编辑器中,打开 contracts 文件夹中的 storage-contract.clar 文件,然后删除模板注释。我们将使用自己的注释来完成本教程。然后,在文件中输入以下代码。

;; 定义变量
(define-data-var storage (string-utf8 500) u"initial value")

;; 定义公共获取函数
(define-read-only (get-storage)
    (var-get storage)
)

;; 定义公共写入函数
;; #[allow(unchecked_data)]
(define-public (set-storage (message (string-utf8 500)))
    (ok (var-set storage message))
)

上述代码的解释:

第 1-2 行:我们定义了一个以 ";;" 开头的注释,然后定义我们的公共字符串变量 storage(具有最大500个字符长度)。

第 4-7 行:我们定义注释和一个公共只读函数,该函数返回我们的 storage 变量的值。

第 9-13 行:一个公共写函数,接受一个字符串参数并设置我们的 storage 变量的值。

在本地环境中测试智能合约

要验证我们的存储合约的语法和完整性,请在终端中运行命令 clarinet check

Clarinet check command

合约检查完成后,运行命令 clarinet console 以打开 Clarinet REPL 控制台。Clarinet REPL 将帮助我们测试和执行我们的 Clarity 代码。启动时,Clarinet REPL 会自动列出可用合约和内存中的模拟钱包。我们的示例显示如下:

Contract Identifier Stacks Contract

我们的智能合约的标识符(也称为合约地址)是 ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.storage-contract,公共函数是 get-storageset-storage

现在要与我们的存储合约的 get-storage 函数进行交互,我们可以使用以下语法:

(contract-call? .storage-contract get-storage)

get-storage function call

响应应为我们设置的默认值 "initial value"。让我们通过 set-storage 函数在存储合约中设置一个新值。代码应如下所示:

(contract-call? .storage-contract set-storage u"new value")

set storage function call

响应应为 (ok true)。我们可以重新运行第一个函数(即 get-storage)以验证我们的 storage 变量是否已更新。

get storage function call

现在我们确认我们的存储合约按预期工作,可以继续进行测试网的部署!

将智能合约部署到测试网

在继续之前,请记得完成本指南 Hiro Web 钱包设置 部分中的钱包设置说明。

接下来,导航到 Stacks Explorer Sandbox写入和部署 标签,并连接你的钱包。连接后,点击页面右上方的网络选项卡,确认你已选择测试网选项。

然后,将你的 storage-contract.clar 文件中的代码粘贴到 Clarity 代码编辑器中。

Write & Deploy tab Stacks Explorer Sandbox

注意: 默认情况下,沙箱将为你的合约创建一个随机名称。如有需要,请随意调整。

接下来,点击 部署 按钮,然后在你的 Hiro 钱包中确认交易。交易验证可能需要几分钟。你可以在 Hiro 钱包的 活动 标签中查看交易状态,或通过 Stacks Explorer 搜索交易详情。

一旦你的交易被挖矿,前往 Stacks Sandbox Explorer 的 调用合约 标签(左侧边栏中的 f),输入你的存储智能合约的完整地址(例如 ST12KGMZCKXERR1VG1TFEQQZ3VQXSMVVC3J31S604.nft-factory)。合约名称字段会自动填充你合约的名称。现在只需点击 获取合约 按钮。

加载合约后,它应该看起来像这样:

Call contract tab Stacks Explorer Sandbox

Stacks Sandbox 会自动加载所有可用的公共函数。为了测试合约,我们可以遵循在本地环境中相同的流程。首先,我们通过点击 get-storage 函数并点击 调用函数 按钮来检查存储变量的值。输出值应该是 u"initial value"

接下来,返回,点击 set-storage 函数并输入你想存储在 storage 变量中的字符串。在此测试中,我们将使用值 Stacks is gmi。沙箱将自动格式化我们的字符串,以使其符合我们合约的接受格式(即 u"Stacks is gmi")。输入字符串后,点击调用函数按钮并在你的 Hiro 钱包中签署交易。

回到交易挖矿后,你可以再次调用 set-storage 函数验证值。该值应与你输入的字符串匹配(即 Stacks is gmi)。

结论

恭喜你成功完成了整个过程!你现在知道如何使用 Clarinet 创建和测试 Clarity 智能合约。要了解更多,请查看我们的 如何在 Stacks 上铸造 NFT 的指南 或其他的一些教程 这里

我们 ❤️ 反馈!

如果你对本指南有任何反馈或问题, 请告诉我们。我们很乐意听取你的意见!

  • 原文链接: quicknode.com/guides/oth...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
QuickNode
QuickNode
江湖只有他的大名,没有他的介绍。