功能

反序列化

Last updated January 31, 2026

Core上的数字资产由一个链上账户组成,其中包含基础资产数据和插件。 这意味着如果我们想读取该数据,我们需要学习如何反序列化它。 在Javascript中,我们可以使用单个函数反序列化基础资产数据和插件。在Rust中,我们应该分别反序列化基础资产和仅需要的插件,以避免不必要的计算使用并防止堆栈溢出。

反序列化Asset

反序列化Asset账户将返回以下信息:

  • Owner:资产的所有者
  • Update Authority:资产的authority,或者如果它是收藏品的一部分则为收藏品地址
  • Name:资产名称
  • Uri:资产链下元数据的uri

反序列化Asset

const accountData = await umi.rpc.getAccount(
publicKey('11111111111111111111111111111111')
)
if (!accountData.exists) throw 'Account does not exist'
const assetV1 = deserializeAssetV1(accountData)
console.log({ assetData })

反序列化Collection

反序列化Collection账户将返回以下信息:

  • Update Authority:收藏品及其中所有资产的authority
  • Name:收藏品名称
  • Uri:收藏品链下元数据的uri
  • Num Minted:收藏品中铸造的资产数量
  • Current size:当前收藏品中的资产数量

反序列化Collection

const accountData = await umi.rpc.getAccount(
publicKey('11111111111111111111111111111111')
)
if (!accountData.exists) throw 'Account does not exist'
const collectionV1 = deserializeCollectionV1(accountData)
console.log({ assetData })

反序列化插件

如前所述,

  • 使用Javascript,我们可以将整个资产反序列化为单个变量,在本节中,我们将了解如何访问与插件相关的特定数据。
  • 使用Rust时,我们需要反序列化特定的插件数据,以避免由于账户大小而导致的堆栈违规。

反序列化插件

const assetV1 = await fetchAsset(
umi,
publicKey('11111111111111111111111111111111')
)
// 仅保存Attributes插件反序列化数据的示例
let attributes_plugin = assetV1.attributes
// 仅保存Royalties插件反序列化数据的示例
let royalties_plugin = assetV1.royalties