Skip to content

UID 和 ID

在 Sui Move 中,UID 和 ID 是管理和标识 Sui 对象的核心机制。

  • UID 是对象的不可变唯一标识符,确保对象在 Sui 网络中具有独一无二的身份。
  • ID 是对地址的封装,用于引用特定对象,但没有硬性要求必须指向现有对象。

UID

UID (Unique Identifier) 是 Sui 对象的核心属性,其唯一性确保对象在网络中的标识不可重复使用。

UID 的定义

sui::object 模块中,UID 是对 ID 的封装,而 ID 又是对 address 的封装。

move
// File: sui-framework/sources/object.move
/// UID 是对象的唯一标识符
public struct UID has store {
    id: ID
}

/// ID 是地址的封装
public struct ID has store, drop {
    bytes: address
}
  • UID 是不可变的,即使对象被销毁,其对应的 UID 也不能重复使用。
  • ID 是一种通用标识符,本质上是一个地址类型。

生成 UID

新的 UID 是从交易哈希 (tx_hash) 和索引 (index) 派生而来的:

  • 每次创建新 UID 时,索引递增,确保唯一性。
  • Sui 验证器会拒绝未在同一交易中创建的 UID,防止重复使用或滥用。

示例:通过 object::new 生成 UID

move
use sui::tx_context;
use sui::object;

public fun create_uid_example(ctx: &mut tx_context::TxContext): UID {
    object::new(ctx)
}
  • 生成 UID 需要可变引用 &mut TxContext,这是因为创建新 UID 会修改交易上下文中的 ids_created 计数器。

UID 的生命周期

  • UID 的创建:通过 object::new(ctx) 创建。
  • UID 的销毁:通过 object::delete(uid) 销毁。
move
use sui::object;

struct Character {
    id: UID,
}

public fun delete_uid_example(ctx: &mut tx_context::TxContext) {
    let char = Character { id: object::new(ctx) };
    let Character { id } = char; // 解包结构体
    object::delete(id); // 销毁 UID
}

注意:UID 只能在值被解包后销毁,确保对象生命周期的完整性。

UID 的特殊用法

  1. 保留 UID:解包对象结构后,UID 可以独立存储,供其他对象或模块使用。
  2. 删除证明:提供对象已删除的证明,通过交换奖励机制激励删除操作。例如,某些框架可以忽略对象的部分限制,专门验证 UID 删除后的状态。

ID

ID 是 Sui Move 中的基础类型,是对 address 的简单封装。

ID 的功能和定义

  • 用于表示对象的引用或地址。
  • 可以通过 to_id(address) 从地址生成 ID。
move
use sui::object;

public fun create_id_from_address(addr: address): ID {
    object::to_id(addr)
}

ID 的灵活性

  • ID 不强制指向有效对象,它可以是任意地址。
  • 通常用作引用对象的轻量化方式,但不会附带 UID 的不可变特性。

UID 和 ID 的重要性

UID 和 ID 是 Sui Move 对象管理中不可或缺的组件,分别用于标识和引用对象。

  1. 唯一标识
    • UID 确保对象身份唯一,支持安全的跟踪和管理。
  2. 所有权和权限控制
    • UID 关联对象所有权,防止未经授权的访问和修改。
  3. 对象交互
    • ID 允许合约快速引用对象,便于执行复杂逻辑。

总结

  • UID 是对象的唯一标识符,通过 object::new 生成,保障每个对象的独特身份。
  • ID 是对地址的封装,灵活性较高,用于指向对象但不保证唯一性。
  • 理解 UID 和 ID 的概念对于开发安全、高效的 Sui Move 智能合约至关重要。

通过合理使用 UID 和 ID,可以实现对象的精确管理和高效交互,是构建复杂 Sui 应用的基础。