Solana Tech Roundup
There's a large number of features constantly churning and being released on the Solana network, making it hard to keep track of when something will be next in line. Transactions V2, Compute calculations, fee markets, and more can now be tracked via the feature activation schedule. All features must be activated on Testnet and Devnet before making it to Mainnet-beta.
Change Highlight
Transaction Compute Calculation
Currently the compute cap for transactions is set to a default 1.4m compute units. When transactions start getting prioritized by fee/compute unit, you will have to add an instruction to lower your compute usage. There is a feature coming that will change the compute cap calculation so it is no longer defaulting to 1.4m compute units.
The Default max tx-wide compute units calculated per instruction
feature changes the transaction wide compute unit calculation to be done by instruction instead of defaulted to 1.4m. This means that for every instruction you have on the transaction, you get an additional 200k compute up to 1.4m max.
The formula for calculating your compute cap is as follows:
Compute cap = min(numInstructions * 200k, 1.4m)
Commit Highlight
You can now add a minContextSlot
to your web3.js requests to enforce that the response is post a specific slot. This is useful when tracking account changes to make sure you don't get stale account data.
List of Changes
June 24
- Explorer: Inspect account bytes
- Don't skip rewrites when the account was written in the current slot
- Create separate get_stake_reward helper function
June 25
- AuthorizeNonceAccount moved to Nonce Module
- Bypass Rayon thread-pool for small batches
- For small batches there is a large overhead.
- Increase mmap file limit to 1M
June 26
- Avoid miss to root for local slots before a hard fork
- This is a change for how slots are rooted and helped whenever there may be a restart required
- Web3.js: Fix nonce-based transactions when you use compileMessage
June 27
- Metric: Measure Gossip vote transaction processing
- QUIC: Increase QUIC stream timeout from 1ms to 100ms
- Explorer: Add support for Pyth batch update price instruction
- QUIC: Spawn for each stream
- Discard shreds in sigverify if the slot leader is the node itself
- Add user-agent to rust client
- This helps with collecting metrics on the RPC provider side
- Enable wire compression for Solana CLI and Rust client
- Less egress and stress!
- QUIC: Do not unwrap oldest IP in QUIC connection table
- Unwrapping oldest ip while it is None was causing a crash. Don't do it!
June 28
- Verify shred slot and parent in fetch stage
- Allow lookup by index on accountsDB
- Use async connection for async TPU client
- Ensure staked nodes is populated before returning length
- QUIC: Close connection before dropping connection
June 29
- Use OnceCell to cache vote-state of vote-accounts
- Provides proper matching api without a rwlock
- Web3.js: Enforce RPC has proceeded past minContextSlot for a response
- Metrics: Track Gossip loop timings
- Don't drop slotStats when retransmitting
- AccountsDB: Track number of roots added/removed since last clean
June 30
- Skip shred deserialization before retransmit
- QUIC: Use correct QUIC connection table before removing the entry
- There are multiple QUIC connection tables for unstaked and staked peers. Make sure we choose the correct one
- Web3.js: RPC errors now hold the error and code on the error object
- QUIC: Random pruning of QUIC connection from staked peers