This is a weekly newsletter on the latest Solana engineering news this week. If you want to stay updated on Solana tech every week, follow Solana Changelog at @solana_devs and @readylayerone on X, and turn on notifications.
Releases
Notable feature gates
Mainnet
Relaxation of post-execution min_balance check
Upgrade BPF Stake Program to v5.1.0
Devnet
Testnet
New versions
- Agave v4.4.0-alpha.2, v4.3.0-beta.3, v4.2.2
- Superbank v0.6.0-rc1
- Solana Web3.js v3.0.0-rc.3, v1.99.0-beta.0
- Solana Kit v8.2.0, v8.1.0
- Address Lookup Table Program JS SDK v0.14.1
- Stake Program JS SDK v0.9.1
- System Program JS SDK v0.14.1
- Memo Program JS SDK v0.13.1
- Compute Budget Program JS SDK v0.18.1
- Token Program JS SDK v0.16.1
- Token-2022 Program JS SDK v0.16.1
- Loader V3 Program JS SDK v0.6.1
- Record Program JS SDK v0.4.1
- Program Metadata Program JS SDK v0.9.2
- ZK Elgamal Proof Program WASM JS SDK v0.5.2
- Mollusk v0.15.1
Ecosystem work
SIMDs
- A discussion was started to enable the runtime to verify bytecode on sbpfv3 when a program is being deployed or being upgraded
- WTM - The ensuing debate basically came down to whether we should configure the Solana runtime (the service in the validator responsible for running Solana programs) to check if deployed code from the new version - sbpfv3 - will work before it can be successfully deployed or upgraded. This discussion touches current issues with the Solana toolchain, the purpose of the runtime and the already ongoing work to have a better developer experience.
Validator clients (Agave, Firedancer, Mithril)
- Agave will make same-priority transactions ordered based on arrival
- WTM - The vanilla Agave client uses an internal index to order the transactions when their priority is the same. It doesn’t make sense from a market structure perspective and this change prioritizes the transaction that came first ahead of a similar priority transaction.
- Agave now disallows private or local addresses from being called by the TPU vote service, the TPU forwards service, and Votor
- WTM - The network addresses passed onto these services were too broad. This narrows the scope of what these are by eliminating private and local addresses from ever being passed. This decreases the load to whoever will consume these address collections, which potentially improves performance and maybe even security.
- A proposal was made on Agave to create a separate thread for shred recovery that is decoupled from the shred ingestion
- WTM - Decoupling recovery from shred ingestion ensures that recovery doesn’t block any shred ingestion that is taking place. This may use more compute resources, but may allow shred processing to accomplish shred ingestion faster.
- Firedancer has adopted three new RPC calls - getSlotLeader, getSlotLeaders, and getLeaderSchedule
- WTM - All three methods are part of the Solana RPC spec. Compliance with these is expected.
- Firedancer will use a class-based memory allocator for its program cache
- WTM - This is an alternative to heap-based memory allocation which is more expensive and less predictable. Changing it to a class-based allocator allows for more well-defined memory lookup, which means faster operations and better performance.
- Firedancer will make its shred ingestion pipeline similar to Agave’s WindowService and Blockstore insertion path
- WTM - Consolidating these operations into one tile avoids pushing data from one location to another. Moving data less minimizes the time and memory needed, freeing up time and memory to do more important work. This is a performance gain by elimination.
- Firedancer will support running its validator client in ARM systems
- WTM - Firedancer was already built for both ARM and x86_64 computer architectures, but used special instructions that only x86_64 could specify. This change expands the coverage by finding alternative instructions for ARM architectures.
Solana language clients (Web3.js, Solana Kit, Kit plugins, Solana SDK, Codama, Solana Go)
- Solana Web3.js is exploring more cross-compatibility with Kit by allowing signers in Kit instructions to sign transactions
- WTM. This change allows for PDA signers to sign the usual way with Web3.js instead of having to pass them the normal way from the Kit instruction signers. The API becomes much simpler.
Other interesting things
- FluxRPC forked the solana-go repository https://x.com/CloakdDev/status/2090842272703422975
- @b_migliaccio released a full video course on Solana development https://x.com/b_migliaccio/status/2095247751759982688?s=20
- @b_migliaccio releases an instruction video on the transaction lifecycle https://x.com/b_migliaccio/status/2094456121134051645?s=20
- Debate thread on the strengths and weaknesses of SGP-3 between @alessandrod and @cavemanloverboy https://x.com/alessandrod/status/2093206369956688246?s=20
- @dhkleung announces steps in Web3.js and Solana Kit interoperability, namely, Codama client generation https://x.com/dhkleung/status/2094973723329864135?s=20
- @fd_ripatel creates a new algorithm for compressing binary data https://github.com/riptl/zle
- @r0bre breaks down the Avici hack that happened this week https://x.com/r0bre/status/2093443613933855071?s=20
- Solana successfully makes its first governance votes https://x.com/jacobvcreech/status/2093366699818897765

