高级

存储和索引NFT数据

概述中所述,每当创建或修改压缩NFT(cNFT)时,相应的交易会记录在分类账上,但cNFT状态数据不存储在账户空间中。这是cNFT大幅节省成本的原因,但为了方便和可用性,cNFT状态数据由RPC提供商索引,并可通过Metaplex DAS API获取。

Metaplex创建了DAS API的参考实现,一些RPC提供商使用部分或全部此代码用于其特定实现,而其他RPC提供商则编写了自己的实现。请参阅"Metaplex DAS API RPC"页面获取支持Metaplex DAS API的其他RPC提供商列表。

Metaplex DAS API参考实现包括以下关键项:

  • Solana无投票验证节点 - 此验证节点配置为仅对共识下的验证节点分类账和账户数据有安全访问权限。
  • Geyser插件 - 该插件称为"Plerkle",在验证节点上运行。每当有账户更新、slot状态更新、交易或区块元数据更新时,该插件都会收到通知。对于cNFT索引的目的,当在验证节点上看到Bubblegum或spl-account-compression交易时,插件的notify_transaction方法用于提供交易数据。实际上,这些交易来自spl-noop("无操作")程序,spl-account-compression和Bubblegum使用它来避免日志截断,将事件转换为spl-noop指令数据。
  • Redis集群 - Redis流用作每种更新类型(账户、交易等)的队列。Geyser插件是这些流数据的生产者。Geyser插件将数据转换为Plerkle序列化格式(使用Flatbuffers协议),然后将序列化记录放入适当的Redis数据流。
  • 摄取进程 - 这是Redis流数据的消费者。摄取器解析序列化数据,然后将其转换为存储在Postgres数据库中的SeaORM数据对象。
  • Postgres数据库 - 有几个数据库表来表示资产,以及一个更改日志表来存储它看到的默克尔树状态。后者在请求与Bubblegum指令一起使用的资产证明时使用。默克尔树更改的序列号也用于使DAS API能够无序处理交易。
  • API进程 - 当最终用户从RPC提供商请求资产数据时,API进程可以从数据库检索资产数据并为请求提供服务。