智能合约 - Encode ClubSui 系列 #2
在六个教学视频中的第二个视频中,您将学习如何在Sui 网络上编写智能合约。
在Encode ClubSui 系列的第二篇中,我们将介绍在Sui 网络上编写智能合约的过程。
Sui 基金会与编码俱乐部(Encode Club)合作,提供了六个以开发者为中心的系列视频。该系列视频从Sui 的基础知识到构建智能合约和在Sui 中处理对象的教程。
学习重点
我们的智能合约编写课程由 Encode Club 主持,让您开始在Sui 上构建智能合约。我们从准备编码环境开始,迅速进入对象特性。我们通过 "Car "对象的例子来了解对象属性,尤其是所有权。
安装Sui
安装Sui 二进制文件和任何必要先决条件的最简单方法是访问InstallSui to Build文档。您可以在这里找到分步说明和所有下载链接。如果您刚刚入门,访问此页面还有助于熟悉Sui 文档。
Sui 软件包布局和清单语法
下载二进制文件后,您可以使用命令 sui 移动新的[软件包名称]
在当前路径目录下创建一个新的Move 软件包。运行该命令将在工作区根目录中创建两个项目:一个是 Move.toml
文件,以及一个名为 资源
.编译Move 代码需要 Move.toml
软件包清单文件和 资源
子目录。其他可选子目录包括 例子
, 脚本
和 试验
.
Move 代码组织(和发布)的主要单位是软件包。软件包由一组模块组成,这些模块在不同的文件中以 .移动
扩展名。这些文件包括Move 函数和类型定义。软件包必须包括 Move.toml
描述软件包配置(如软件包元数据或软件包依赖关系)的清单文件。
Object
许多其他区块链的存储都以账户为中心,每个账户都包含一个键值存储空间,而Sui 的基本存储单元则是对象。对象是Sui 中的编程构件,具有以下两个特性:
- 所有对象都用
有键
关键字。 - 所有对象都有
id:UID
作为他们的第一个领域。
可以使用以下四种方法对对象所有权进行分类:
由地址所有: Move 对象在Move 代码中创建后,可以转移到一个地址。转移后,该地址就拥有了该对象。一个地址拥有的对象只能由该地址签署的事务使用(即作为Move 调用参数传递)。拥有的对象可以以下三种形式作为Move 调用参数传递:只读引用 (&T
)、可变引用 (&mut T
)和按值 (T
).
被另一个对象拥有:当一个对象被另一个对象拥有时,它不会被封装。子对象仍然作为顶层对象独立存在,可以直接访问Sui 存储。我们将在第四部分讨论动态字段时更详细地介绍这一点。
永恒不变: 你不能更改不可变对象,不可变对象也没有独占所有者。任何人都可以在Move 调用中使用不可变对象。所有Move 软件包都是不可变对象:发布Move 软件包后,就不能再更改它了。Move 您可以使用 冻结对象
操作。在Move 调用中,只能将不可变对象作为只读引用 (&T
).
共享:对象可以共享,这意味着任何人都可以读取或写入该对象。与可变的自有对象(单写)不同,共享对象需要达成共识才能确定读写顺序。在其他区块链中,每个对象都是共享的。不过,Sui 程序员通常可以选择使用共享对象、自有对象或两者结合的方式来实现特定用例。这种选择会对性能、安全性和实施复杂性产生影响。
函数
有几种可见性修改器可以限制或阻止访问Move 功能。 public
函数允许其他模块导入特定函数。 public(friend)
入口函数允许直接调用某个函数,如在事务中。一种特殊函数称为 init
只在发布相关模块时执行一次。它始终具有相同的签名,且只有一个参数: ctx: &mut TxContext
.
能力
能力是Move 中的一种特殊模式,它允许访问某些功能。能力可与 init
函数,以确保只存在一种能力,并将其发送给模块发布者。