摘要:Sui 把链上一切都存成带唯一 ID 的对象。本文对照 docs.sui.io 官方文档,用 Suiscan 真实交易与 0x6 时钟对象、本机 GraphQL 查询,讲清对象元数据、所有权类型(独占/共享/不可变)与 Lamport 版本号规则怎么自己核对。

在以太坊上,你的 USDT 是记在合约里的一个数字;在比特币上,余额是一堆未花费输出 UTXO。Sui 走的是第三条路:链上一切都是「对象」——你的 SUI 币、NFT、DEX 的资金池、甚至系统时钟,都是带唯一 ID 的对象。本文只讲机制和核对方法:对象有哪几个元数据字段、所有权类型怎么影响交易路径、版本号按什么规则递增,以及怎么用 Suiscan 浏览器和官方 GraphQL 接口自己核对。

对象的四个元数据:ID、版本、交易摘要、所有者

打开官方文档 docs.sui.io · Object Model,「Object metadata」一节写明每个对象都带四个公共字段。和账户模型最大的不同是:状态挂在对象上,而不是挂在地址上,地址只是对象的「所有者」之一。

Sui 对象模型是什么:对象 ID、版本号与所有权在浏览器怎么核对-程序旅途
图1:docs.sui.io/concepts/object-model:32 字节 ID、8 字节 version、32 字节交易摘要、owner 字段;界面为英文
字段 文档定义(意译) 浏览器里看哪
ID(32 字节) 由创建它的交易摘要 + 该交易内生成 ID 的计数派生,全局唯一、永不改变 对象页「Object ID」
version(u64) 每次被交易修改都单调递增 对象页「Version」;交易页 Changes 表的 Version 列
交易摘要(32 字节) 最后一笔把它作为输出的交易 对象页「Last Tx Block ID」
owner 决定谁能在交易里使用它 对象页 Shared 标签 / Owner's Address

文档还区分三种「引用」方式:只用 ID(查当前状态)、(ID, version)(查某个历史版本)、(ID, version, digest) 三元组即「对象引用」——交易提交地址独占的对象时,要用对象引用写明版本,让发送方和验证者对对象内容达成一致。这一点和 比特币 UTXO 很像:交易消费某个确定版本的输入、产出新版本;也和 以太坊靠 Nonce 排序 的思路完全不同。

所有权类型:决定走快路径还是共识

打开 docs.sui.io · Types of Object Ownership,表格列出五类所有权以及各自的「版本路径」。读这张表的关键是第三列:Fastpath(快路径)不需要共识排序,Consensus 需要。

Sui 对象模型是什么:对象 ID、版本号与所有权在浏览器怎么核对-程序旅途
图2:docs.sui.io/concepts/object-ownership:Address-owned / Shared / Immutable / Wrapped / Party 的访问模型、版本路径与延迟;界面为英文
Address-owned(地址独占):只有该地址能用,走快路径;发送方在对象引用里自己写版本。典型:你钱包里的 Coin<SUI>、个人 NFT。
Shared(共享):任何地址都能在交易里引用,权限要靠 Move 代码自己检查;必须经共识排序,热门共享对象会有争用。典型:DEX 资金池、订单簿、系统时钟 0x6。
Immutable(不可变):谁都能读、没人能改,已发布的 Move 包就是这类。
Wrapped / 对象持有:被包进另一个对象里,只能通过父对象访问;浏览器里常显示所有者是另一个对象 ID(GraphQL 里是 ObjectOwner)。
Party(ConsensusAddressOwner):归单个地址所有,但通过共识排序,便于同一对象有多笔交易同时在途。

文档没有给出固定的确认毫秒数,只写快路径延迟「最低」、共识「更高」;具体速度会随网络负载变化,本文不写数字。想对比另一条高性能链的思路,可看 Solana 的账户模型与本地费用市场。

版本号怎么涨:Lamport 时间戳规则

docs.sui.io · Object Versioning 给出了规则:一笔交易会把它触碰到的所有对象的新版本统一设为 1 + max(所有输入对象的版本)。官方例子:对象 O 在版本 5、Gas 对象 G 在版本 3,交易后两者都变成 6。这样 (ID, version) 永远不会被复用。

在浏览器里验证:打开 Suiscan 上的一笔主网交易 HQWvwSZNjd…,切到 Changes 标签。这是一笔预言机喂价交易(我们只看结构,与价格无关),5 个被修改对象的 Version 全都是 1035938840。

Sui 对象模型是什么:对象 ID、版本号与所有权在浏览器怎么核对-程序旅途
图3:suiscan.xyz 交易页 Changes:5 个 Updated 对象版本均为 1035938840;共享对象显示 shared(初始共享版本);界面为英文

用官方 GraphQL 查同一笔交易的 objectChanges,输入版本分别是 1035938839(3 个对象)和 1035938740(2 个对象),1 + max = 1035938840,和浏览器显示一致。截图里还能看到:

  • Current Owner 是地址(0x9df9…)的,是发送方独占的 Gas 币和权限凭证(Cap);
  • 显示为 shared(665650775) 的是共享对象,括号里是它第一次被共享时的版本(initialSharedVersion),之后不再变;
  • 所有者是另一个 0x 对象 ID 的,是挂在父对象下的子对象(动态字段等)。

同一页 Overview 里还能看到本笔 Total Gas Fee 为 0.000247288 SUI(247,288 MIST)、Gas Budget 0.05 SUI——这只是这一笔的截图读数,费用会随交易内容和网络 Gas 价格变化。

看一个共享对象:系统时钟 0x6

打开 Suiscan · Object 0x6。这是 Sui 系统内置的 Clock 对象:标签为 Shared,Type 是 0x2::clock::Clock,Version 是一个很大的数字;下方 Tx Blocks 列表全是 Sui System account 发出的 ConsensusCommitPrologueV4——共识每次提交都会更新时钟,所以它的版本几乎每秒都在涨。

Sui 对象模型是什么:对象 ID、版本号与所有权在浏览器怎么核对-程序旅途
图4:suiscan.xyz 对象 0x6:Shared 标签、Version、Type、Last Tx Block ID 与系统交易列表;界面为英文,版本号随时变化

说明:同类浏览器 SuiVision(suivision.xyz)在我们截图环境里弹出了人机验证页,所以本文统一用 Suiscan;你本机用 SuiVision 查同一个对象 ID,字段含义相同。

不靠浏览器:用官方 GraphQL 自己查

想脱离第三方浏览器核对,可以直接问节点。注意截至本文运行时(2026-10-05)的现状:向公共全节点 fullnode.mainnet.sui.io 发 JSON-RPC 的 sui_getObject,现在会返回 -32601,提示公共全节点的 JSON-RPC 已弃用,请迁移到 gRPC 或 GraphQL(见 官方迁移说明)。下面脚本改用 GraphQL 端点,只读、不需要私钥:

#!/usr/bin/env bash
# 只读查询 Sui 主网对象:Clock(0x6),不需要私钥
G=https://graphql.mainnet.sui.io/graphql
Q='{"query":"{ object(address: \"0x6\") { address version digest owner { __typename ... on Shared { initialSharedVersion } } } }"}'
for i in 1 2; do
  curl -s "$G" -H 'Content-Type: application/json' -d "$Q" | jq -c '.data.object | {version, digest, owner}'
  sleep 3
done

再写一个 owner.sh,把对象地址换成参数、多查 AddressOwner 的地址与 Move 类型。下图为本机真实运行输出:

Sui 对象模型是什么:对象 ID、版本号与所有权在浏览器怎么核对-程序旅途
图5:本机运行输出:公共全节点 JSON-RPC 返回 -32601;GraphQL 两次查询 0x6 版本从 979631848 涨到 979631898;Gas 币为 AddressOwner;0x2 包为 Immutable

三点可以自己验证:同一个 Clock 对象相隔约 3 秒查两次,version 和 digest 都变了(共享对象被系统交易持续修改);上一节交易里的 Gas 币 owner.__typename 是 AddressOwner,类型 0x2::coin::Coin<0x2::sui::SUI>——SUI 余额本身就是一个个 Coin 对象;框架包 0x2 是 Immutable。

自查清单

  1. 拿到对象 ID 后先看 owner:地址独占、Shared、Immutable 还是挂在另一个对象下。
  2. 看 Version 与 Last Tx:版本只增不减;想看历史状态要用 (ID, version)。
  3. 交易页 Changes:被修改对象新版本应等于 1 + 输入版本最大值。
  4. Shared 对象括号里的数字是初始共享版本,不是当前版本。
  5. 程序化核对用 GraphQL / gRPC,不要再依赖公共全节点 JSON-RPC。

想自己在 Sui 上转账或交互:钱包可以用 欧易 Web3 钱包(是否支持 Sui 以 App 网络列表为准,创建时可填推荐码 CHENGXULVTU);Gas 要用 SUI 付,可在 币安 或 欧易 准备少量 SUI,提现时网络选 Sui(以提现页显示为准),并先小额测试。

相关阅读

说明:文中版本号、Gas 读数均为 2026-10-05 截图/运行时的链上状态,会持续变化;机制以 docs.sui.io 官方文档为准。本文只讲技术原理与核对方法,不构成任何投资建议。