This is a preliminary release of protocol 23. It contains all the protocol changes for the protocol 23 CAPs (CAP-62 to CAP-70, with the exclusion of the rejected CAP-64). This is a release candidate for the protocol 23 that will be promoted to stable provided successful protocol 23 upgrade on Testnet.
New features in protocol 23
- State archival features (https://github.com/stellar/stellar-protocol/blob/master/core/cap-0062.md and https://github.com/stellar/stellar-protocol/blob/master/core/cap-0066.md):
- Soroban live state is moved into memory
- Archived persistent entries are moved out of memory into an on-disk 'hot archive'
- State size accounting now only uses Soroban state for the rent fee purposes
InvokeHostFunction
operations now support automatic restoration of the archived entries- Only limit the disk read entries and disk read bytes per ledger, which is only affected by the Classic and restored entries
- Added support for the parallel execution of the Soroban transactions, given a new 'parallel' transaction set structure (https://github.com/stellar/stellar-protocol/blob/master/core/cap-0063.md)
- Added reusable inter-ledger cache for the Soroban Wasm modules, that significantly reduces the cost of making the cross-contract calls (https://github.com/stellar/stellar-protocol/blob/master/core/cap-0065.md)
- Support for the 'unified' events that allow for using the Soroban events for tracking any movement of the tokens on the network (https://github.com/stellar/stellar-protocol/blob/master/core/cap-0067.md):
- Core can now emit events that conform with SEP-41 (https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0041.md) from all the operations that involve value movement. This also supports backfilling the events from genesis.
- Soroban now supports the 'multiplexed' accounts (M-accounts), and Stelllar asset contract now supports 'multiplexed' transfer destinations, which allows for implementing exchange crypto-deposits of Soroban tokens.
- Added new Soroban host functions for retrieving the contract executable (https://github.com/stellar/stellar-protocol/blob/master/core/cap-0068.md) and String<->Bytes conversions (https://github.com/stellar/stellar-protocol/blob/master/core/cap-0069.md)
- Added the network configuration settings that control the Stellar Consensus Protocol timings (https://github.com/stellar/stellar-protocol/blob/master/core/cap-0070.md)
Breaking changes
- After the upgrade to Protocol 23 Core will emit ledger metadata in LedgerCloseMetaV2 format (https://github.com/stellar/stellar-xdr/blob/4b7a2ef7931ab2ca2499be68d849f38190b443ca/Stellar-ledger.x#L642C8-L642C25). The main difference from the previous version is the new format for the transaction metadata: TransactionResultMetaV1 (https://github.com/stellar/stellar-xdr/blob/4b7a2ef7931ab2ca2499be68d849f38190b443ca/Stellar-ledger.x#L561), which has the postTxApplyFeeProcessing field for representing the fee processing that happens after all transactions have been applied. Otherwise the new metadata format has the same structure and field names as the old one (i.e. as LedgerCloseMetaV1).
- V23.0.0 drops support for the following deprecated flags:
- DEPRECATED_SQL_LEDGER_STATE
- EXPERIMENTAL_BUCKETLIST_DB
- EXPERIMENTAL_BACKGROUND_OVERLAY_PROCESSING
Summary of the breaking changes introduced in the minor releases since the v22.0.0 release:
- [v22.2.0] BucketListDB is mandatory in this release so the config flag DEPRECATED_SQL_LEDGER_STATE will be ignored. This means the following SQL tables will be unconditionally dropped:
- ACCOUNT
- TRUSTLINE
- DATA
- CLAIMABLE_BALANCE
- LIQUIDITY_POOL
- CONTRACT_DATA
- CONTRACT_CODE
- CONFIG_SETTING
- TTL
- TXSETHISTORY
- TXHISTORY
- [v22.1.0] publish: build checkpoint files during ledger close by @marta-lokhova in #4446. Drop support for txhistory, txsethistory and upgradehistory SQL tables. Drop --force-back option from run command.
Generated changes summary since the last stable release (22.4.1):
- Fixed loadgen bug for soroban upgrades by @SirTyson in #4679
- Bump XDR/p23 env to pick up CAP-67 changes. by @dmkozh in #4676
- CAP-67 part 1 - new unified events framework by @jayz22 in #4672
- Emit most classic events by @sisuresh in #4685
- Remove from_muxed_id and allow memo/muxed info in mint event by @sisuresh in #4691
- Events invariants by @sisuresh in #4689
- Add more test coverage for fee bump feeCharged value. by @dmkozh in #4694
- Fix the tx count metric by @dmkozh in #4695
- Don't emit memos for inflation and trades by @sisuresh in #4693
- CAP-0065 - Reusable module cache by @graydon in #4621
- Emit fee events and add more tests by @jayz22 in #4690
- Initial algorithm for nominating valid 'parallel' tx sets. by @dmkozh in #4486
- Add config option to skip some validator checks for testing by @bboston7 in #4703
- Split up rust bridge by @graydon in #4707
- More fixes to fee bump tx tests. by @dmkozh in #4708
- Remove limit on QUERY_SNAPSHOT_LEDGERS by @leighmcculloch in #4683
- History Archive Support for State Archival by @SirTyson in #4610
- Update core for p23 features implemented thus far. by @dmkozh in #4719
- Skip unnecessary checkValid calls on blocks by @marta-lokhova in #4711
- Adapt fee events to
TransactionEvent
and emit stage by @jayz22 in #4716 - Cleanup some redundant comments. by @dmkozh in #4720
- Revert unintentional rename of sorobaninfo fields. by @dmkozh in #4723
- Switch log level from DEBUG to INFO for few of them in history archive publishing path by @anupsdf in #4724
- Refactor transaction meta and results. by @dmkozh in #4687
- Remove experimental BucketListDB flags by @SirTyson in #4728
- Autorestore by @SirTyson in #4726
- Drop experimental background overlay flag by @marta-lokhova in #4734
- Update xdr and adapt to LCM v2 by @sisuresh in #4731
- Fix build by @sisuresh in #4735
- Introduce daily RND_SEED in CI test partitions by @marta-lokhova in #4737
- getledgerentry endpoint for RPC by @SirTyson in #4721
- Disk read resource by @SirTyson in #4733
- Stop skipping known results for fee bumps by @sisuresh in #4742
- Improve the check for the events invariant. by @dmkozh in #4743
- Merge 22.3 into master by @SirTyson in #4746
- Make parallel tx set builder to flexibly choose the number of stages. by @dmkozh in #4712
- Bump overlay version to 38 for v23.0.0 by @marta-lokhova in #4747
- Add test-only configs for perf testing by @marta-lokhova in #4744
- Exclude CONFIG_SETTING from getledgerentry test by @graydon in #4749
- Don't charge fees for in-memory state by @SirTyson in #4756
- Do not trigger ledger if there were side effects inside triggerNextLedger by @marta-lokhova in #4753
- Visual Studio Project fixes (June 2025) by @MonsieurNicolas in #4759
- Fix settings upgrade utils read and write byte limits by @sisuresh in #4762
- Level 0 merge by @SirTyson in #4697
- Formalize immutable complete ledger state used by the main thread by @marta-lokhova in #4754
- Gracefully handle hasLastClosedSorobanNetworkConfig on startup by @marta-lokhova in #4770
- Fix the failed result replay. by @dmkozh in #4769
- Clean up eviction scan by @SirTyson in #4773
- Added ledger entry type offsets to BucketIndex by @SirTyson in #4750
- Fix restore methods in ltx by @sisuresh in #4767
- Merge v22.4.1 branch with test fixes by @marta-lokhova in #4775
- Check for entry in command handler by @sisuresh in #4780
- Parallelize Soroban by @sisuresh in #4715
- Check result of maybeAdoptFailedReplayResult by @sisuresh in #4782
- Pass the auto-restored entry ids to invoke_host_function. by @dmkozh in #4772
- Rename RestoredKeys => RestoredEntries by @graydon in #4787
- Rename ThreadEntryMap and move LM member functions to standalone by @graydon in #4788
- Increase refundable fee in Soroban tests and regenerate meta. by @dmkozh in #4789
- Fix prng seed bug by @sisuresh in #4790
- getledgerentry returns 0 TTL for archived state by @SirTyson in #4792
- Increase fees in TxGenerator in preparation to rent calibration PR. by @dmkozh in #4795
- Event fix by @sisuresh in #4797
- Add meta restoration tests and bug fixes by @SirTyson in #4791
- Thread safety audit by @SirTyson in #4794
- xdr cleanup by @marta-lokhova in #4798
- Update the rent configuration and computation according to CAP-66. by @dmkozh in #4796
- Adapt apply load for parallel soroban by @sisuresh in #4799
- Remove MODE_ENABLES_BUCKETLIST configuration option by @marta-lokhova in #4801
- new SAT-based, process-isolated quorum intersection checker by @jayz22 in #4653
- Start encapsulating and centralizing parallel ledger state management. by @graydon in #4800
- Restoration cleanup by @sisuresh in #4803
- overlay-only mode for testing by @marta-lokhova in #4777
- Soroban state cache by @SirTyson in #4752
- Code hardening and extra logging based on static analysis by @marta-lokhova in #4779
- Cap 70 upgrades by @SirTyson in #4768
- Remove prefetching for Soroban TXs by @SirTyson in #4806
- More parallel-apply refactoring by @graydon in #4805
- Allow fee bump transactions to bump inner transactions with 'invalid' inner fee in p23. by @dmkozh in #4802
- Parallel-apply refactor round 5 by @graydon in #4807
- Add thread invariance to ApplyState by @marta-lokhova in #4808
- Clear tx queue on upgrade by @SirTyson in #4804
- Use Soroban in-memory State by @SirTyson in #4810
- Fix state size window upgrade by @sisuresh in #4811
- Add some snapshot ledger-number asserts to parallel apply by @graydon in #4813
- Change some fatal asserts to just throws that become internal errors by @graydon in #4814
- Track Soroban in-memory state size and store it in p23. by @dmkozh in #4809
- Fix tmpdir-reuse crash bug of new QIC by @graydon in #4820
- Disable QICv2 by default by @graydon in #4821
- Parallel soroban - Add tests and fix bug with loading deleted entries from global state by @sisuresh in #4823
- Add phase invariants to LedgerManager::ApplyState by @SirTyson in #4819
- Fix assert and update parallel soroban testing by @sisuresh in #4824
- Make sure we store the loaded ltx entry when accessing it in NetworkConfig. by @dmkozh in #4825
- Add test and fix lastModifiedLedgerSeq meta bug in parallel apply by @SirTyson in #4826
- Allow accelerate time flag in all builds by @marta-lokhova in #4828
- Apply phase fixes by @SirTyson in #4829
- Fix pretty printing for Catch2. by @dmkozh in #4832
- Cleanup redundant lastModifiedLedgerSeq and add additional tests by @sisuresh in #4834
- Add SCP timing params to sorobaninfo query by @SirTyson in #4838
- Stop preloading disk entries by @sisuresh in #4835
- Fix "allow trust" test on macOS by @bboston7 in #4836
- Settings upgrade utility improvements by @dmkozh in #4837
- Update tx queue memo filtering by @sisuresh in #4841
- Make
ApplicationImpl::mConfig
const by @drebelsky in #4840 - Add meta ordering for restored keys by @SirTyson in #4846
- Add a set of randomized tests that ensure parallel apply logic stability by @dmkozh in #4843
- BucketList fixes by @SirTyson in #4847
- Fix the parallel tx set apply order shuffle. by @dmkozh in #4848
- Speed up test suite by @marta-lokhova in #4849
- Bump p23 env to v23.0.0rc3 by @sisuresh in #4855
- Support p23 disk reads in ApplyLoad by @SirTyson in #4852
- Add loadgen option to set ledgerMaxDependentTxClusters by @sisuresh in #4859
- Test improvements by @SirTyson in #4856
- Add available accounts during upgrade loadgen modes by @marta-lokhova in #4861
New Contributors
- @drebelsky made their first contribution in #4840
Full Changelog: v22.4.1...v23.0.0rc5