【问题标题】:How do Solana Rust smart contracts handle arrays and vectors?Solana Rust 智能合约如何处理数组和向量?
【发布时间】:2021-10-14 09:23:27
【问题描述】:

我知道 Solana 没有 HashMap 数据结构作为设计模式。

这是否意味着开发人员应该为每个用户或权益池使用程序派生地址 (PDA),而不是创建用户数组/向量或权益池来存储数据?

【问题讨论】:

  • 在 Solana 中,程序无法存储状态。只有帐户可以存储状态。如果您希望为您的程序存储某种状态,最好使用 PDA,这是一个只有程序才能控制的帐户。

标签: arrays vector rust solana


【解决方案1】:

这个问题有点主观,因为它是在询​​问如何使用 Solana 处理在链上存储大量信息的意见。两种选择都是可能的:您可以在一个帐户中存储链上的向量/数组,或者您可以使用程序派生地址作为一种链上 HashMap。这是一个权衡。

如果您将向量存储在帐户中,您会受到一开始分配的大小的限制,但存储一定数量的值可能会更快、更便宜。

如果您需要存储大量数据并且您有一个很好的模型来生成密钥,那么在程序派生地址创建帐户可能是一个不错的选择。您需要为每个帐户支付租金,因此如果您不在每个帐户中存储大量数据,可能会很昂贵。您可以使用solana rent <ACCOUNT_SIZE> 估算这两种方法的成本。

【讨论】:

    【解决方案2】:

    您可以在此处阅读官方示例中的代码。 https://github.com/solana-labs/solana-program-library/blob/master/token-lending/program/src/state/obligation.rs 他们如何打包和解包向量是第 331 行。

    【讨论】:

      猜你喜欢
      • 2021-12-28
      • 2021-10-14
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 2022-08-04
      • 1970-01-01
      • 2023-01-15
      • 2022-06-16
      相关资源
      最近更新 更多