Sui Move 学习:Object & 四种能力
type
status
date
slug
summary
tags
category
icon
password
学习内容

Siu 是如何处理资产所有权

在Sui上,Object是数据储存的基本单位,通过定义,创建和管理这些代表用户资产级的可编程对象。

Object type (对象类型)

Sui 定义的每个对象都会用有key 和 UID。在区块链浏览器查看,可以看到五个基本参数 — owner,objectId, type, version, 最后一个交易摘要。 我们还可以通过其他字段来定义object 完善功能。

Object ownership (对象所有权)

Sui链上的,每个对象都有一个owner字段,它决定了对象在事务中的使用方式。

Address-owned (地址所有)

地址所有对象限制了访问权限,只有对应地址的所有者才能对其进行操作。

Dynamic fields  (动态字段)

Sui的动态字段和对象是动态添加和删除的,动态字段允许我们根据需要调整对象的机构,按需消耗gas。
Fields 可以存储任务课存储的值,Object Fields 只能存具有 key 能力的对象

Immutable 不可变

不能被更改,转移活着删除,这类对象没有所有者,可以被任何人使用。
 

Shared  共享

0x2::transfer::share_object
共享对象需要 key 能力,可被公开访问和使用。
下面例子是创建一个销售甜甜圈的商店,每个人都需要访问商店菜才能购买。
 

Wrapped  包裹

在Move,可以通过将结构类型的字段放入另一个字段来组织数据结构。
  • 数据结构嵌套
  • Move 中的结构体嵌套
  • 需要 store 能力
结构体的组合和使用十分重要。

直接包装

  • 直接将 Sui 对象作为字段
  • 包装对象不能单独存在
  • 只能通过包装对象访问
  • 无法形成循环包装
  • 支持解包
  • 对象 ID 在包装与解包中保持不变
在这两个结构题中,Bar是一个普通结构体,Fo是一个Sui对象(具有 key 能力)。
如果将 Bar 类型的 Sui 对象放入 Foo 类型的 Sui 对象中,则对象类型 Foo 将包装对象类型 Bar。对象类型 Foo 是包装器或包装对象
在 Sui 中,为了将一个结构体类型嵌入到另一个结构体类型中,被嵌入的类型必须具有 store 能力。而当结构体类型被嵌入到具有 key 能力的 Sui 对象结构体中时,它也成为一个 Sui 对象类型。
 

通过 Option 包装

  • 灵活性
  • 可选的包装对象
  • 可更换的包装内容

通过 vector 包装

  • 同类型对象的集合包装
  • 类似于 Option 包装
 
 
Sui Move 中有四种能力控制特定类型的值如何使用(赋予的权限)。
类型的值如何被使用,这些能力是:copydropstorekey。
相当于游戏中的职业,法师,射手等,具有不同的技能,职责就不同。
 

drop

允许在不再需要的某个结构题将其删除,没有drop能力是不允许被忽略的,防止被随意丢弃。这个能力也是为了防止资产泄漏或错误处理。而具有单个 drop 能力的结构称为 Witness

copy

我们可以使用copy自定义类型来允许实例被复制。
copy在Move中允许类型的实例或值被复制,但Move的资源模型默认是不允许复制的。
copy能力允许隐式和显式复制。隐式复制发生在赋值操作中,而显式复制可以通过解引用操作符实现。
copy能力通常搭配drop能力一起使用。
在move中,所有的原生类型和标准库中定义的类型都具有 copydrop能力,并且有Move编译器进行内存管理。
 

key

允许结构体被存储,并且第一个字段为UID类型,确保对象的唯一性和非可丢弃性。可以直接由账户或者地址拥有。
具有key能力,就不能有 dropcopy。又因为UID 的存在,Move的原生类型和标准类型都没有key 能力,这能力仅适用于Sui框架和自定义的类型。

Store

store能力在 Move 中能将数据持久化存储在区块链上,它可以允许开发者在Move模块中定义存储和检索的数据结构。

store 与 key 的关系

store 能力通常与 key 能力一起使用。key 能力用于访问和修改存储在区块链上的数据。在 Move 中,每个存储的数据项都对应一个唯一的 key
  • key 用于指向存储在区块链上的数据项的位置。
  • store 能力通过 key 来读取和写入数据。
因此,store 能力需要 key 来操作存储的数据,两者是紧密相关的。通过 key,程序可以定位到特定的数据项,并通过 store 能力对其进行读写操作。

© Anne 2021-2025