Spring v2.0.0-dev1 is the first developer preview release of the Spring 2.0 series, focussing on the initial introduction of Sync Calls for developer feedback.
Warning
This is a Developer Preview release, intended for testing and feedback only. Future releases will contain breaking changes. Data files created by 2.0.0-dev1 (such as block logs, snapshots, state history logs, etc) will not necessarily be compatible with any future releases. 2.0.0-dev1 should not be used on chains other than chains specifically testing the 2.0.0-dev1 preview release.
Sync Calls Overview
Sync Calls introduce a new mechanism for smart contracts to synchronously call other contracts and receive a return value, enabling more expressive and modular contract design.
This release includes:
- Protocol Feature Activation: Sync Calls are gated behind a protocol feature (
sync_call
) and require activation by Block Producers. - New Host Functions: Includes
call()
,get_call_data()
, andset_call_return_value()
for performing and managing sync calls inside contract code. - Return Value Support: Sync calls can pass and receive binary-encoded values up to configural size limit (default 512 KB).
- Nested and Recursive Calls: Contracts can perform nested sync calls up to a configurable max depth (default 16).
- Entry Point Validation: Contract deployment checks for valid
sync_call()
entry points and signature correctness. - Resource Limits and Config: Introduces
chain_config_v2
andsnapshot_v9
, allowing on-chain governance of call depth and data size limits. - Access Scope Enforcement: Supports enforcing read-only contexts and privileged access within sync calls.
- Host Function Constraints: Action-specific host functions (e.g.
send_inline
) are restricted within sync calls to prevent side effects. - Console Tracing: Console output from sync calls is captured and displayed in a structured hierarchy for better debugging.
- Call Traces: Each sync call is tracked via structured call traces with full metadata, returned as part of the action trace.
Note
In order to use Sync Calls in smart contracts, you will need to use CDT v5.0.0-dev1.
For details on how to use the new Sync Calls features, please see the Developer's Guide to Sync Calls.
Platform Support
Spring 2.0.0 no longer supports Ubuntu 20.04.
Changes
New Sync Calls Feature
- SC: SYNC_CALL protocol feature definition and registration by @linh2931 in #1222
- SC: Implement boilerplate code for new host functions call, get_call_data, and set_call_return_value by @linh2931 in #1238
- SC: Merge main to sync_call 03-06-25 by @linh2931 in #1241
- SC: Implement the core functionalities of sync calls by @linh2931 in #1251
- SC: Introduce chain_config_v2 and snapshot_v9 for max_sync_call_depth and max_sync_call_data_size by @linh2931 in #1257
- SC: Implement
get_call_data
,set_call_return_value
andget_call_data
host functions by @linh2931 in #1258 - SC: Validate sync call entry point by @linh2931 in #1266
- SC: Tests for sync calls without parameters, not returning a value, or returning a 0-length value by @linh2931 in #1300
- SC: privilege support by @linh2931 in #1311
- SC: Enforce host function preconditions for sync calls by @linh2931 in #1296
- SC: enforce
max_sync_call_depth
for nested and recursive sync calls by @linh2931 in #1285 - SC: Introduce host_context class as the interface to the host and as the base class for apply_context and sync_call_context by @linh2931 in #1273
- SC: Merge main branch into sync call branch (4/7/2025) by @linh2931 in #1326
- SC: add support for v9 snapshots to
spring-util snapshot info
by @spoonincode in #1327 - SC: Hide max_sync_call_depth and max_sync_call_data_size in the return value of get_consensus_parameters if sync_call protocol feature is not activated by @linh2931 in #1331
- SC: Merge
main
branch intosync_call
branch (4-11-25) by @linh2931 in #1364 - SC: save & restore GS register to allow nested EOS VM OC executors by @spoonincode in #1382
- SC: A new approach to managing Wasm allocators in controller by @linh2931 in #1346
- SC: Merge
release/2.0
intosync_call
branch (4-18-25) by @linh2931 in #1406 - SC: Support read only sync call by @linh2931 in #1404
- SC: point to head of eos-vm sync_call branch by @linh2931 in #1417
- SC: Implement sync call trace by @linh2931 in #1333
- SC: Fix read_only flag in call traces and make code cleaner in read only processing by @linh2931 in #1410
- SC: Make sure return value is retained if set_call_return_value() is called before eosio_exit() by @linh2931 in #1427
- SC: Add SHiP support for sync call traces by @linh2931 in #1340
- SC: Merge release/2.0 to sync_call (4/29/25) by @linh2931 in #1466
- SC: Implement EOSVM-OC support for sync calls by @linh2931 in #1378
- SC: Implement memory pools with variable-sized memory slices for OC by @linh2931 in #1451
- SC: Revert entry point validation by @linh2931 in #1453
- SC: Sync call entry point validation for
eosvm
,eosvm-jit
, andeosvmoc
by @linh2931 in #1455 - SC: Support sync_call entry point function to return execution status by @linh2931 in #1525
- SC: Revert SHiP Support for call_trace by @linh2931 in #1556
- SC: Support call trace deserialization in ABI serializer by @linh2931 in #1576
- SC: Set up infrastructure for writing sync call tests using contracts in C++ by @linh2931 in #1591
- SC: Pretty print sync call consoles from contract in call hierarchy by @linh2931 in #1641
- SC: Add comprehensive tests using test-contracts in C++ by @linh2931 in #1651
- SC: Support long sync call names by @linh2931 in #1701
- SC: Cleos support of displaying call traces and console logs by @linh2931 in #1724
- SC: Support consolidated single sync call ABI section by @linh2931 in #1725
- SC: Add sync calls to deep mind log by @linh2931 in #1439
Cleos Enhancements
- [2.0.0-dev] when outputting K1 public keys, always use
PUB_K1_
format by @spoonincode in #1561 - switch cleos to using UTF8 locale; allows using IDN endpoints by @spoonincode in #1590
- cleos convert un/pack_hex by @heifner in #1578
- Add stricter abi version checks in
cleos
andabi_serializer
by @greg7mdp in #1640 - Add core.vaulta support to cleos by @heifner in #1625
P2P Enhancements
Miscellaneous Enhancements
- [2.0.0-dev] Add support for
bitset
serialization inabi_serializer
. by @greg7mdp in #1531 - Updated docs with nodeos --help output by @heifner in #1459
- add missing check for MAX_NUM_ARRAY_ELEMENTS in the std::array pack/unpack. Also c++20 syntax update. by @greg7mdp in #1443
- Support truncate-at-block with terminate-at-block by @heifner in #1457
- [2.0.0-dev] Add a rethrow() to fc::exception to preserve exception type by @heifner in #1535
- [2.0.0-dev] Generate new snapshot on fork by @heifner in #1538
- remove unused to/from variant, to/from base58, and pack/unpack for some key types by @spoonincode in #1560
- Add support for fixed size arrays in abi_serializer. by @greg7mdp in #1614
- Interrupt production on irreversible block by @heifner in #1569
- [2.0.0-dev] Remove deprecated functions. by @greg7mdp in #1662
- [2.0.0-dev] Minor changes to
version_t
. by @greg7mdp in #1675 - Remove retire_deferred_trxs from producer_plugin by @heifner in #1678
- [2.0.0-dev] Rethrow correct transaction trace type by @heifner in #1669
Logging
Bug Fixes
Testing
- Failing test block_log_util_if_test: simplify checks and add some extra debugging output. by @greg7mdp in #1522
- [2.0.0-dev] Test fix: Increase terminate block by @heifner in #1546
- Test: Run with extra verbose ctest output by @heifner in #1572
- Test: Setup tests to have non-consecutive block producers by @heifner in #1566
- Test: block_log_util - Allow more blocks in forkdb by @heifner in #1634
- Test: Late blocks to producer by @heifner in #1570
- Update tester to allow for a more flexible configuration of its state. by @greg7mdp in #1699
- remove abieos usage from state history tests by @spoonincode in #1511
Build & Dependency Management
- [2.0.0-dev] bump version to 2.0.0-dev on 2.0 branch by @spoonincode in #1386
- [2.0.0-dev] upgrade reproducible build image to Debian11; effectively making Ubuntu20 minimum runtime environment by @spoonincode in #1387
- [2.0.0-dev] upgrade reproducible build to clang 20 by @spoonincode in #1388
- Un-submodule
chainbase
. by @greg7mdp in #1449 - fix build with gcc15 & ambiguous
module
in eos-vm by @spoonincode in #1516 - [2.0.0-dev] Enforce gxx version 11 by @ericpassmore in #1711
- [2.0.0-dev] bump cmake requirement to 3.21; remove less than 3.21 workaround by @spoonincode in #1723
- [2.0.0-dev] remove use of deprecated python distutils by @spoonincode in #1722
- [2.0.0-dev] use
jthread
now that it's available in libc++20 by @spoonincode in #1389 - [2.0.0-dev] Update to boost 1.88 + a few fixes. by @greg7mdp in #1384
- [2.0.0-dev] remove corountine workarounds required for gcc10 by @spoonincode in #1452
- Use
std::string::start_with()
instead of the boost version. by @greg7mdp in #1645
Contributors
Special thanks to the contributors that submitted patches for this release: