1

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

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

4

2 回答 2

3

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

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

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

于 2021-08-11T03:16:54.073 回答
0

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

于 2021-09-14T13:52:34.937 回答