总结

这个模块进一步加深了您对基本 Sui Move 的理解。

函数

我们学习了另外两种类型的函数:

  • public(package)函数:类似于其他语言中的包可见函数,只能被同一包中的模块调用。
  • 这允许开发人员限制危险函数只能被自己的模块调用,而不能被其他模块调用。
  • entry:只能直接从交易中调用,而不能从其他 Move 代码中调用。

可编程交易块(PTB) 允许用户指定一系列操作(交易)作为单个交易发送到网络。 这些操作按顺序执行,并且是原子的——如果其中任何一个操作失败,整个 PTB 将失败,所有更改将自动还原。

结构体

除了 key 能力,结构体还提供另外三种能力:

  • 存储能力(store ability)允许结构体成为其他结构体的一部分。
  • 复制能力(copy ability)允许结构体被“复制”,即创建一个具有相同字段值的结构体实例。
  • 销毁能力(drop ability)允许结构体在函数结束时被隐式销毁,而不需要显式“销毁”。

结构体数据访问:这允许开发人员定义其数据(结构体)的读取或写入规则。他们可以将数据保密,不允许任何外部模块访问内部字段, 或者实现公共 getter(返回内部字段的值)和 setter(设置内部字段的值),这些函数可以被外部模块调用。 他们还可以实现自定义认证模块,要求特定的权限对象才能更新结构体的值。

对象

  • 对象包装(Object Wrapping):一种将对象封装在其他对象中的方法,是创建分层数据结构并更细粒度地管理所有权和访问的关键技术。
  • 不可变对象(Immutable Object):除了共享对象和归属对象之外的第三种对象类型。不可变对象可以作为用户交易的一部分, 但在“冻结”后永远不能被更改。
  • 系统对象:见证对象、发布者对象、显示对象、时钟。

可转移性

  • 具有存储能力的对象可以在其定义的同一模块之外转移。没有存储能力的对象只能在其定义的同一模块内通过 transfer::transfer 转移。
  • 共享和公共共享对象:开发人员可以允许他们的对象仅仅被拥有或者也可以被共享。
  • 冻结和公共冻结对象:开发人员同样可以决定是否希望所有者能够使他们的对象变为不可变。

选择对象类型使用的黄金法则:

  • 对于所有共享状态的合约,如果数据从未改变,则使用不可变对象。
  • 对于可以更新的共享状态,使用共享对象。
  • 对于其他所有情况,使用归属对象。