Spring v1.2.0 is a minor release that enhances node connectivity, resilience, and operational simplicity of Spring nodes. The most notable new feature is Gossip-based Auto-peering for Block Producers.
Notes on Gossip-Based BP Auto-Peering
Spring v1.2.0 introduces a powerful new networking feature: gossip-based auto-peering for block producers. This system eliminates the need for manual peer configuration by enabling BPs to dynamically discover and connect to each other using authenticated gossip messages. The result is a self-healing consensus mesh that adapts gracefully to changes in the network—such as node redeployments, hard forks, or producer schedule changes—without requiring human coordination.
Registering BP Peering Keys
This feature requires the deployment of vaultafoundation/system-contracts
v3.9.0 or later, which introduces the ability for BPs to register on-chain peering keys using the regpeerkey
action. These keys are used to sign and validate gossip messages securely.
Configuring Gossip Peering
Block Proposers that wish to participate in the gossip mesh, must declare its public presence using one or more --p2p-bp-gossip-endpoint
entries.
Up to 8 active gossip entries per producer are supported. These entries are signed, gossiped to other participating peers, and refreshed every 30 minutes. Expired entries are pruned automatically after 1 hour.
Monitoring and Debugging
To inspect currently known BP gossip peers, Spring exposes a new API, /v1/net/bp_gossip_peers
, which returns the list of active gossip entries, including each peer's identity, endpoint, and expiration timestamp—useful for diagnostics or generating dynamic firewall rules.
Setup Instructions
For complete instructions on how to participate in BP Gossip-based BP Auto-peering, please see: https://github.com/AntelopeIO/spring/wiki/BP-Gossip-Peering-Instructions
Other Notable Changes
While gossip-based BP auto-peering is the headline feature of Spring v1.2.0, several other important improvements and fixes have also landed in this release:
IPv6 Support Restored
Fixed a regression in IP address parsing introduced in v1.1, fully restoring IPv6 compatibility in the net_plugin.
Improved OC Compile Scheduling
Optimized the handling of WebAssembly OC compiles by switching to an unbounded result queue and proactively releasing memory, reducing potential latency and memory overhead.
Agent Name in P2P Logs
Introduced support for a custom agent-name string in peer log formatting to help operators better identify connections.
Complete Change Log
Enhancements
- Validate finality mroot of Savanna blocks as a part of header validation.
- Cache the packed block data in
signed_block
so that it can be retrieved without having topack
it at time of serialization. performance - Print snapshot information using
spring-util
command. - Add
--dry-run
forpush action
in cleos. - Add gossip of BP peers.
- Retrieval of peers public keys from chainbase db.
- Modify p2p-auto-bp-peer to connect to all finalizers, the top 21 producers.
- Optimize processing of incoming blocks by removing an unneeded thread hop on nominal case.
- Add new options
_peer
and_nver
topeer-log-format
. - Increase send/receive buffer to 1Mb.
- Add interrupt of speculative transactions interrupting when a block is received.
- Add interrupt of read-only trxs on ctrl-c/SIGINT/SIGTERM/SIGPIPE. Do not interrupt read-only trxs when a block is received.
- Only show action return information when
ACTION_RETURN
is activated. - Improve hash function for
chain::name
- [1.2.0] P2P: BP gossip connections
- [1.2.0-rc3] P2P: Trim addresses
- [1.2.0-rc3] P2P: Allow p2p-bp-gossip-endpoint with duplicate server addresses
- [1.2.0-rc3] P2P: agent-name
- [1.2.0-rc3] TraceAPI: Add core.vaulta.abi and update eosio.* abis
- [1.2.0-rc3] Handle block log exception during replay
- [1.2.0-rc2] P2P: Versioned signed type for gossip_bp_peers_message::signed_bp_peer
- [1.2.0-rc2] P2P: Gossip BP peer enhancements
- use a global merkle thread pool to avoid creation and destruction of threads every block
- avoid copying action when computing action digest
- Optimize fork database open/read
- Do not interrupt apply_block on a received block if applying to head
- Update to peer_keys_db_t to match changes in eos-system-contracts pr 185
Logging
Documentation
Other
- [1.2.0-rc2] mark a couple variables used only for
assert()
as[[maybe_unused]]
to avoid warning - [1.2.0-rc2] use more portable
__builtin_bswap64()
- Add
vaulta_genesis
file. - remove C++20 ifdefs in merkle.hpp
- allow any executor for
post_async_task()
- Add some missing
std::move()
, usevariants
type consistently. - no need to use
std::packaged_task
; asio supports returning astd::future
directly - Ensure finalizercNode is synced up before terminating the first node in the cluster. test-instability
- Preserve test when evaluating a fork, add time to evaluate fork switch. test-instability
- Logs protocol activations during tests.
- Improve test helpers by adding common method for registering different test types.
- [1.2.0] Test: Wait on block before verification of pause
- [1.2.0] Test: Increase timeout
- [1.2.0-rc3] Test: Wait for pause to take affect
- [1.2.0-rc3] Test: Reduce throttle speed
- [1.2.0-rc3] Test: Relax hard thread test
- [1.2.0-rc3] Test: Wait on the correct head value
- [1.2.0-rc2] fix race on creation of
TestLogs
directory in TestHarness Utils - [1.2.0-rc1] Bump version to 1.2.0-rc1
- [1.2.0-rc2] bump version to 1.2.0-rc2
- [1.2.0-rc3] Bump version to 1.2.0-rc3
- [1.2.0] Version 1.2.0
- Remove empty file.
- Reduce strain on ci/cd by lowering TPS during performance tests. test-instability
- Bump bn256 submodule.
- Update code sanitizers to clang20.
- Cleanup memcpy and memset to avoid warnings on non-trivially copyable type.
- Clean up code by removing unneeded static variable reference.
- Switch to using
eos-system-contracts
in libtester tests. - Update BLS submodule to fix assembly usage.
- [1.2.0-rc2] Performance Workflow Move Upload Out of Build Dir
- [1.2.0-rc2] Migrate Performance Test Harness Actions to @v4
- [1.2.0-rc2] fix build of
api_tests
on platforms without OC
Contributors
Special thanks to the contributors that submitted patches for this release: