Solana Tech Roundup
If you're a Solana developer like me, you may find it difficult to keep up with the latest updates to the Solana repository. This is because the Solana repository is a large and complex project with many contributors constantly adding new features and bug fixes. There's just so much content to read and digest.
This week's roundup is a summary of the most recent commits to the Solana repository.
Optimize RocksDB Compaction for Solana BlockStore
Solana uses RocksDB as the underlying storage for its blockstore. To make reads more performant over time, RocksDB reduces the number of compaction in the background, which increases write and space.
Today blockstore stores shred data, metadata, accounts and transactional data in RocksDB. Each type of data has different usage, but the same compaction throughout.
The proposal is to change the compaction config for each type of data, lowering the amount I/Os costing the RocksDB. Initial testing shows that these new compaction methods will increase insertions 2.25x faster than the current solution.
With this change, the max compute cost for a transaction has been upgraded from 200k to 1.4m CU. Fees are changes to be based on each signature and amount of compute.
List of Changes:
- All precompiles are now owned by the loader
- Replacing KeyedAccount with BorrowedAccount
- Add some seed options for resolving programIds
- Add rustfmt and cargo fmt
- This enforces a format on the Rust code, and help keep a similar format throughout
- Fix memory ordering in append_vec
- AppendVec is not thread-safe when memory ordering. This commit eliminates race conditions that may occur.
- Allow accounts to be null in simulateTransaction
- Do not keep oldest full snapshot
- This helps with space management
- Add parsing support for mango instruction to explorer
- Allows certain mango-markets instructions to be displayed correctly on the explorer
- Refactored to use minimum_stake_delegation constant throughout
- Test solana-client on android/ios during CI
- Update compute units costs for syscalls
- sha increased from 1328CU -> 1895CU and solana_bpf_rust_sha 26467CU -> 27033CU
- Use Tokio RwLock instead of std in RPC Client
- This change allows people to use the nonblocking RPC client in a multi-threaded context
- Refactor update_index to use ReadableAccount
- Add --disable_accounts_disk_index for local-test-validator