Releases: AntelopeIO/spring
Spring v1.0.3
Spring v1.0.3 is a patch release focusing on stability, performance, and compatibility improvements. It brings key fixes to the Trace API, enhancements to P2P networking, optimized block processing during syncing, and expanded platform support.
Notable Changes
Trace API Fix: Corrected the get_transaction_trace endpoint to properly handle forked blocks.
P2P Stability Improvements: Improved reconnection handling, fixed syncing timeout issue, and optimized processing of invalid vote messages for better network stability.
Optimized block processing: Enhanced responsiveness during syncing—allows quicker shutdowns, faster get_info API responses, and restores periodic logging during replay.
Compatibility Improvements: Resolved build issues with LLVM versions 7–9 and fixed some unit tests on non-x86 and non-Linux platforms.
Complete Change Log
Bug Fixes:
- Fixed P2P stability issue caused by closing file descriptor 1 instead of connection when syncing timed out. (#897)
- Fixed get_transaction_trace endpoint: Addressed an issue in the Trace API where the endpoint failed to return transaction traces if the initial block forked out, ensuring accurate trace retrieval. (#966)
P2P Networking Enhancements:
Performance Improvements:
- Optimized block application: Implemented limits on block application to improve performance during block processing. (#921)
Logging Improvements:
- Updated Prometheus metrics: Enhanced speculative block metrics for produced blocks, providing more accurate monitoring data. (#957)
- Enhanced logging accuracy: Corrected block report log times to exclude the duration of maybe_switch_forks, ensuring precise logging information. (#881)
- Cleaned up logging during restarts: Fixed an issue where restarting with Ctrl-C during fork database replay caused excessive log spamming, ensuring cleaner logs and smoother restarts. (#894)
Testing Improvements:
- Improved test reliability: Updated flaky HTTP plugin unit tests and fixed the production_pause_max_rev_blks_test, strengthening the test suite's stability. (#959, #960)
- Resolved flaky tests due to race conditions: Fixed race conditions causing unreliable tests like nodeos_snapshot_diff_test, p2p_sync_throttle_test, and distributed-transactions-if-test, improving test reliability. (#875, #897, #908)
- Cross-platform test support: Updated eosvmoc_limits_tests to function on non-x86 and non-Linux platforms where OC is not supported, enhancing cross-platform compatibility. (#904)
Other Changes:
- Enhanced compiler compatibility: Fixed building issues with LLVM versions 7, 8, and 9, expanding support for different compiler environments. (#903)
- Version tracking update: Merged version bump from 5.0.3 to 1.0.3 for consistent tracking across releases. (#877)
- Fork handling improvements: Reviewed and implemented alternative methods for handling forks to improve fork management. (#968)
Contributors
Special thanks to the contributors that submitted patches for this release:
Spring v1.0.2
This release focuses on enhancing stability and performance, with improved block synchronization, logging, and system compatibility.
Notable Changes
- Support for Linux Kernel 4.15: Added compatibility for systems running Linux Kernel 4.15 by falling back to random_access_file, ensuring broader platform support. (#780)
- P2P synchronization enhancements: P2P connections continue during snapshot operations, improved reconnection handling, prevented syncing ahead in irreversible mode, and continue syncing when last irreversible block (LIB) is paused. (#768, #838, #811, #777)
- State History ABI updates: Added block header extension types to the state history ABI, enhancing developers' ability to work with extended block data. (#783)
- Improved logging accuracy: Enhanced the reporting of produced and received block times, disambiguated time entries in logs, and updated handshake logs to debug level to reduce verbosity. (#850, #837, #839)
- Fixed hangs on shutdown and exit: Resolved issues that caused the node to hang during shutdown processes, ensuring smoother and more reliable operations. (#845, #816)
Complete Change Log
SHiP
P2P
Logging
- Fix reported time for produced blocks and disambiguate time in logs.
- Improve reported time for receiving and applying blocks.
- Update Produced block and Received block logs to report lib as the last irreversible block according to the reported received or produced block instead of the fork database root.
- Change handshake logs to debug instead of info.
System Compatibility
System Stability
Tests
- Enhance test framework and test cases to sync and replay using actual committed reference blockchain data.
- Addition test coverage to validate version support for finalizer safety file.
- New test case where finality advances on lesser LIB.
- Split up long running tests so CICD can finish faster.
- Enable debug logging of the vote logger to support unittest.
- P2P: Increase timeout of sync throttle test.
Contributors
Special thanks to the contributors that submitted patches for this release:
Spring v1.0.1
This release introduces the V8 Snapshot format, which contains data missing from the V7 Snapshot format that may be needed to ensure continued syncing in some edge cases. Other changes include improvements to block production, replay, peer syncing, and deep-mind logging.
Note
Spring v1.0.1 cannot be loaded from V7 snapshots (created by Spring v1.0.0). It can load snapshot versions V6 and prior, as well as the new V8 snapshots. To upgrade a 1.0.0 node restarting from a compatible snapshot is required.
Notable Changes
- Introduced V8 Snapshots to fix potential loss of ability to sync in some edge cases due to missing data in V7 Snapshots
- Fixed bug in which block production could briefly pause after prior block producer missed their round
- Replay with
--force-all-checks
now validates quorum certificates (QCs) in the block extension - P2P improvements to prevent unnecessary timeouts and redundant block requests
- Improved deep-mind logging
Complete Change Log
Bug Fixes
P2P Improvements
Deep-mind
Tests
- Test cases to validate edge cases related to missing V7 Snapshot data
- Rewrite P2P sync throttle test
- Improve test stability by preparing blocks for tests appropriately
- Add better test coverage of replay with --force-all-checks
- Correct reference fsi file used in tests
- Tests to verify expected behavior of replay of blocks with bad QC data
Other
- Verify block signature as soon as possible prior to any further block validation
- Consistent exception type on block extension validation
- Add earlier and more specific (yet backwards compatible) checks when applying policy diffs
- Cleanup error messages when upgrading from Spring v1.0.0
- Logging improvements for received blocks
- Utilize compiler to ensure blocks are treated as immutable after construction within implementation
Full Changelog: v1.0.0...v1.0.1
Contributors
Special thanks to the contributors that submitted patches for this release:
Spring v1.0.0
Antelope Spring is the successor to Leap as the C++ implementation of node software for blockchain networks based on the Antelope Protocol.
Spring 1.0.0 introduces Savanna consensus, which reduces time to finality from 3 minutes to 1 second under typical network conditions.
Also featured in Spring 1.0.0 is a significant reworking of the State History Plugin to improve performance, reliability, and support cross block chain consensus leveraging the faster finality of Savanna.
Note
To maintain IBC compatibility with EOS after it transitions to Savanna consensus, other Antelope chains will need to upgrade to a Savanna compatible IBC contract which depends on the activation of the BLS protocol feature that was first introduced in Leap v5.0.0.
Important Links
- Instructions to upgrade a node to Spring 1.0.0
- Instructions to transition a network to Savanna Consensus
- Recommendations for managing finalizer keys
New License Terms
Antelope Spring is made available under the terms of a Business Source License which is automatically granted for all usages which are Directly in Service of or Materially Dependent on the EOS Blockchain Network. Full details of the license terms may be found in the LICENSE file. Parties seeking a License for other usages may inquire by contacting licensing@eosnetwork.com.
Release Notes
Notable Changes
A subset of the changes in this release may require node operators and downstream service providers to make configuration changes. At a glance, these include:
- Introduced Savanna consensus
- Changes to some HTTP response codes
- Introduced new Snapshot format
- Disabled State Log History compression
- Introduced new State History configuration options
- Introduced new Finalizer configuration options
- Introduced new
vote-threads
option - Introduced new
max-reversible-blocks
option
For actionable details and recommendations concerning the above changes, please see the Spring 1.0.0 upgrade guide. For complete technical details, consult the Complete Change Log and related pull requests below.
Important
The following features have been deprecated in Spring v1.0.0 and will be removed in Spring v2.0.0:
- The Prometheus plugin
count
field inget_table_by_scope
response
Please see the Deprecation Log for more information.
Complete Change Log
Introduced in Spring v1.0.0
Savanna consensus
- Adds new chain_plugin option max-reversible-blocks. Specifies the maximum number of reversible blocks beyond current LIB to allow before the node is gracefully shutdown.
- New chain api get_finalizer_info with information on finalizers and last votes.
- Endpoint get_block_header_state updated for compatibility, and functionality reduced..
- Allow a larger number of proposer (producers) in Savanna from 125 to 64K. This matches the maximum number of allowed finalizers.
- Versioning for Finalizer Safety Information file.
- cleos support for get_finalizer_info.
- Create Savanna unittests modeled after the fast testnet wave tests
- Only vote on recent blocks and simply voting by comparing time.
- Switch to timestamp for better detection of most recent policy change.
- Use lastest_qc_claim block_num in block header.
- Add last_pending_finalizer_policy_generation into the finality digest calculation.
- Update logic to use latest timestamp to pick winning fork, previously used block height.
- Update finality digest adding level 3 commitments.
- Update logic to use latest timestamp to pick winning fork, previously used block height.
- Add timestamp and parent_timestamp to finality leaf nodes.
- Require a QC (quorum certificate) on both finalizer policy sets (active and pending) before considering a QC to have reached quorum on a block with a pending finalizer policy change.
- Switch to 2-chain for finality.
- For the convenience of finality violation proofs, make the finality digest to commit to the root digest of a Merkle tree over a sequence of records extracted from the sequence of block_refs in the block_refs. This Merkle root digest is called reversible_blocks_root.
- Revert previous changes to liveness rule. After evaluation the previous changes reduced liveness, and engineering identified a better solution.
- Write out chain_head after vote_processor threads have stopped.
- When a new finalizer policy or proposer policy is proposed in a block, the deep-mind logs should contain an entry associated with the block that contains the full policy (not just the diff). The keys within these policies should have string encoding.
- Move tracking of Savanna pending LIB into fork database. The fork database is in charge of tracking and persisting cached current pending Savanna LIB.
- Refactor ForkDB to consolidate concept of HEAD and better track the pending irreversible block.
- Validate QC by bitsize of votes.
- Clear out the state history log when Savanna transition is forked out.
- Improve accuracy of state history by selectively including finalizer policy.
- Update application of finalizer policies to avoid edge cases.
- When syncing/replaying optimize voting-start by processing on main thread.
- Extend scenarios where a deleted safety data file may be recovered.
- Avoid spamming peers with unnecessary votes when nodeos is first syncing old blocks.
- Align SHiP abi's by adding finality_data.
- Shift to new fork database only after irreversible transition is completed. Previously switch may occur before transition completed.
- Fix sporadic issues, update ForkDB to return block matching block number.
- Add strong QC block number to minimize size of proofs, and aid in finality violation proofs.
- Update controller to proper set producer authority under Savanna.
- Improve stability in P2P syncing for large forks with very small sync spans.
- Update to use the last pending finalizer policy in the history of the blockchain, if there are no pending finalizer policies in the queue, then the last pending finalizer policy is the active finalizer policy.
- Resolves duplicate polices from advancing. Finality can advance multiple blocks, previously this may cause duplicate policies to advance.
- Extend finality data to include full policy (including generation number) of the finalizer policy proposed in the associated block. This is used in SHiP data stream.
- Improve set_proposed_finalizers, has no side effects if transaction fails.
- Use the correct finalizer policy when logging.
- Avoid adding new proposer policy if there is no change.
- Improve set_finalizers host function to take a packed finalizer format.
- Move create and send vote off the main thread.
- Improved algorithm governing generation of finalizer policy.
- Avoid using fork in log messages that are not related to micro-forks.
- Check and test to ensure proposer policy is only set when there is a change.
- Update representation of variant formate for fc
- [Improve snapshot scheduling to avoid race conditions, and fixes issues where no snapshot was take...
Spring v1.0.0-rc3
Antelope Spring is the successor to Leap as the C++ implementation of node software for blockchain networks based on the Antelope Protocol.
Spring v1.0.0 introduces Savanna consensus, which reduces time to finality from 3 minutes to 1 second under typical network conditions.
Also featured in Spring 1.0.0 is a significant reworking of the State History Plugin to improve performance, reliability, and support cross block chain consensus leveraging the faster finality of Savanna.
Note
To maintain IBC compatibility with EOS after it transitions to Savanna consensus, other Antelope chains will need to upgrade to a Savanna compatible IBC contract which depends on the activation of the BLS protocol feature that was first introduced in Leap v5.0.0.
Important Links
- Instructions to upgrade a node to Spring 1.0.0
- Instructions to transition a network to Savanna Consensus
- Recommendations for managing finalizer keys
New License Terms
Antelope Spring is made available under the terms of a Business Source License which is automatically granted for all usages which are Directly in Service of or Materially Dependent on the EOS Blockchain Network. Full details of the license terms may be found in the LICENSE file. Parties seeking a License for other usages may inquire by contacting licensing@eosnetwork.com.
Release Notes
Notable Changes
Spring v1.0.0-rc3 fixes several defects reported against Spring v1.0.0-rc2. The most notable changes include:
- Improved liveness properties of consensus by modifying the rules that finalizers use to decide between voting strong vs weak
- Updated safety.dat format to include checksum to detect possible corruption on startup
- Modified behavior of max-reversible-blocks option to only pause production rather than shutdown
- Fixed regression in v1.0.0-rc2 that allowed the node to sync too far ahead
- Fixed crash when running SHiP during replay
- Additional improvements to logging and tests
Complete Change Log
Changes in Spring v1.0.0-rc3
Stability
- add
BOOST_TEST_DEFAULTS_TO_CORE_DUMP
to libtester users - FSI serialization: support dynamically sized data and verify checksum
- Use other_branch_latest_time for liveness
- P2P: Prevent node from syncing too far ahead
- Pause production when max-reversible-blocks reached
- SHiP: Fix SHiP replay over savanna transition blocks
- Improve finalizer safety file exception handling
Tests
- Test verifying that proposer policy does not become active when finality has stalled
- Simplify disaster_recovery_2 test and verify correct LIB
- Test to demonstrate weak masking issue
- Improve restart production integration test
- Test validating new fsi design
- Fix liveness integration test flakiness
- Add integration tests for production-pause-vote-timeout
Maintainance
Logging
Full Changelog: v1.0.0-rc2...v1.0.0-rc3
Contributors
Special thanks to the contributors that submitted patches for this release:
Spring v1.0.0-rc2
Antelope Spring is the successor to Leap as the C++ implementation of node software for blockchain networks based on the Antelope Protocol.
Spring v1.0.0 introduces Savanna consensus, which reduces time to finality from 3 minutes to 1 second under typical network conditions.
Also featured in Spring 1.0.0 is a significant reworking of the State History Plugin to improve performance, reliability, and support cross block chain consensus leveraging the faster finality of Savanna.
Note
To maintain IBC compatibility with EOS after it transitions to Savanna consensus, other Antelope chains will need to upgrade to a Savanna compatible IBC contract which depends on the activation of the BLS protocol feature that was first introduced in Leap v5.0.0.
Important Links
- Instructions to upgrade a node to Spring 1.0.0
- Instructions to transition a network to Savanna Consensus
- Recommendations for managing finalizer keys
New License Terms
Antelope Spring is made available under the terms of a Business Source License which is automatically granted for all usages which are Directly in Service of or Materially Dependent on the EOS Blockchain Network. Full details of the license terms may be found in the LICENSE file. Parties seeking a License for other usages may inquire by contacting licensing@eosnetwork.com.
Release Notes
Notable Changes
Spring v1.0.0-rc2 fixes several defects reported against Spring v1.0.0-rc1. The most notable changes include:
- The invalid snapshots generated in rc1 have been fixed in rc2.
- P2P changes were made fixing issues with frozen syncing observed in rc1
Important
The count
field in the response to get_table_by_scope
has been deprecated in this release and will be removed in Spring v2.0.0. See the Deprecation Log for more information.
Complete Change Log
Fixed in Spring v1.0.0-rc2
Snapshots
- v7 snapshot loading failures
- Loading from snapshot with block strides
- Check for
chain_head.dat
on snapshot load - treat a end_block_num=0 as "forever" in snapshot scheduler for compatibility with leap 4.0
Syncing
- P2P: Sync not making progress after a timeout and reassign_fetch
- P2P: Sync mode stuck after hitting max-reversible-blocks, after restart
- P2P: Limit requested blocks to avoid max-reversible-blocks
- max-reversible-blocks syncing old blocks
Other
- log entry for legacy producer schedule broken in rc1
- Add changes required for updating to boost 1.86 - but without the boost upgrade
- Update chainbase to tip (initialization / move operations update)
- fix true_lowest() for uint128[2] index; possibly resolving some secondary table row RPC queries
- limit the vector size that can be reserved
- Remove unnecessary code that cannot be executed.
- Create Savanna unittests modeled after the fast testnet wave tests
Full Changelog: v1.0.0-rc1...v1.0.0-rc2
Contributors
Special thanks to the contributors that submitted patches for this release:
Spring v1.0.0-rc1
Caution
This release (Spring v1.0.0-rc1) generates invalid snapshots and should not be used. Please use Spring v1.0.0-rc2.
Antelope Spring is the successor to Leap as the C++ implementation of node software for blockchain networks based on the Antelope Protocol.
Spring 1.0.0 introduces Savanna consensus, which reduces time to finality from 3 minutes to 1 second under typical network conditions.
Also featured in Spring 1.0.0 is a significant reworking of the State History Plugin to improve performance, reliability, and support cross block chain consensus leveraging the faster finality of Savanna.
Note
To maintain IBC compatibility with EOS after it transitions to Savanna consensus, other Antelope chains will need to upgrade to a Savanna compatible IBC contract which depends on the activation of the BLS protocol feature that was first introduced in Leap v5.0.0.
Important Links
- Instructions to upgrade a node to Spring 1.0.0
- Instructions to transition a network to Savanna Consensus
- Recommendations for managing finalizer keys
New License Terms
Antelope Spring is made available under the terms of a Business Source License which is automatically granted for all usages which are Directly in Service of or Materially Dependent on the EOS Blockchain Network. Full details of the license terms may be found in the LICENSE file. Parties seeking a License for other usages may inquire by contacting licensing@eosnetwork.com.
Release Notes
Notable Changes
A subset of the changes in this release may require node operators and downstream service providers to make configuration changes. At a glance, these include:
- Changes to some HTTP response codes
- Introduced new Snapshot format
- Disabled State Log History compression
- Introduced new State History configuration options
- Introduced new Finalizer configuration options
- Introduced new
vote-threads
option
For actionable details and recommendations concerning the above changes, please see the Spring 1.0.0 upgrade guide. For complete technical details, consult the Complete Change Log and related pull requests below.
Deprecation Notices
The count
field in the response to get_table_by_scope
has been deprecated in this release, and will be removed in the next major version of Spring. See the deprecation schedule for more details.
Complete Change Log
Introduced in Spring v1.0.0
Protocol
Adds new chain_plugin option max-reversible-blocks. Specifies the maximum number of reversible blocks beyond current LIB to allow before the node is gracefully shutdown.
New chain api get_finalizer_info with information on finalizers and last votes.
Endpoint get_block_header_state updated for compatibility, and functionality reduced..
Performance
Improve k1 signing performance ~10%, upgrade libsecp256k.
Instead of placing the entire producer proposed schedule in the instant_finality_extension, only put a diff of the producer proposed schedule in the extension.
Instead of placing the entire finalizer set in the instant_finality_extension, only put a diff of the active finalizer policy in the extension.
Allow a larger number of proposer (producers) in Savanna from 125 to 64K. This matches the maximum number of allowed finalizers.
Improve state history performance by using a buffer for the de/compression pipeline.
Internals
Guard against throwing an error write_deatastream's destructor.
P2P to correctly report id of know pending blocks.
Versioning for Finalizer Safety Information file.
P2P to correctly report id of know pending blocks.
Update libsecp256k1 faster speed and matches what Bitcoin Core is using.
Move block time check in speculative mode above watermark check in production mode.
Improve Syncing to handle condition where blocks were received before being applied. Previously this condition caused the node to not ever request the next range of blocks.
cleos support for get_finalizer_info.
More robust syncing to handle unavailable blocks, when client does not have backing blocklog.
Only vote on recent blocks and simply voting by comparing time.
Switch to timestamp for better detection of most recent policy change.
Use lastest_qc_claim block_num in block header.
Add last_pending_finalizer_policy_generation into the finality digest calculation.
Update logic to use latest timestamp to pick winning fork, previously used block height.
Update finality digest adding level 3 commitments.
Update logic to use latest timestamp to pick winning fork, previously used block height.
Add timestamp and parent_timestamp to finality leaf nodes.
Require a QC (quorum certificate) on both finalizer policy sets (active and pending) before considering a QC to have reached quorum on a block with a pending finalizer policy change.
Switch to 2-chain for finality.
For the convenience of finality violation proofs, make the finality digest to commit to the root digest of a Merkle tree over a sequence of records extracted from the sequence of block_refs in the block_refs. This Merkle root digest is called reversible_blocks_root.
Remove unneeded snapshot_block_state_legacy_v7.
Revert previous changes to liveness rule. After evaluation the previous changes reduced liveness, and engineering identified a better solution.
Write out chain_head after vote_processor threads have stopped.
Reduce Log Spam on shutdown.
When a new finalizer policy or proposer policy is proposed in a block, the deep-mind logs should contain an entry associated with the block that contains the full policy (not just the diff). The keys within these policies should have string encoding.
To support ease of use SHiP, finality_data captures a new pending finality policy, including encoded public keys from pending finality data.
Move tracking of Savanna pending LIB into fork database. The fork database is in charge of tracking and persisting cached current pending Savanna LIB.
Refactor ForkDB to consolidate concept of HEAD and better track the pending irreversible block.
Validate QC by bitsize of votes.
More robust block log replay through refactoring head block state management.
Add hardened mode for reproducible builds.
Upgrade to clang v18 in Docker repeatable build. Improvements to reduce Docker build cache.
Clear out the state history log when Savanna transition is forked out.
Improve accuracy of state history by selectively including finalizer policy.
Add cases where we update peer syncing status to more accurately reflect peer syncing from us status.
Improved block id duplication logic to retain the correct state history with replay/resync.
Update application of finalizer policies to avoid edge cases.
[More efficient P2P eliminating multiple requests for the same ran...