Solana Tech Roundup
This past week there have been some major changes to make it into the master branch, most notably the ability to prioritize transactions by compute price. The transaction-wide compute cap feature is scheduled to start activation on 05/23. You can both request additional fee payment on transactions and use the new compute cap in Devnet today.
Change Highlight
Dynamic Account Sizing
This past week the account realloc feature went live on mainnet-beta.
What does this mean?
You can now dynamically change your program owned account sizes when after creation. Historically the account sizes were static and only could be changed by closing and reopening. You can change the account size by calling realloc
on the accountInfo struct.
A guide and more info can be found here.
Commit Highlights
- Prioritize transactions in banking stage by compute price
- Big change that allows you to pay more for your compute to get your transaction prioritized. You can use the ComputeBudget Program to pay more for your compute.
- web3.js: Transaction Confirmation timeout fix
- Reliably confirm transactions. No more 60 second confirmation error!
List of Changes
May 13
- Speed up BigTable upload with configurable block checking
- Instead of checking if blocks are uploaded once at the start of a load, they can be check every x blocks loaded and parallelized across different loaders
- Explorer: Transaction Error details are now displayed
- Web3.js: Mark socket as closed when receiving close/error message
- Subscriptions manager will no longer slam closed sockets with requests!
- web3.js: Transaction Confirmation timeout fix
- There was a bug in web3.js where your transaction confirmation errored out based on a 60 second timeout, but could still confirm. This fix switches to use blockHeight distance and is much more reliable.
May 14
- Start ignoring the TPU port if tip - root > 400 banks in vote only mode
- This change will help stabilize the cluster against a DDoS attack by temporarily ignoring incoming traffic
- Improve hard fork messaging
- Serialize Lamports per signature in snapshots
- After a write lock is taken, check if the connection is available to avoid creating extraneous connections
- Web3.js:: Thread new blockheight expiry strategy through sendAndConfirmTransaction
May 15
- Add 2 more banking threads and lower batch size from 128 -> 64
- Prioritize transactions in banking stage by compute price
May 16
- Account index included in rent-paying account errors
- Now when you get an error for an account not being rent-exempt, you'll be able to better debug which account it was
- lz4 support for snapshot archives
- Avoid creating RpcVote struct when voteSubscribe is disabled
May 17
- BigTable speedup by 8-10x
- This speedup is due in part by multithreading upload and having more threads reading blockstore
- Add minContextSlot param to ensure consistent RPC response
- Get stake minimum delegation via RPC
- New RPC endpoint
- Support token-2022 in token-specific RPC calls
- Reduce admin RPC service thread count to 3
May 18
- Bootstrap without known validators sufficiently
- Utilize previous epoch's rent collector in expected rent collection
- Helps with collecting rent where the account's rent slot hasn't occurred in the current epoch yet.
- Added metrics to understand time spent making connections
- Fix banking stage starvation = Banking stage gets starved of new packets if it gets stuck exceeding the cost model or hitting AccountInUse errors
May 19
- Fix incorrect values emitted when updating the bank's accounts_data_len
- Connection cache moved into QuicClient to avoid holding lock on get_connection
- ledger-tool: Sort by program usage when printing summary of slots within a range
- voteSubscribe notification now includes the vote transaction Signature