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.
Proposal highlight:
Transactions v2 - On-chain Address Lookup Tables
Due to transaction size limitations, you are currently limited to a max of 35 accounts(max of 19 signatures) used in a single transaction. Developers wanting to compose with many programs may run into this cap and be limited in what they can build. On-chain address lookup tables can enable a transaction to load more accounts, granting access for developers to compose more with many programs at once.
Pros:
- Using lookup tables will enable you to access up to 256 accounts per transaction
- Tables can be deactivated at any time
Cons:
- Cost for transactions using a lookup table with increase
- Transactions must now be versioned
New Repositories:
⛽ Octane ⛽
Octane is a gasless transaction relayer for Solana. The idea is that people can use an Octane relayer to either get a free transaction or a transaction paid by a token other than SOL. Octane is currently untested.
💳 Solana Pay 💳
Solana Pay is a standard schema for payment across wallets. This will enable a standard format for creating QR codes for:
- Requesting payment
- Adding a memo to a payment
- Adding a label to a payment
- Requesting payment of amount in SOL or SPL-token
🤐 SPL-ZK-Token 🤐
SPL-ZK-Token is a token program companion to the current SPL Token Program to enable confidential transfers of tokens.
Commit Highlights:
- 🎉 Full M1 Support on local test validators 🎉
- Max accounts locked by a single transaction changed to 64 accounts
- Creating accounts must be rent exempt
- Max compute units a block can have for votes is now ~75%
Full list of changes:
January 3
-
Verifying authorized voters earlier so there is less maintenance of authorization
-
Compute units and microseconds could be skewed by errors. Bug fixed
-
Community Contribution! Adding encoding to getMultipleAccounts
January 4
-
- Checks the earliest missing leader block for propagation instead of the most recent
-
Lowered vote only mode to 400 slots
- This helps with consensus and keeping the cluster in check
-
Using AccountsDataMeter to manage account reallocation size limits
-
Improving type safety and readability of transaction execution
January 5
-
Community Contribution! Fixing race conditions in RPC subscriptions
-
- LTO can help optimize crates
-
Update accountsDB to only sum non-zero lamport accounts when finding data length
- Non-zero lamport accounts just haven’t been cleaned up yet
January 6
-
Cache executors on failed transactions
- This will help performance when there are a lot of failed transactions in a row
-
Compare blocks with the ledger tool
- With this change you can use the ledger tool to find any missing blocks in your personal Bigtable
January 7
January 8
January 9
-
Local test added to spot slot hash expiry bug
- Test that verifies that even if votes are taking too long to land and some of the referenced slot are slots no longer present in the slot hashes sysvar, consensus will still be attained
January 10
January 11
- Community Contribution! Add getFeeForMessage RPC call to web3.js
- Massive refactor to use crossbeam_channel
- Optimizing ReadOnlyAccountsCache LRU Eviction on AccountsDB
- All accounts are now required to be rent exempt
- Handle account data size change due to rent collected accounts
January 12
-
Store deserialized sysvars in cache
- Deserializing these can be slow, and they’re accessed often. Let’s cache them!
January 13
January 14
January 15
-
Vote account withdrawal authority may change authorized voter
- A vote account’s authorized voter may only be changed by the existing authorized voter. To prevent a compromised voter key killing a validator, the vote account withdrawal authority is now permitted to change the authorized voter
January 16
January 17
-
Using VecDeque instead of Vec in sigverify stage
- Vec has a bad remove(0) performance, and is called a lot when discarding a lot of excess packets(often duplicate signatures). Updating to VecDeque shows a 40x improvement benching on a single sender when discarding the excess packets
January 18
January 19
-
Community Contribution! Adding packets for packet_indexes stat
-
Add total data shred size and total coding shred size metrics to blockstore api