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:
Added --enable-scheduler-bindings which binds an IPC server at <ledger-path>/scheduler_bindings.ipc for external schedulers to connect to.
Using mmap for --accounts-db-access-storages-method is now deprecated.
A signature verification failure in simulateTransaction() or the preflight stage of sendTransaction() will now be attached to the simulation result's err property as TransactionError::SignatureFailure instead of being thrown as a JSON RPC API error (-32003). Applications that already guard against JSON RPC exceptions should expect signature verification errors to appear on the simulation result instead. Applications that already handle the materialization of TransactionErrors on simulation results can now expect to receive errors of type TransactionError::SignatureFailure at those verification sites.
The getProgramAccounts RPC endpoint now returns JSON-RPC errors when malformed filters are provided (previously these malformed filters would be silently ignored and the RPC call would execute an unfiltered query).
PubsubClient can now be constructed with the URI of an RPC (as a str, String, or Uri) as well as an http::Request<()>. The addition of Request allows you to set request headers when establishing a websocket connection with an RPC.
The --monitor flag with agave-validator exit is now deprecated. Operators can use the monitor command after exit instead.
The --disable-accounts-disk-index flag is now deprecated.
slot property to EpochRewardsPeriodActiveErrorDataslot property to RpcCustomError::SlotNotEpochBoundaryPING opcodes take priority over notifications.CAP_NET_RAW, CAP_NET_ADMIN, CAP_BPF, and CAP_PERFMON capabilities. These can be configured in the systemd service file by setting CapabilityBoundingSet=CAP_NET_RAW CAP_NET_ADMIN CAP_BPF CAP_PERFMON under the [Service] section or directly on the binary with the command sudo setcap cap_net_raw,cap_net_admin,cap_bpf,cap_perfmon=p <path/to/agave-validator> (this command must be run each time the binary is replaced)memlock limits - recommended setting is LimitMEMLOCK=2000000000 in systemd service configuration. Lack of sufficient limit (on Linux) will cause startup error.--accounts-index-memory-limit-mb--accountsdb-repl-bind-address, --accountsdb-repl-port, --accountsdb-repl-threads, --enable-accountsdb-repl--disable-quic-servers, --enable-quic-servers--etcd-cacert-file, --etcd-cert-file, --etcd-domain-name, --etcd-endpoint, --etcd-key-file, --tower-storage--no-check-vote-account--no-rocksdb-compaction, --rocksdb-compaction-interval-slots, --rocksdb-max-compaction-jitter-slots--replay-slots-concurrently--replay-forks-threads with a value of 4 to match preexisting behavior--rpc-pubsub-max-connections, --rpc-pubsub-max-fragment-size, --rpc-pubsub-max-in-buffer-capacity, --rpc-pubsub-max-out-buffer-capacity, --enable-cpi-and-log-storage, --minimal-rpc-api--skip-poh-verify--snapshot-interval-slots 0 to disable generating snapshots has been removed. Use --no-snapshots instead.--dynamic-port-range, including the client ports. A range of at least 25 ports is recommended to avoid failures to bind during startup.--transaction-structure view is now the default.SOLANA_BANKING_THREADS environment variable is no longer supported. Use --block-prouduction-num-workers instead.agave-validator exit will now wait for the validator process to terminate before returning. The --wait-for-exit flag has been deprecated, but operators can still opt out with the new --no-wait-for-exit flag.TimedTracedEvent changed, since PacketBatch became an enum, which carries different packet batch types. (#5646)--no-snapshots to disable generating snapshots.--block-production-method central-scheduler-greedy is now the default.agave-validtor exit) is required in order to boot from local state. Refer to the help of --use-snapshot-archives-at-startup for more information about booting from local state.--snapshot-interval-slots 0 to disable generating snapshots is now deprecated.blockstore-processor for --block-verification-method is now deprecated.cargo-build-sbf and cargo-test-sbf now accept v0, v1, v2 and v3 for the --arch argument. These parameters specify the SBPF version to build for.cargo-build-sbf now supports the --optimize-size argument, which reduces program size, potentially at the cost of increased CU usage.sbf-solana-solana target, the new cargo-build-sbf version target defaults to sbpf-solana-solana. The generated programs will be available on target/deploy and target/sbpf-solana-solana/release.sbf-solana-solana target folder is still necessary, use cargo +solana build --triple sbf-solana-solana --release.sbpfv1-solana-solana for version v1, sbpfv2-solana-solana for v2, and sbpfv3-solana-solana for v3. Generated programs are available on both the target/deploy folder and the target/<triple>/release folder. The binary in target/deploy has smaller size, since we strip unnecessary sections from the one available in target/<triple>/release.cargo-build-sbf no longer automatically enables the program feature to the solana-sdk dependency. This feature allowed solana-sdk to work in on-chain programs. Users must enable the program feature explicitly or use solana-program instead. This new behavior only breaks programs using solana-sdk v1.3 and earlier.withdraw-stake now accepts the AVAILABLE keyword for the amount, allowing withdrawal of unstaked lamports (#4483)solana-test-validator will now bind to localhost (127.0.0.1) by default rather than all interfaces to improve security. Provide --bind-address 0.0.0.0 to bind to all interfaces to restore the previous default behavior.simulateTransaction now includes loadedAccountsDataSize in its result. loadedAccountsDataSize is the total number of bytes loaded for all accounts in the simulated transaction.--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.solana feature revoke for revoking pending feature activations. When a feature is activated, solana feature revoke <feature-keypair> <cluster> can be used to deallocate and reassign the account to the System program, undoing the operation. This can only be done before the feature becomes active.--block-production-method for central-scheduler-greedy. This is a simplified scheduler that has much better performance than the more strict central-scheduler variant.--accounts-db-access-storages-method for agave-validator and agave-ledger-tool and change default to filebanking-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)--snapshot-zstd-compression-level to set the compression level when archiving snapshots with zstd.--tower-storage and all --etcd-* argumentscargo-build-sbf: add --skip-tools-install flag to avoid downloading platform tools and --no-rustup-override flag to not use rustup when invoking cargo. Useful for immutable environments like Nix.cargo-build-bpf and cargo-test-bpf have been deprecated for two years and have now been definitely removed.
Use cargo-build-sbf and cargo-test-sbf instead.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.redelegate instruction processor and CLI commands (#2213)&self instead of &mut self (#2591)agave-validator:fifo for --rocksdb-shred-compaction (#3451)Changes
respan macro. This was marked as "internal use only" and was no longer used internally.entrypoint_no_alloc!, a more performant program entrypoint that avoids allocations, saving 20-30 CUs per unique accountcargo-build-sbf: a workspace or package-level Cargo.toml may specify tools-version for overriding the default platform tools version when building on-chain programs. For example:
[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 using solana-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)
Copy is no longer derived on Rent and EpochSchedule, please switch to using clone() (solana-labs#32767)solana-sdk: deprecated symbols removedsolana-program: deprecated symbols removedRpcClient and RpcClient::nonblockingsolana-client: deprecated re-exports removed; please import solana-connection-cache, solana-quic-client, or solana-udp-client directlyagave-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)central-scheduler as default option for --block-production-method (#34891)solana-rpc-client-api: RpcFilterError depends on base64 version 0.22, so users may need to upgrade to base64 version 0.22--health-check-slot-distance from 150 to 128--with-compute-unit-price, --max-sign-attempts, and --use-rpc during program deploymentsimulateTransaction now returns an extra replacementBlockhash field in the response
when the replaceRecentBlockhash config param is true (#380)cargo test-sbf accepts --tools-version, just like build-sbf (#1359)--full-snapshot-archive-path (#1631)amountToUiAmount instruction parses the amount into a string instead of a number (#1737)epoch_rewards_status removed from snapshot (#1274)unified-scheduler option for --block-verification-method (#1668)fifo option for --rocksdb-shred-compaction (#1882)fifo will remain supported in v2.0 with plans to fully remove in v2.1changelog label--use-snapshot-archives-at-startup is now when-newest (#33883)solana-ledger-tool, however, remains always (#34228)central-scheduler option for --block-production-method (#33890)getSignaturesForAddress always returns signatures in block-inclusion ordersimulateTransaction now returns innerInstructions as json/jsonParsed (#34313).entries table--signer CLI flag, forcing users to specify multiple occurrences of --signer, one for each signaturesolana program extend
before an upgrade if they need to accommodate larger programs.gossip_service::get_client() has changed. gossip_service::get_multi_client() has been removed.--with-compute-unit-price, --max-sign-attempts, and --use-rpc during program deploymentsolana-program and solana-sdk default to support for Borsh v1, with
limited backward compatibility for v0.10 and v0.9. Please upgrade to Borsh v1.entries
table before upgrading their warehouse nodes--use-snapshot-archives-at-startup for faster validator restartsvx.y+1.0 - UnreleasedUnreleased annotation from vx.y.0 section.vx.y updating the changelog:
vx.y+1.0 - Unreleased section