Search code examples
arraysvectorrustsolana

How do Solana Rust smart contracts handle arrays and vectors?


I know Solana does not have a HashMap data structure as a design pattern.

Does that mean developers should use program derived addresses (PDAs) for each user or stake pool instead of making an array/vector of users or stake pools for data storage?


Solution

  • This question is a bit subjective, since it's asking an opinion of how to handle storing lots of information on-chain with Solana. Both options are possible: you can store a vector / array on-chain in one account, or you can use program-derived addresses as a sort of on-chain HashMap. It's a tradeoff.

    If you store a vector in an account, you are limited to the size allocated at the start, but it may be quicker and cheaper to store a certain number of values.

    If you need to store a huge amount of data and you have a good model for generating keys, then creating accounts at program-derived addresses may be a good fit. You will need to pay rent for each account, so it may be expensive if you're not storing a lot of data in each account. You can use solana rent <ACCOUNT_SIZE> to estimate the costs for both approaches.