归属对象
从所有权的角度来看,Sui 对象可以分为两种类型:
- 归属对象
- 共享对象
一个归属对象的所有者可以是一个地址或另一个对象。
1. 由地址拥有
当我们将一个新建的对象转移到一个地址时,该对象将由该地址拥有。
示例是我们在上一课“创建对象”中使用的代码:
// 将城堡对象转移给所有者。
let owner = tx_context::sender(ctx);
transfer::public_transfer(castle, owner);
由地址拥有的对象不能被除所有者之外的其他人修改或删除。只有城堡的所有者可以将城堡转移给其他人或更新城堡的属性。
2. 由对象拥有
当使用 dynamic_field
和 dynamic_object_field
时,会出现对象所有的对象。
例如,在课程“动态字段 - 存储城堡数据”中,我们使用 sui::dynamic_field
将城堡数据存储到 GameStore
中。
当一个城堡被建造时,其对应的 CastleData
将由一个类型为 dynamic_field::Field
的对象包装,并由 GameStore
对象拥有。
构建城堡时创建的不同类型的对象: