Releases: AntelopeIO/spring
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...