Each month, we bring together developers working on the Solana network for a productive discussion on the latest updates and developments. This month's call will take place on Friday, January 20th at 7PM UTC. You can easily add this to your calendar by clicking on this link.
Join us to stay informed and connect with fellow members of the community.
— Jacob
Proposal highlight
SIMD-0003: Dynamic Base fees
The network lacks a way to maintain a balanced workload, leading to two potential sources of performance degradation through attacks. In a 100% heterogeneous hardware environment, uneven performance can cause overall degradation and negative impacts on block producers. Additionally, without a dynamic base fee, a faulty majority can flood the network with blocks, making it costly for non-validating nodes to verify them.
This proposal changes the base fee from being based on signatures per transaction to requested compute units per transaction, as well as adds a mechanism to dynamically adjust the base fee based on desired target load for the network
Read the full proposal here.
Commit highlight
[curve25519 syscalls] update compute costs
The initial estimate for the amount of compute units needed for the curve25519 syscalls was too low. After testing on a developer server, it was determined that the compute units required were higher than initially calculated, at 33 nanoseconds per unit. As a result, the cost estimates have been adjusted upward slightly.
Configurable hashes per tick
The PoH will generate hashes per tick from the bank for each slot, using the reset function to sync the bank and PoH. Banks will normally inherit hashes per tick from their parent, but the 'configurable hashes per tick' feature allows for forcing the child bank to DEFAULT_HASHES_PER_SECOND at epoch boundaries.
getRecentPrioritizationFees moved 1.14
A new RPC endpoint called getRecentPrioritizationFees returns all prioritization-fee data for all recent slots in the cache using the PrioritizationFeeCache API
Resource of the week
Golana
Golana is a framework that enables the creation of smart contracts using the Go programming language. It is currently in the alpha stage, meaning it is not yet feature complete. If you are a Go programmer, it is worth checking out and gives an opportunity to provide some early feedback.
Latest commits
Jan. 6
stop returning remaining # stores from mark_dirty_dead_stores
- Remove return value, simplify calling code
Refresh blockhash for retrials of failed get_fee calls (c)
- When retrying the get_fee_for_message function, ensure to update the blockhash. Without doing so, the retry process may continue to fail even after multiple attempts
ledger-tool: fix double-readlock in main
- There is a possible deadlock caused by double readlock in fn ledger-tool/src/main.rs
Jan. 7
Add rust client support for getRecentPrioritizationFees (c)
- Add RpcClient support for get_recent_prioritization_fees
extract max_size stat update for disk buckets
- refactor disk bucket max_size stat update fn
Jan. 8
Jan. 9
add solana-ledger-tool bigtable copy
- add a subcommand, copy, to solana-ledger-tool bigtable
feature: don't do rewrites in rent collection
- This PR introduces a feature flag to control when rewrites in rent collection should no longer be performed, in order to eliminate unnecessary work
Adds TX signature to TransactionContext in debug mode
- When debugging consensus failure it is often necessary to isolate the events of a single TX from the rest of all message processing
Jan. 10
Setter for node_version property
- Add a setter in order to force the RPC version and avoid a call to the get_version method
-
- Many of our RPC test fail sporadically in CI with a receiver timeout. This is caused by a race condition between completing processing of a subscription and processing some notification.
ancient append vecs enabled at -10k by default
- Enable ancient append vecs by default at -10k slots. This means we won't try to put anything into an ancient append vec until it is older than 432k + 10k slots from the max root
Don't try to deserialize WebSocket ping messages
- Ignore WebSocket message with the PING opcode. Don't worry about server – Tungstenite will handle such messages for us and respond with corresponding PONG reply
verify acct size in index can easily be recalculated
- Remove per-account size from account index. Recalculate as needed to ensure accurate size.
assert write version is increasing per slot as we read from a slot
- Trying to stop saving write_version for append vecs, as we only ever have one per slot and later data is always more recent. Assert write_version increases per pubkey.
Jan. 11
decouple geyser's write_version from append vec on snapshot load
- Always pass 0 for write_version_obsolete to geyser. This means geyser doesn't care what write_version_obsolete exists in the append vec
includes origin's stake in gossip push nodes sampling
- Gossip push samples nodes by stake. This is unnecessarily wasteful and creates too much congestion at high staked nodes if the CRDS value to be propagated is from a node with low or zero stake
[curve25519 syscalls] update compute costs (c)
- The initial compute units for the curve25519 syscalls were underestimated
Jan. 12
Configurable hashes per tick (c)
- PoH generates hashes per tick from bank using reset function. Banks usually inherit hashes from parent, but can be forced to DEFAULT_HASHES_PER_SECOND at epoch boundaries using 'configurable hashes per tick' feature