Releases
Notable feature gates
Upcoming feature gates here.
New versions
- Agave v4.3.0-alpha.3, v4.2.0-rc.1
- Firedancer Mainnet v1.1.3
- Frankendancer Mainnet v0.1007.40100, Testnet v0.1104.40200
- solana-signature v3.5.1
- Wallet Standard v1.1.6
- Stake Program Rust SDK v4.4.0
- Token 2022 Program JS SDK v0.14.1
- ZK Elgamal Proof Program WASM JS SDK v0.5.1
- Subscriptions Program Typescript SDK v0.5.0-beta.1, Rust SDK v0.5.0-beta.1
- LiteSVM v0.15.2
- Surfpool v1.5.0
Ecosystem work
SIMDs
-
A proposal to set the right account data size when modifying a Solana program has been accepted
What this means (WTM) - Modifying an existing program requires manually extending the program size before loading in the new update. This proposal makes extending that space automatic. -
A discussion on prohibiting a self-withdrawal from a Vote account was created
WTM - This is a footgun within the existing Vote program. It allows the Vote account to withdraw SOL from itself and send it back to itself. The runtime treats this as a close account operation so the data in the Vote account is erased.
Validator clients (Agave, Firedancer, Mithril)
-
Additional conformance work was done on Agave, specifically for instructions, VM syscalls, VM serialization, and VM transaction running
WTM - Fuzz testing is a form of programmatic testing that generates possible inputs to a system in order to find bugs. On Solana, not only should valid cases be the same for any validator client, but errors should also be the same bar for bar. Conformance allows for fuzz testing multiple validator client implementations in any language and from any version. -
Agave is deprecating SysvarSerialize on the solana-account crate
WTM - Several pieces of the Agave code use a trait called SysvarSerialize, when a more generic method of serializing Sysvar accounts will do. This issue tracks the effort to remove this trait and its use all over the Agave stack. -
Agave is rethinking its program reloading methodology during transaction processing
WTM - When instructions are executed in the runtime, a program cache is created before execution. All the programs among the instruction accounts are deserialized and loaded into memory. This is generally a problem because there’s a chance that the execution will fail and the program won’t get used, or that the program is only added in the instruction but not used at all. This change proposes a more incremental strategy where programs are loaded on an as-need basis. -
Leader Turbine broadcasting caching and routing table rebuild was improved on Agave
WTM - Leaders create blocks from transactions sent to them by the network and are responsible for breaking them up and sending them to validators as shreds. Solana does this through a system called Turbine, which breaks down from whom they get the shreds for the block and how the shreds are distributed across the network. This change allows a leader to more efficiently know who the peers in the network are and update its cache of that information more effectively. -
Firedancer is implementing snapshot creation
WTM - Validators may create snapshots to make it easier to rebuild a starting point from which they can start participating in consensus and processing transactions. Firedancer did not produce snapshots before this change. It and Frankendancer used the embedded Agave validator to produce them. -
Firdancer will support QUIC datagrams
WTM - Both Agave and Firedancer now will be using QUIC datagrams instead of QUIC streams in order to send Alpenglow messages. This allows for more performance and does away with the overhead required by setting up QUIC stream connections. -
Mithril is keeping updated on Agave’s conformance suite
WTM - Mithril is a new validator implementation that will soon participate in consensus written in Go. The conformance suite allows for fuzz testing across multiple client implementations. Having this suite on Mithril’s side will allow it to keep up with Agave more closely moving forward.
RPC 2.0
- Superbank is adding a request filter for suspicious requests
WTM - When creating a service that does data streaming, it’s possible to have spam requests that only add unnecessary load onto the system. This change allows Superbank to block those requests at the parameter level.
Solana language clients (Web3.js, Solana Kit, Kit plugins, Solana SDK, Codama, Solana Go)
- Kit will add new react hooks, including useAirdrop, usePayer, useIdentity, usePlanTransaction, usePlanTransactions, useSendTransaction, and useSendTransactions
WTM - These hooks allow React applications to more closely use these primitives and change application components based on state changes.
Solana Program Library (SPL) and Core BPF
- The under-development ed25519-programmatic-signer program added a nonce program implementation as their replacement for durable nonces
WTM - This change is the SPL successor to the durable nonces implementation that currently lives onchain. This is now very similar to how Vector from @blueshift works.
Solana program frameworks (Anchor, Pinocchio, Steel, Quasar)
- Anchor will support multisig authorities on its SPL token interface
WTM - It was always possible to assign a multisig address as the authority on an SPL token. This allows Anchor to give SPL tokens created by an Anchor program more flexibility in supporting this functionality.
Testing frameworks (mollusk, litesvm, surfpool)
- Surfpool added a stop command to their daemon service
WTM - Usually, a user would need to type Ctrl+C in order to stop a running Surfpool instance. When running Surfpool in detached mode, you can now run an additional command that stops the service. It’s a standard interface in daemon services.
Other ecosystem notes
Research posts, calls for talks, service releases, and developer resources rounded out the week. Several updates focused on fees, Alpenglow, Explorer improvements, and lower-level program performance work.
- With the validator governance vote for resource fees ongoing, @temporal and @cavemanloveryboy published research on the new fee proposal, including Cavey’s defense post.
- Calls for talks for Scale or Die are ongoing, with details in Jacob Creech’s post.
- @dev_jodee shared usage and progress updates on the Subscriptions Program.
- @Solplay_jonas shared improvements to Explorer.
- Helius released a filtering API for the Laserstream service.
- Jump Firedancer released a Falcon signature verification implementation.
- @OkohEbina created a tool for diving deep into a Solana program’s sBPF assembly.
- @Subhdotsol shared guidance on optimizing Solana programs by understanding the underlying assembly that runs on the validator as it is processed and replayed.
- @OkohEbina published a Devs at a Bar podcast with @cavemanloverboy.
- Anza opened the Alpenglow bug bounty.
- @vyralabshq wrote about running a small validator with relatively lower stake.
- Anza shared a post-quantum improvement to Alpenglow.
Follow along
For weekly Solana engineering updates, follow @solana_devs. You can also read last week’s issue.
