Solana Tech Roundup
This past week there was a discussion between Austin Federa and Anatoly about upcoming changes to Solana. Featured were QUIC, User specified fee priority, increased fees on writable accounts, and stake weighted connections. You can check out the discussion here.
Fee Transaction Priority
Ordering transactions by fees spent has been a controversial topic recently. This proposal outlines how the transactions are ordered, namely:
- Transactions are prioritized based on fee per compute unit
- If a lower fee paying transaction requires write locks to an account of a higher fee paying transaction, the lower fee paying transaction will not be scheduled
The scheduler will happen after the sigverify stage but before the banking stage.
You can now directly link instructions on the explorer to help debug transactions!
Compute units are defaulted each to 200k per instruction unless a compute budget increase instruction exists on the transaction. Compute budget increase instruction must be one of the first three instructions in order to work successfully.
List of Changes
- Avoiding holding lock guards in matching expressions
- Removes getting the read lock on the bank for certain RPC calls when the lock is not needed. Improves performance of RPCs
- Do not hold lock unnecessarily when hashing
- More lock fixes!
- Added Activation epoch to feature CLI
- Remove PrimaryThenSecondary and replace with secondary access for RocksDB
- You should only use primary access when absolutely necessary.
- Always retain highest incremental snapshot for all full snapshots
- Deserialize shred headers with cursor instead of manually
- Enable saving snapshots to a directory with ledger tool
- Explorer: Instruction deeplinks!
- Docs: How to install Solana CLI with Homebrew
- Perf improvement on QUIC connection cache by switching RwLock instead of Mutex
- Mutex was causing too many cache misses. RwLock improved timings by 1000x in some cases
- web3.js: You can now test mocking RPC messages with promises for values
- Limit preallocation size when deserializing shreds
- Default compute units per instruction
- Compute units per instructions are defaulted to 200k each instead of 1.4m overall to keep the transaction from overpaying for compute.
- Initialized stakes can be below minimum delegation
- Use designated thread pools for accountdb ops
- Much more efficient to use the accountdb designated thread pool so that we are not starving resources from the global thread pool
- Web3.js: BigInt support for system transfers
- Prioritize Banking Stage Packets
- This change helps set up any future prioritization based on compute units/fee
- Collect stats for all fetch stage receivers
- Reorder boolean computation to speed up processing
- This is a micro improvement that improves processing time an average of 0.3ms per slot