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.
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.
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)
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
- Explorer: Inspect account bytes
- Don't skip rewrites when the account was written in the current slot
- Create separate get_stake_reward helper function
- 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
- 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
- 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!
- 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
- 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
- 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