【发布时间】:2021-10-14 09:23:27
【问题描述】:
我知道 Solana 没有 HashMap 数据结构作为设计模式。
这是否意味着开发人员应该为每个用户或权益池使用程序派生地址 (PDA),而不是创建用户数组/向量或权益池来存储数据?
【问题讨论】:
-
在 Solana 中,程序无法存储状态。只有帐户可以存储状态。如果您希望为您的程序存储某种状态,最好使用 PDA,这是一个只有程序才能控制的帐户。
我知道 Solana 没有 HashMap 数据结构作为设计模式。
这是否意味着开发人员应该为每个用户或权益池使用程序派生地址 (PDA),而不是创建用户数组/向量或权益池来存储数据?
【问题讨论】:
这个问题有点主观,因为它是在询问如何使用 Solana 处理在链上存储大量信息的意见。两种选择都是可能的:您可以在一个帐户中存储链上的向量/数组,或者您可以使用程序派生地址作为一种链上 HashMap。这是一个权衡。
如果您将向量存储在帐户中,您会受到一开始分配的大小的限制,但存储一定数量的值可能会更快、更便宜。
如果您需要存储大量数据并且您有一个很好的模型来生成密钥,那么在程序派生地址创建帐户可能是一个不错的选择。您需要为每个帐户支付租金,因此如果您不在每个帐户中存储大量数据,可能会很昂贵。您可以使用solana rent <ACCOUNT_SIZE> 估算这两种方法的成本。
【讨论】:
您可以在此处阅读官方示例中的代码。 https://github.com/solana-labs/solana-program-library/blob/master/token-lending/program/src/state/obligation.rs 他们如何打包和解包向量是第 331 行。
【讨论】: