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)
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
Full Changelog: v22.4.1...v23.0.0rc2