All notable changes to this project will be documented in this file.
Please follow the guidance at the bottom of this file when making changes The format is based on Keep a Changelog. This project adheres to Semantic Versioning and follows a Backwards Compatibility Policy
Release channels have their own copy of this changelog:
- Changes
- CLI:
- Add global
--skip-preflight
option for skipping preflight checks on all transactions sent through RPC. This flag, along with--use-rpc
, can improve success rate with program deployments using the public RPC nodes.
- Add global
- Unhide
--accounts-db-access-storages-method
for agave-validator and agave-ledger-tool - Remove tracer stats from banking-trace.
banking-trace
directory should be cleared when restarting on v2.2 for first time. It will not break if not cleared, but the file will be a mix of new/old format. (#4043)
- CLI:
- Breaking:
- SDK:
cargo-build-bpf
andcargo-test-bpf
have been deprecated for two years and have now been definitely removed. Usecargo-build-sbf
andcargo-test-sbf
instead.- dependency:
curve25519-dalek
upgraded to new major version 4 (#1693). This causes breakage when mixing v2.0 and v2.1 Solana crates, so be sure to use all of one or the other. Please use only crates compatible with v2.1.
- Stake:
- removed the unreleased
redelegate
instruction processor and CLI commands (#2213)
- removed the unreleased
- Banks-client:
- relax functions to use
&self
instead of&mut self
(#2591)
- relax functions to use
agave-validator
:- Remove the deprecated value of
fifo
for--rocksdb-shred-compaction
(#3451)
- Remove the deprecated value of
- SDK:
- Changes
- SDK:
- removed the
respan
macro. This was marked as "internal use only" and was no longer used internally. - add
entrypoint_no_alloc!
, a more performant program entrypoint that avoids allocations, saving 20-30 CUs per unique account cargo-build-sbf
: a workspace or package-level Cargo.toml may specifytools-version
for overriding the default platform tools version when building on-chain programs. For example:
- removed the
- SDK:
[package.metadata.solana]
tools-version = "1.43"
or
[workspace.metadata.solana]
tools-version = "1.43"
The order of precedence for the chosen tools version goes: --tools-version
argument, package version, workspace version, and finally default version.
package-metadata
: specify a program's id in Cargo.toml for easy consumption by downstream users and tools usingsolana-package-metadata
(#1806). For example:
[package.metadata.solana]
program-id = "MyProgram1111111111111111111111111111111111"
Can be consumed in the program crate:
solana_package_metadata::declare_id_with_package_metadata!("solana.program-id");
This is equivalent to writing:
solana_pubkey::declare_id!("MyProgram1111111111111111111111111111111111");
agave-validator
: Update PoH speed check to compare against current hash rate from a Bank (#2447)solana-test-validator
: Add--clone-feature-set
flag to mimic features from a target cluster (#2480)solana-genesis
: the--cluster-type
parameter now clones the feature set from the target cluster (#2587)unified-scheduler
as default option for--block-verification-method
(#2653)- warn that
thread-local-multi-iterator
option for--block-production-method
is deprecated (#3113)
- Breaking
- SDK:
- Support for Borsh v0.9 removed, please use v1 or v0.10 (#1440)
Copy
is no longer derived onRent
andEpochSchedule
, please switch to usingclone()
(solana-labs#32767)solana-sdk
: deprecated symbols removedsolana-program
: deprecated symbols removed
- RPC: obsolete and deprecated v1 endpoints are removed. These endpoints are: confirmTransaction, getSignatureStatus, getSignatureConfirmation, getTotalSupply, getConfirmedSignaturesForAddress, getConfirmedBlock, getConfirmedBlocks, getConfirmedBlocksWithLimit, getConfirmedTransaction, getConfirmedSignaturesForAddress2, getRecentBlockhash, getFees, getFeeCalculatorForBlockhash, getFeeRateGovernor, getSnapshotSlot getStakeActivation
- Deprecated methods are removed from
RpcClient
andRpcClient::nonblocking
solana-client
: deprecated re-exports removed; please importsolana-connection-cache
,solana-quic-client
, orsolana-udp-client
directly- Deprecated arguments removed from
agave-validator
:--enable-rpc-obsolete_v1_7
(#1886)--accounts-db-caching-enabled
(#2063)--accounts-db-index-hashing
(#2063)--no-accounts-db-index-hashing
(#2063)--incremental-snapshots
(#2148)--halt-on-known-validators-accounts-hash-mismatch
(#2157)
- SDK:
- Changes
central-scheduler
as default option for--block-production-method
(#34891)solana-rpc-client-api
:RpcFilterError
depends onbase64
version 0.22, so users may need to upgrade tobase64
version 0.22- Changed default value for
--health-check-slot-distance
from 150 to 128 - CLI: Can specify
--with-compute-unit-price
,--max-sign-attempts
, and--use-rpc
during program deployment - RPC's
simulateTransaction
now returns an extrareplacementBlockhash
field in the response when thereplaceRecentBlockhash
config param istrue
(#380) - SDK:
cargo test-sbf
accepts--tools-version
, just likebuild-sbf
(#1359) - CLI: Can specify
--full-snapshot-archive-path
(#1631) - transaction-status: The SPL Token
amountToUiAmount
instruction parses the amount into a string instead of a number (#1737) - Implemented partitioned epoch rewards as per SIMD-0118. Feature gate: #426. Specific changes include:
- EpochRewards sysvar expanded and made persistent (#428, #572)
- Stake Program credits now allowed during distribution (#631)
- Updated type in Bank::epoch_rewards_status (#1277)
- Partitions are recalculated on boot from snapshot (#1159)
epoch_rewards_status
removed from snapshot (#1274)
- Added
unified-scheduler
option for--block-verification-method
(#1668) - Deprecate the
fifo
option for--rocksdb-shred-compaction
(#1882)fifo
will remain supported in v2.0 with plans to fully remove in v2.1
- Changes
- Added a github check to support
changelog
label - The default for
--use-snapshot-archives-at-startup
is nowwhen-newest
(#33883)- The default for
solana-ledger-tool
, however, remainsalways
(#34228)
- The default for
- Added
central-scheduler
option for--block-production-method
(#33890) - Updated to Borsh v1
- Added allow_commission_decrease_at_any_time feature which will allow commission on a vote account to be decreased even in the second half of epochs when the commission_updates_only_allowed_in_first_half_of_epoch feature would have prevented it
- Updated local ledger storage so that the RPC endpoint
getSignaturesForAddress
always returns signatures in block-inclusion order - RPC's
simulateTransaction
now returnsinnerInstructions
asjson
/jsonParsed
(#34313). - Bigtable upload now includes entry summary data for each slot, stored in a
new
entries
table - Forbid multiple values for the
--signer
CLI flag, forcing users to specify multiple occurrences of--signer
, one for each signature - New program deployments default to the exact size of a program, instead of
double the size. Program accounts must be extended with
solana program extend
before an upgrade if they need to accommodate larger programs. - Interface for
gossip_service::get_client()
has changed.gossip_service::get_multi_client()
has been removed. - CLI: Can specify
--with-compute-unit-price
,--max-sign-attempts
, and--use-rpc
during program deployment
- Added a github check to support
- Upgrade Notes
solana-program
andsolana-sdk
default to support for Borsh v1, with limited backward compatibility for v0.10 and v0.9. Please upgrade to Borsh v1.- Operators running their own bigtable instances need to create the
entries
table before upgrading their warehouse nodes
- Changes
- Added a changelog.
- Added
--use-snapshot-archives-at-startup
for faster validator restarts
- Upgrade Notes
- Entries in this log are intended to be easily understood by contributors, consensus validator operators, rpc operators, and dapp developers.
- A change is noteworthy if it:
- Adds a feature gate, or
- Implements a SIMD, or
- Modifies a public API, or
- Changes normal validator / rpc run configurations, or
- Changes command line arguments, or
- Fixes a bug that has received public attention, or
- Significantly improves performance, or
- Is authored by an external contributor.
- Update this log in the same pull request that implements the change. If the change is spread over several pull requests update this log in the one that makes the feature code complete.
- Add notes to the [Unreleased] section in each branch that you merge to.
- Add a description of your change to the Changes section.
- Add Upgrade Notes if the change is likely to require:
- validator or rpc operators to update their configs, or
- dapp or client developers to make changes.
- Link to any relevant feature gate issues or SIMDs.
- If you add entries on multiple branches use the same wording if possible. This simplifies the process of diffing between versions of the log.
- Commit to master updating the changelog:
- Update the edge, beta, and stable links
- Create new section:
vx.y+1.0 - Unreleased
- Remove
Unreleased
annotation from vx.y.0 section.
- Create vx.y branch starting at that commit
- Tag that commit as vx.y.0
- Commit to the release branch updating the changelog:
- Remove
Unreleased
annotation fromvx.y.z
section - Add a new section at the top for
vx.y.z+1 - Unreleased
- Remove
- Tag that new commit as the new release