Releases: AntelopeIO/spring
Spring v1.2.0-rc1
Warning
The variant of the bp peering gossip protocol in v1.2.0-rc1 is unsupported and will be superceded by 1.2.0-rc2.
v1.2.0-rc1 introduces a major advancement in peer-to-peer networking with the rollout of a gossip-based block producer auto-peering system. This feature enables block producers to dynamically discover and connect with each other, forming a resilient consensus mesh that adapts to changes such as new node deployments, protocol hard fork upgrades, or ranking shifts — eliminating the need for manual connection configuration.
Notable Changes
Gossip-Based Auto-Peering for Block Producers
Introduces automated discovery and connection among block producers using a gossip protocol, enhancing network resilience and reducing manual configuration.
Elimination of Duplicate P2P Connections
Enhances network efficiency by preventing redundant peer connections, ensuring optimal resource utilization.
Expanded P2P Buffer Sizes
Increases send and receive buffers to 1MB, improving throughput and reducing latency in peer communications.
Enhanced Peer Logging Options
Configurable peer log formats, Provide more flexibility and clarity in monitoring peer interactions.
Snapshot Information Utility
Added a spring-util command to print snapshot information.
Complete Change Log
Here is the categorized list of the provided pull requests:
Enhancements
- PR #1208: Add new peer log format options.
- PR #1244: Update P2P auto block producer peer for Savanna.
- PR #1237: Add
spring-utilcommand to print snapshot info. - PR #1228: Retrieve peers' public keys from
chainbasedatabase. - PR #1250: Add
--dry-runoption forpush action. - PR #1284: Hide
max_action_return_value_sizeinget_consensus_parameterswhen feature not activated. - PR #1308: Eliminate duplicate P2P connections.
- PR #1328: Allow interruption of read-only transactions via
ctrl-c. - PR #1316: Update
peer_keys_db_tto match changes ineos-system-contractsPR 185. - PR #1330: Interrupt speculative transaction when block is received.
- PR #1385: Log if not producing because of stale production
- PR #1399: Do not interrupt apply_block on a received block if applying to head
Optimizations
- PR #1148: Store packed block in
signed_blockto improve performance. - PR #1164: Validate finality
mrootof Savanna blocks as part of header validation. - PR #1206: Improve hash function for
chain::name. - PR #1207: Increase P2P send/receive buffer to 1MB.
- PR #1223: Avoid thread hop on incoming blocks.
- PR #1367: Add missing
std::move()calls and usevariantstype consistently. - PR #1403: Optimize fork database open/read
- PR #1412: use a global merkle thread pool to avoid creation and destruction of threads every block
- PR #1415: Avoid copying action when computing action digest
Bug Fixes
Tests
- PR #1168: Add common method for registering different test types.
- PR #1178: Switch to using
eos-system-contractsinlibtestertests. - PR #1249: Bump sanitizers to
clang20. - PR #1270: Fix incorrect names (
preActivateinstead ofactivate) and add debugging info. - PR #1275: Reduce performance test number of read-only transactions to reduce CI/CD strain.
- PR #1272: Do not exit on error when evaluating fork.
- PR #1274: Ensure
finalizercNodeis synced up before killingnode0.
Other
- PR #1230: Remove unneeded static variable reference.
- PR #1246: Avoid
memsetandmemcpyon non-trivially copyablefc::variantto eliminate warnings. - PR #1264: Bump
bn256submodule with minor changes related to C++20, CI, and BMI2 usage. - PR #1294: Replace leftover instance of "EOSIO" with "Spring" in
cleoshelp text. - PR #1295: Remove empty file.
- PR #1357: Use
std::futuredirectly withasio, removing the need forstd::packaged_task. - PR #1374: Add vaulta_genesis file
- PR #1395: Allow any executor for
post_async_task() - PR #1396: Remove C++20 ifdefs in merkle.hpp
- PR #1402: Update logging.json GELF example
Full Changelog: v1.1.3...v1.2.0
Spring v1.1.4
Spring v1.1.4 delivers critical improvements to fork handling and snapshot consistency, enhancing node stability and reliability during chain reorganizations. This release also includes several test optimizations to improve CI/CD robustness and reduce flakiness.
Notable Changes
-
Snapshot Fork Detection Fix
Resolved an issue where snapshots were not correctly identified as forked out, ensuring accurate chain state management during forks. -
Fork Switch Stability Enhancement
Addressed a potential process block interruption during fork switches, improving node stability during chain reorganizations.
Complete Change Log
Bug Fixes
Tests
-
[1.1.4] Test fix: Increase max-transaction-cpu-usage for slow/overwhelmed CI/CD by @heifner in [PR #1350](#1350)
-
[1.1.4] Test fix: Wait an extra block for protocol activation by @heifner in [PR #1341](#1341)
-
[1.1.4] Test fix: Allow more time for block apply to start before sending interrupt by @heifner in [PR #1353](#1353)
-
[1.1.4] Test fix: Make sure node2 and node3 have trx reference block by @heifner in [PR #1354](#1354)
-
[1.1.4] Test: Increase trx time allowed in read-only perf test by @heifner in [PR #1368](#1368)
-
[1.1.4] Test: Disable pause production in test by @heifner in [PR #1369](#1369)
-
[1.1.4] Test fix: Pause production before shutdown by @heifner in [PR #1413](#1413)
-
[1.1.4] Test fix: Use unique file name by @heifner in [PR #1418](#1418)
Full Changelog: v1.1.3...v1.1.4
Spring v1.1.3
Spring v1.1.3 brings several bug fixes and ensures the new core.vaulta token contract will run with optimized performance.
Notable Changes
-
Added 'vaulta' to EOS VM OC Whitelist: Expanded the default whitelist to include 'vaulta', to ensure that the new core.vaulta token contract will run with optimized performance.
-
Limited 'read-only-read-window-time-us' Parameter: Restricted the 'read-only-read-window-time-us' setting to 200ms to prevent issues with repeated retries of read-only transactions.
-
Fixed Node Stuck in Head Catchup: Resolved an issue where nodes could become stuck in head catchup state due to null connection handling.
Complete Change Log
Enhancements
- Add 'vaulta' to default EOS VM OC whitelist: Expanded the default whitelist to include 'vaulta'. #1335
Bug Fixes
-
P2P: Fix node stuck in head catchup: Resolved an issue causing nodes to remain in head catchup state. #1240
-
Ignore block CPU limit for read-only transactions: Ensured read-only transactions are not constrained by block CPU limits. #1288
-
Correctly handle 'onblock' interrupt: Improved handling of 'onblock' interruptions. #1307
-
Reduce max 'read-only-read-window-time-us': Limited the 'read-only-read-window-time-us' parameter to 200ms. #1322
Tests
-
Do not exit on error when evaluating fork: Modified test behavior to continue despite errors during fork evaluation. #1280
-
Ensure 'finalizercNode' is synced before killing 'node0': Added synchronization checks before terminating 'node0'. #1281
-
Reduce performance test number of read-only transactions: Decreased the number of read-only transactions in performance tests to reduce strain on CI/CD. #1282
-
Test fix: Handle case where 'nodeos' shuts down before replying to HTTP request: Improved test handling for 'nodeos' shutdown scenarios. #1299
-
Test fix: Kill node before end of 'defproducerb' to allow more tolerance: Adjusted test procedures to terminate nodes earlier for increased tolerance. #1302
-
Test fix: Better handle case where block not available: Enhanced test handling for scenarios where blocks are unavailable. #1305
-
Test fix: Decrease 'max_block_cpu_usage' and 'max_transaction_cpu_usage' values: Reduced CPU usage limits in tests for better performance. #1287
Full Changelog: v1.1.2...v1.1.3
Spring v1.1.2
Spring v1.1.2 is a security patch release with some additional bug fixes.
Note
This release patches a security vulnerability affecting all nodes. All nodes running Spring v1.1.1 or prior should upgrade immediately to mitigate a possible denial of service vector.
Complete Change Log
Contributors
Special thanks to the contributors that submitted patches for this release:
Spring v1.0.5
Spring v1.0.5 is a security patch release.
Note
This release patches a security vulnerability affecting all nodes. All nodes running Spring v1.0.4 or prior should upgrade immediately to mitigate a possible denial of service vector.
Complete Change Log
Contributors
Special thanks to the contributors that submitted patches for this release:
Spring v1.1.1
Spring v1.1.1 is a patch release focusing on bug fixes improving the stability and reliability of the Spring 1.1 series.
Improvements:
- Block Log Conversion: Resolved issues in converting flat block logs to pruned formats.
- P2P Duplicate Connection Handling: Reverted previous changes to P2P duplicate connection handling to prevent race conditions.
- Fork Switch Logging: Now logs instances where a proposer produces duplicate blocks causing a fork switch.
- API Endpoint Availability: Restored the get_info API availability on non-chain endpoints, ensuring consistent access.
Complete Change Log
- Fix flat to pruned block log conversion
- Revert "P2P: Fix duplication connection logic
- Log double produced blocks on fork switch
- Fix a warning in nonprune_to_prune_on_start test
- Fix get_info not available on non-chain API endpoints
- Fix log file not kept by trace_plugin_test when the test fails
- Bump to v1.1.1
Spring v1.1.0
Spring v1.1.0 reduces bandwidth usage, streamlines block handling, and adds support for designated smart contracts to leverage EOS VM OC for higher performance.
Notable Changes
- Optimized P2P Block Propagation: Introduced a Block Nack feature to reduce bandwidth usage and enhance sync efficiency during block propagation.
- Enhanced Block Processing Efficiency: several improvements, including deduplication of redundant posts and notifications for new blocks.
- Pause at Block: Introduced the ability to pause execution at a specified block height. This allows operators to halt processing at a predefined block for debugging, upgrades, or controlled synchronization.
- Optimized EOS VM OC for Designated Smart Contracts: Added an option to whitelist specific account suffixes for EOS VM OC execution during block production.
Upgrade Procedure
Upgrading from Spring 1.0.1+ requires no manual upgrade procedure. Simply stop nodeos, install 1.1.0, and relaunch nodeos.
New Config Options
Manage OC Whitelist
eos-vm-oc-whitelist
- Description: Specifies account suffixes to whitelist for
eos-vm-oc, allowing designated smart contracts to bypass subjective limits and improve execution performance. - Usage:
The default value of eos-vm-oc-whitelist is xsat. If xsat is not desired, then an alternative must be specified. If there is a desire to not whitelist any accounts, then use eosio.null or any other account without a contract. Restart your node for changes to take effect. - Example:
To whitelist accounts ending in.suffix1and.suffix2, and remove the default value of ".xsat" accounts:eos-vm-oc-whitelist suffix1 suffix2
Disable Optimized Block Propagation
p2p-disable-block-nack
- Description: The Block Nack feature optimizes P2P communication by reducing bandwidth usage and improving block synchronization efficiency.
- Usage:
The Block Nack feature is enabled by default. It can be disabled by adding thep2p-disable-block-nack = trueoption to your configuration file (config.ini) and restart your node for changes to take effect. - Example:
To disable efficient block propagation:p2p-disable-block-nack = true
Specify a Transactions-Only Endpoint
p2p-listen-endpoint
- Description: Configures a P2P endpoint to accept only transaction traffic.
- Configuration:
Add the following to yourconfig.inior command line:p2p-listen-endpoint = <host>:<port>:trx - Example:
To create a transactions-only endpoint on port 9876:p2p-listen-endpoint = 0.0.0.0:9876:trx
Complete Change Log
Optimized Block Propagation
- Optimize P2P Block Propagation with Block Nack Feature: Reduces Bandwidth Overload and Improves Sync Efficiency
- Simplify and improve duplicate connection logic.
- Update net-plugin to prioritize blocks, votes, and messages to ensure timeline arrival of critical information.
- Add test net to performance harness.
- Use net threads for connecting and timers.
- With the exception of unlinkable blocks, disconnect immediately instead of allowing for 13 invalid blocks before disconnect.
- Improve P2P performance by maintaining serialized format from block log to peer syncing.
- P2P: Add p2p-listen-endpoint :trx & :blk support
- P2P: Do not log expected conditions in send callback
Optimized Block Processing
- Optimize block processing - Part 1.
- Optimize block processing - Part 2: notifying only when new blocks are ready for processing.
- Optimize block processing - Part 3: deduplication of redundant posts.
- Enhance robustness of speculative block mode by allowing for future blocks. Future blocks commonly from clock-skew.
- Test for producer_plugin pause_at_block
OC for Designated Smart Contracts
- Support interrupt transaction, brings along app base submodule update.
- Remove subjective
eos-vm-oclimits for whitelisted accounts. - Add option config
eos-vm-oc-whitelistwhich allows for specification of whitelisted account suffixes for eos-vm-oc. - Always interrupt and restart long-running transactions once OC compile completes.
- Interrupt block validation on new best head, enables auto recovery from poison blocks.
- Make eos-vm-oc-whitelist option multitoken
- workaround cdt's small const memcpy host function calls in EOS VM OC
- Allow the dev&test synchronous EOS VM OC mode without adjusting a compile time option
- Don't pause billing timer when fetching EOS VM OC's
code_descriptor
Logging
Tests
- Added a suite of tests to verify SHiP recovers when restarted in a variety of log and index corruption scenarios.
- Eliminate spurious test failures by relaxing contract cache timing
- Retain logs when plugin tests fail.
- Resolve test instability in distributed transaction tests.
- Add test for invalid QC block number.
- Modify python integration test
Node.waitForBlockto wait onblockNuminstead ofblockNum+1. - Fix test contract
EOSIO_COMPILE_TEST_CONTRACTS, by removing unusedEOSIO_DISPATCH - Add unit test for
find_secondaryhost functions. - Regenerate jumborow.wasm when
EOSIO_COMPILE_TEST_CONTRACTSenabled. - Capture test output for debugging purposes.
- Refactor checktime and separate out those tests.
- Cleanup tests, removed tests for Leap 3.1 and below. Removed tests for
history_api_pluginwhich does not exist in Spring. - Clean up Performance Harness tests, removed logic for versions of Leap 2.x.
- Update string for assert text.
- Update
ordered_difftests to check the diff result is not changing. - Test additional versions 7,8, and 9 of LLVM.
- Relax eos vm test limits on generated code size.
- Test more versions of LLVM.
- fix Python 3.12
SyntaxWarningdue to invalided escape sequence. - Add tests for
get_serialized_block_by_number. - Resolve unused warning in libtester.
- Improve div and mod operations in webassemble to reduce overflows.
- Add compiler buildtins tests to Spring. Previously included in Leap CI.
- Adds finality transition tests modeled after the fastnet transition tests.
- Test: Create unique log files for nodeos
- Test: Increase shutdown timeout
- Performance Harness: Change default transaction generator trx expiration
Other
- [Read-only transaction reporting...
Spring v1.1.0-rc2
The second release candidate for Spring v1.1.0 fixes an issue discovered during replay testing.
Note
Any node that had previously upgraded to v1.1.0-rc1 should restart from a v1.0.x snapshot after upgrading to v1.1.0-rc2.
Complete Change Log
- [1.1.0] Fix deferred trx processing by @heifner in #1150
- [1.1.0] Do not allow replay-blockchain without snapshot by @heifner in #1156
- [1.1.0] Fix account billing on eos-vm-oc interrupt by @heifner in #1160
- [1.1.0] Update to 1.1.0-rc2 by @heifner in #1162
Full Changelog: v1.1.0-rc1...v1.1.0-rc2
Spring v1.1.0-rc1
Warning
v1.1.0-rc1 has a known issue that impacts the integrity of state. Do not upgrade to rc1.
Spring v1.1.0-rc1 reduces bandwidth usage, streamlines block handling, and adds support for designated smart contracts to leverage EOS VM OC for higher performance.
Notable Changes
- Optimized P2P Block Propagation: Introduced a Block Nack feature to reduce bandwidth usage and enhance sync efficiency during block propagation.
- Enhanced Block Processing Efficiency: several improvements, including deduplication of redundant posts and notifications for new blocks.
- Pause at Block: Introduced the ability to pause execution at a specified block height. This allows operators to halt processing at a predefined block for debugging, upgrades, or controlled synchronization.
- Optimized EOS VM OC for Designated Smart Contracts: Added an option to whitelist specific account suffixes for EOS VM OC execution during block production.
Upgrade Procedure
Upgrading from Spring 1.0.1+ requires no manual upgrade procedure. Simply stop nodeos, install 1.1.0, and relaunch nodeos.
New Config Options
Manage OC Whitelist
eos-vm-oc-whitelist
- Description: Specifies account suffixes to whitelist for
eos-vm-oc, allowing designated smart contracts to bypass subjective limits and improve execution performance. - Usage:
The default value of eos-vm-oc-whitelist is xsat. If xsat is not desired, then an alternative must be specified. If there is a desire to not whitelist any accounts, then use eosio.null or any other account without a contract. Restart your node for changes to take effect. - Example:
To whitelist accounts ending in.suffix1and.suffix2, and remove the default value of ".xsat" accounts:eos-vm-oc-whitelist suffix1 suffix2
Disable Optimized Block Propagation
p2p-disable-block-nack
- Description: The Block Nack feature optimizes P2P communication by reducing bandwidth usage and improving block synchronization efficiency.
- Usage:
The Block Nack feature is enabled by default. It can be disabled by adding thep2p-disable-block-nack = trueoption to your configuration file (config.ini) and restart your node for changes to take effect. - Example:
To disable efficient block propagation:p2p-disable-block-nack = true
Specify a Transactions-Only Endpoint
p2p-listen-endpoint
- Description: Configures a P2P endpoint to accept only transaction traffic.
- Configuration:
Add the following to yourconfig.inior command line:p2p-listen-endpoint = <host>:<port>:trx - Example:
To create a transactions-only endpoint on port 9876:p2p-listen-endpoint = 0.0.0.0:9876:trx
Complete Change Log
Optimized Block Propagation
- Optimize P2P Block Propagation with Block Nack Feature: Reduces Bandwidth Overload and Improves Sync Efficiency
- Simplify and improve duplicate connection logic.
- Update net-plugin to prioritize blocks, votes, and messages to ensure timeline arrival of critical information.
- Add test net to performance harness.
- Use net threads for connecting and timers.
- With the exception of unlinkable blocks, disconnect immediately instead of allowing for 13 invalid blocks before disconnect.
- Improve P2P performance by maintaining serialized format from block log to peer syncing.
- P2P: Add p2p-listen-endpoint :trx & :blk support
- P2P: Do not log expected conditions in send callback
Optimized Block Processing
- Optimize block processing - Part 1.
- Optimize block processing - Part 2: notifying only when new blocks are ready for processing.
- Optimize block processing - Part 3: deduplication of redundant posts.
- Enhance robustness of speculative block mode by allowing for future blocks. Future blocks commonly from clock-skew.
- Test for producer_plugin pause_at_block
OC for Designated Smart Contracts
- Support interrupt transaction, brings along app base submodule update.
- Remove subjective
eos-vm-oclimits for whitelisted accounts. - Add option config
eos-vm-oc-whitelistwhich allows for specification of whitelisted account suffixes for eos-vm-oc. - Always interrupt and restart long-running transactions once OC compile completes.
- Interrupt block validation on new best head, enables auto recovery from poison blocks.
- Make eos-vm-oc-whitelist option multitoken
- workaround cdt's small const memcpy host function calls in EOS VM OC
- Allow the dev&test synchronous EOS VM OC mode without adjusting a compile time option
- Don't pause billing timer when fetching EOS VM OC's
code_descriptor
Logging
Tests
- Added a suite of tests to verify SHiP recovers when restarted in a variety of log and index corruption scenarios.
- Eliminate spurious test failures by relaxing contract cache timing
- Retain logs when plugin tests fail.
- Resolve test instability in distributed transaction tests.
- Add test for invalid QC block number.
- Modify python integration test
Node.waitForBlockto wait onblockNuminstead ofblockNum+1. - Fix test contract
EOSIO_COMPILE_TEST_CONTRACTS, by removing unusedEOSIO_DISPATCH - Add unit test for
find_secondaryhost functions. - Regenerate jumborow.wasm when
EOSIO_COMPILE_TEST_CONTRACTSenabled. - Capture test output for debugging purposes.
- Refactor checktime and separate out those tests.
- Cleanup tests, removed tests for Leap 3.1 and below. Removed tests for
history_api_pluginwhich does not exist in Spring. - Clean up Performance Harness tests, removed logic for versions of Leap 2.x.
- Update string for assert text.
- Update
ordered_difftests to check the diff result is not changing. - Test additional versions 7,8, and 9 of LLVM.
- Relax eos vm test limits on generated code size.
- Test more versions of LLVM.
- fix Python 3.12
SyntaxWarningdue to invalided escape sequence. - Add tests for
get_serialized_block_by_number. - Resolve unused warning in libtester.
- Improve div and mod operations in webassemble to reduce overflows.
- Add compiler buildtins tests to Spring. Previously included in Leap CI.
- Adds finality transition tests modeled after the fastnet transition tests.
- Test: Create unique log files for nodeos
- Test: Increase shutdown timeout
- [Performance Harness: Change default transaction generator trx expiration](#11...
Spring v1.0.4
Spring v1.0.4 is a patch release focused on system stability, performance enhancements, and accurate logging to facilitate better monitoring and maintenance.
Note
This release patches a security vulnerability affecting API nodes. All public API nodes should upgrade to mitigate a possible denial of service vector.
Notable Changes
- Fast Shutdown in Irreversible Mode: Implemented a mechanism for swift and safe system termination when operating in irreversible mode.
- Memory Usage During Sync: Advance fork database root correctly when the LIB exceeds HEAD during sync, keeping memory within expected limits.
- Smoother Syncing with Tight Fetch Span: Resolved issues causing nodes to become stuck during synchronization with tight
sync-fetch-spansettings. - Accurate Peer Connection Logging: Corrected the peer connections count in logs to reflect only active connections.
- Security Patch: public API nodes should upgrade to avoid a possible denial of service vector.
Complete Change Log
Performance
P2P
Tests
Other
Contributors
Special thanks to the contributors that submitted patches for this release: