- Add builder pattern for custom actor injection
- Make consensus request channel capacity configurable
- Refactor infrastructure for spawning a channel-based application
- Allow application to change its mind about validity (invalid -> valid)
- Add an ability to add/remove persistent peers at runtime via
Networkhandle - Add
persistent_peers_onlyconfig option to allow connections ONLY from/to persistent peers - Allow dynamic adjustment of timeout parameters (#1227)
- Allow providing both the validator set and the timeouts for a height in
StartHeight,RestartHeightandConsensusReadyreply (#1227) - Remove
initial_validator_setandinitial_heightfields fromParamsstruct (#1190)
- Can connect request calls the wrong controller action
- Clear connect_request done_on to allow re-upgrading the peer on reconnection
- Don't add peers with empty address list to dial queue
- Don't cancel outgoing dials when receiving inbound connection from same peer
- Ensure discovery configuration is passed down to the networking module
- Fix peer and connection metrics when discovery is disabled
- Prevent address poisoning when discovery is enabled
- Prevent address spoofing in persistent peer detection
- Check for polka certificate to multiplex
PolkaValueoutput on step change - Ensure
PrecommitAnydoes not shadowPolkaNilandPolkaAnypending inputs - Ensure polka certificate is matched against a proposal for the same value
- Produce
InvalidProposalAndPolkaPreviouswhen receiving a polka certificate matching the POL round of a proposal with an invalid value
- Add
persistent_peers_onlyconfig option to allow connections ONLY from/to persistent peers - Add a mechanism to dump the network state
- Add application-specific peer scoring for Gossipsub to prioritize nodes based on their types, in mesh formation and maintenance
- Add network metrics for peer identification and tracking
- Add transport level connection limits
- Limit the number of peers that can connect from same IP address
- Implement
SigningProviderforArc<T>whereT: SigningProvider - Remove signing of proposal parts
- Fix partial range request not being tracked in pending requests
- Initial random (fixed) period adjustment in sync status ticker
- Refactor sync actor to notify consensus of sync responses
- Support batch retrieval of decided values
- Validate value request ranges before processing
November 19th, 2025
- Remove
Effect::GetValidatorSet,AppMsg::GetValidatorSetandHostMsg::GetValidatorSet(#1189) - Introduce
malachitebft-signingcrate for exposing theSigningProviderandSigningProviderExttraits (#1191) - Make
SigningProvidertrait methods fallible (#1191) - Make
SigningProvidertrait methods async (#1151) - Make GossipSub topic names configurable (#849)
- Fix bug in WAL recovery logic where a corrupted entry would not be detected in some circumstances (#1127)
- Add facility for app to request a consensus state dump at any time (#1176)
- Make libp2p protocol names configurable (#1161)
- Fix mismatched height of WAL entries emitted when processing
StartHeightinput (#1232)
July 31st, 2025
- Update libp2p to v0.56.x (#1124)
- Rename
Effect::RebroadcastVotetoEffect::RepublishVoteandEffect::RebroadcastRoundCertificatetoEffect::RepublishRoundCertificate(#1011) - Decouple
Hostmessages from theConsensusactor (#1109) - Fix a bug where values synced from other peers were assigned the current node's address instead of their proposer's address (#1141)
- Buffer sync values for heights higher than current height in consensus and replay when running consensus for those heights (#1149)
- Add value batching to sync messages (#1070)
July 8th, 2025
- Add parallel requests for the sync module (#1092)
July 7th, 2025
- Derive Borsh encoding for all core types, behind a
borshfeature flag (#1098) - Fixed a bug where the consensus engine would panic when the validator set is empty, now an error is properly emitted in the logs (#1111)
- When the sync module receives an invalid commit certificate from another peer, it will now drop the associated synced value altogether instead of passing it up to the application (#1112)
June 17th, 2025
- Removed the VoteSet synchronization protocol, as it is neither required nor sufficient for liveness (#998)
- Reply to
GetValidatorSetis now optional (#990) - Clarify and improve the application handling of multiple proposals for same height and round (#833)
- Prune votes and polka certificates that are from lower rounds than node's
locked_round(#1019) - Add support for making progress in the presence of equivocating proposals (#1018)
- Take minimum available height into account when requesting values from peers (#1074)
- Add peer scoring system to the sync module with customizable scoring strategy (#1072) See the corresponding PR for more details.
April 16th, 2025
- Add the capability to re-run consensus for a given height (#893)
- Verify polka certificates (#974)
- Use aggregated signatures in polka certificates (#915)
- Improve verification of commit certificates (#974)
April 9th, 2025
This is the first release of the Malachite consensus engine intended for general use. This version introduces production-ready functionality with improved performance and reliability.
- The tutorial for building a simple application on top of Malachite using the high-level channel-based API.
- ADR 003 describes the architecture adopted in Malachite for handling the propagation of proposed values.
- ADR 004 describes the coroutine effect system used in Malachite. It is relevant if you are interested in building your own engine on top of the core consensus implementation of Malachite.
December 19, 2024
First open-source release of Malachite. This initial version provides the foundational consensus implementation but is not recommended for production use.