Solana Tech Roundup
This past week there was a consensus failure due to a non-deterministic bug with durable nonce transactions. You can read the full post-mortem here. Durable nonce transactions were temporarily disabled until the bug has been patched. The clock drift issue from the past week was patched with a feature activation this past Friday. Currently the on-chain time and UTC time are close to matching. If you're ever interested in new features being created, be sure to check out the feature-gate issues.
Proposal Highlight
Durable Nonce Transactions
What are Durable Nonce transactions?
Every transaction on Solana requires a recent blockhash in order to be processed. Blockhashes expire after 151 blocks at the time of writing. Some signers, such as offline or custodial wallets, will not be able to sign transactions fast enough to produce a transaction with a valid recent blockhash. To solve this problem, you can use durable nonces.
Durable nonces enable transactions that do not expire. A wallet can create a nonce account which stores a recent blockhash to be used with transactions. When creating your transaction, you specify your nonce account to be used instead of a state recent blockhash. The transaction will then advance the nonce to a valid recent blockhash to use in the transaction.
A full example usage of durable nonce transactions can be found on the Solana Cookbook.
Commit Highlights
-
Increase timestamp bounding to up to 150% PoH
- This feature is aimed at fixing the clock drift issue by increasing the amount a the clock can move each slot. The sweet spot for keeping clock inline with UTC is now ~1s/slot
-
- Durable Nonces were temporarily disabled to give time to patch the consensus-breaking bug. They are planned to be re-enabled with a feature gate once the patch is live.
List of Changes
May 27
- Add group-by RocksDB metrics
- Shrink packet batches to increase GPU sigverify performance
- Bump executor cache max entries
- We have more programs than the cache has entries, so there is a material amount of time spent evicting and excessive JiT recompiles.
May 30
- Web3.js: Optimize sorting so transactions take less time and memory
- Detect tracer key for ping metrics
May 31
- Ignore RocksDB directories when unpacking genesis archive
- Added account scan state to make scanning accounts more performant
- Increase timestamp bounding to up to 150% PoH
- This feature is aimed at fixing the clock drift issue by increasing the amount a the clock can move each slot. The sweet spot for keeping clock inline with UTC is now ~1s/slot
June 1
- Add filter to appendVecScan to make scanning accounts faster
- Remove Durable Nonces
- Add "fake" async TPU client
- To aid in the migration to a new async TPU client, we first creating a "fake" async client that uses the sync version under the hood.
- Track residual data shreds that do not make the whole batch
- Throw error if stake is below the delegation minimum
June 2