如何获取对象数据
受众: 正在实现首个 Sui 读取操作的开发者。
**目标:**编写一个 Node.js 脚本,用于从 Sui devnet 检索并查看原始对象数据。
概述
在本教程中,我们将使用 SuiClient 执行 读取操作,向 Sui devnet 查询特定的 非同质化代币 (NFT) 对象,以查看其链上属性。
构建内容: 一个轻量级的 Node.js 脚本,用于连接网络、通过 ID 请求对象,并输出 JSON 响应。
先决条件
- Node.js: v18.0.0 或更高版本。
- 包管理器:
npm或yarn。 - 终端: 具备基本的命令行操作技能。
步骤 1:项目设置
-
创建并进入新目录:
mkdir sui-data-fetcher && cd sui-data-fetcher -
初始化 Node 项目并配置为 ES 模块:
npm init -ynpm pkg set type="module" -
安装 Sui TypeScript SDK:
npm install @mysten/sui
步骤 2:初始化客户端
创建一个名为 index.js 的文件。首先导入客户端并将其连接到 devnet。
import { SuiClient, getFullnodeUrl } from '@mysten/sui/client';
// 配置
const NETWORK = 'devnet';
// 1. 初始化客户端
// getFullnodeUrl 会自动解析 'devnet' 的正确 RPC 端点
const client = new SuiClient({
url: getFullnodeUrl(NETWORK),
});
console.log(`✅ 已连接到 Sui ${NETWORK}`);
步骤 3:编写查询逻辑
查询一个已知的 "devnet 非同质化代币 (NFT)" 对象。
备注
在
devnet上,网络重置期间对象常会被删除。如果下面的 ID 无法使用,您可能需要从 Sui Explorer 查找一个新的对象 ID。
将以下代码添加到 index.js 中:
// devnet 上的已知对象 ID(示例 NFT)
const TARGET_OBJECT_ID = '0x7d6539b7a423b035109b823e20c641c73defd23b8f3107b38d1d368688c2797c';
async function fetchObjectData() {
try {
console.log(`🔍 查询对象:${TARGET_OBJECT_ID}...`);
// 2. 执行数据获取
const response = await client.getObject({
id: TARGET_OBJECT_ID,
// "options" 决定节点返回的数据量。
// 我们仅请求内容(字段),以保持数据包大小较小。
options: {
showContent: true,
showType: true
}
});
// 3. 处理响应
if (response.error) {
throw new Error(`对象未找到:${response.error.code}`);
}
console.log('--- 对象数据 ---');
console.dir(response.data, { depth: null, colors: true });
} catch (err) {
console.error('❌ 查询失败:', err.message);
}
}
fetchObjectData();
第 4 步:运行与验证
在终端中运行脚本:
node index.js
理解输出结果
您应该会看到如下所示的 JSON 结构:
{
"objectId": "0x7d...",
"version": "120",
"digest": "AuF...",
"type": "0x2::devnet_nft::DevNetNFT",
"content": {
"dataType": "moveObject",
"fields": {
"name": "Sui DevNet NFT",
"description": "由 Sui DevNet 创建的 NFT",
"url": "ipfs://..."
}
}
}
digest:用于验证对象版本的哈希值。type:具体的 Move 语言类型定义(Package::Module::Type)。content.fields:存储在链上的实际数据(例如 NFT 的名称 and 地址)。
后续步骤
您已成功获取原始数据,但您可能注意到了代码中的 options 参数。要准确了解您可以请求哪些数据,请查阅 API 参考文档。