Important
All crates were renamed from informalsystems-malachitebft-$crate to arc-malachitebft-$crate.
- Added new associated type
Timeoutsto theContexttrait (useLinearTimeoutsfor default implementation) (#1227) - Remove
initial_validator_setandinitial_heightfields fromParamsstruct (#1190)
- Changed
Driver::new()signature - removedtimeoutsparameter (#1227)- Old:
Driver::new(ctx, height, validator_set, timeouts, address, threshold_params) - New:
Driver::new(ctx, height, validator_set, address, threshold_params)
- Old:
- Removed
Driver::timeouts()method - timeouts are now accessed throughStateinstead (#1227) - Removed
timeoutsfield fromDriverstruct - Driver no longer stores or manages timeouts (#1227) - Changed
Driver::move_to_heightsignature frommove_to_height(Height, Validator_set, Timeouts)tomove_to_height(Height, Option<ValidatorSet>)(#1227)
- Removed
Effect::ResetTimeoutsvariant (#1227) - Changed
Input::StartHeightfromStartHeight(Height, ValidatorSet, bool)toStartHeight(Height, Option<ValidatorSet>, bool)(#1227) - Changed
State::reset_and_start_height()signature from(height, validator_set)to(height, validator_set: Option<ValidatorSet>)(#1227)
- Changed
Next::Startvariant fromStart(Height, ValidatorSet)toStart(Height, HeightParams)(#1227) - Changed
Next::Restartvariant fromRestart(Height, ValidatorSet)toRestart(Height, HeightParams)(#1227) - Changed
HostMsg::ConsensusReadyreply type from(Ctx::Height, Ctx::ValidatorSet)to(Ctx::Height, HeightParams<Ctx>)(#1227) - Changed
Msg::StartHeightfromStartHeight(Height, ValidatorSet)toStartHeight(Height, HeightParams)(#1227) - Changed
Msg::RestartHeightfromRestartHeight(Height, ValidatorSet)toRestartHeight(Height, HeightParams)(#1227) - Added
timeoutsfield toStatestruct - timeouts are now stored in State instead of Driver (#1227)
- Removed
TimeoutConfigstruct (#1227) - Removed
timeoutsfield fromConsensusConfigstruct (timeouts are now managed viaContext::Timeoutsassociated type) (#1227)
- Changed
AppMsg::ConsensusReadyreply type from(Ctx::Height, Ctx::ValidatorSet)to(Ctx::Height, HeightParams<Ctx>)(#1227) - Changed
ConsensusMsg::StartHeightfromStartHeight(Height, ValidatorSet)toStartHeight(Height, HeightParams)(#1227) - Changed
ConsensusMsg::RestartHeightfromRestartHeight(Height, ValidatorSet)toRestartHeight(Height, HeightParams)(#1227)
- Removed
Nodetrait
- Move
SigningProviderandSigningProviderExttraits into newmalachitebft-signingcrate (#1191)
- New crate exposing the
SigningProvidertrait (#1191) - Make methods of
SigningProviderandSigningProviderExttraits fallible (#1191) - Changed methods of
SigningProviderandSigningProviderExttraits toasync(#1151)
- Remove
GetValidatorSeteffect (#1189)
- Remove
HostMsg::GetValidatorSet(#1189)
- Added field
channel_names: ChannelNamestoNetworkConfigstruct (#849)
- Remove
AppMsg::GetValidatorSet(#1189) - Added field
requests: tokio::sync::mpsc::Sender<ConsensusRequest<Ctx>>toChannelsstruct (#1176)
July 31st, 2025
- Updated libp2p to v0.56.x (#1124)
- Changed type of field
replyof enum variantAppMsg::DecidedtoReply<malachitebft_engine::host::Next<Ctx>>(#1109)
- Changed tuple field of enum variant
HostMsg::ConsensusReadyto a field namedreply_toof typeRpcReplyPort<(Ctx::Height, Ctx::ValidatorSet)>(#1109) - Added field
reply_toto enum variantHostMsg::StartedRoundwith typeRpcReplyPort<Vec<ProposedValue<Ctx>>>(#1109) - Changed type of field
reply_toof enum variantHostMsg::DecidedtoRpcReplyPort<malachitebft_engine::host::Next<Ctx>>(#1109)
- Rename
Effect::RebroadcastVotetoEffect::RepublishVoteandEffect::RebroadcastRoundCertificatetoEffect::RepublishRoundCertificate(#1011) - Add new
Effect::SyncValuevariant to forward synced values to the application (#1149)
- Renamed
GetDecidedValuetoGetDecidedValuesinEffect.- Now it takes a range of heights instead of one, and the reply is a list (possibly empty) of decided values instead of one or zero.
- Renamed
GotDecidedValuetoGotDecidedValuesinMsgandInput.- Now it has as parameter a range of heights instead of one, and a list of decided values instead of one or zero.
- Added new parameter to
SyncRequestTimedOutinInput. - Renamed
Effect::RebroadcastVotetoEffect::RepublishVoteandEffect::RebroadcastRoundCertificatetoEffect::RepublishRoundCertificate(#1011) - Added new
Effect::SyncValuevariant to forward synced values to the application (#1149) - Removed
Input::CommitCertificatevariant (#1149) - Added new
Input::SyncValueResponsevariant to notify consensus of a sync value having been received via the sync protocol (#1149)
July 8th, 2025
- Added new sync parameters to config. See (#1092) for more details.
- Added new parallel requests related parameters to sync config. See (#1092) for more details.
July 7th, 2025
No breaking changes.
June 17th, 2025
- Removed the VoteSet synchronization protocol, as it is neither required nor sufficient for liveness. See (#998) for more details.
- Removed the VoteSet synchronization protocol, as it is neither required nor sufficient for liveness. See (#998) for more details.
- Added new variants to
Inputenum:PolkaCertificateandRoundCertificate - Added new variant to
Effectenum:PublishLivenessMessage
- Removed app-specific metrics from the
malachitebft-metricscrate (#1054)
- Removed the VoteSet synchronization protocol, as it is neither required nor sufficient for liveness. See (#998) for more details.
- Changed the reply channel of
GetValidatorSetmessage to take anOption<Ctx::ValidatorSet>instead ofCtx::ValidatorSet. - Added new variant to
Msgenum:PublishLivenessMsg - Added new variants to
NetworkEventenum:PolkaCertificateandRoundCertificate - Changed
PartStore::all_partstoPartStore::all_parts_by_stream_id:- Renamed method to clarify that, when a new part is received, the contiguous parts should be queried by stream id
- Added required
StreamIdparameter
- Added new public API
PartStore::all_parts_by_value_idto be used instead ofPartStore::all_partswhen a decision is reached - Added
&StreamIdparameter topart_store::PartStore::store - Added
&StreamIdparameter topart_store::PartStore::store_value_id - Changed semantics of
RestreamProposalvariant ofHostMsg: the value atroundshould be now be restreamed ifvalid_roundisNil
- Added new variant to
Channelenum:Liveness - Renamed
Event::Messagevariant toEvent::ConsensusMessage - Added new variant to
Event::LivenessMessage
- Removed the VoteSet synchronization protocol, as it is neither required nor sufficient for liveness. See (#998) for more details.
- The
start_enginefunction now takes twoCodecs: one for the WAL and one for the network.
- Remove
AggregatedSignaturetype - Rename field
aggregated_signatureofCommitCertificatetocommit_signatures - Remove field
votesofPolkaCertificate - Add field
polka_signaturestoPolkaCertificate - Rename
InvalidSignaturevariant ofCertificateErrortoInvalidCommitSignature - Add
InvalidPolkaSignatureandDuplicateVotevariants toCertificateError - Remove
verify_commit_signaturefromSigningProvider
- Add
VerifyPolkaCertificateeffect - Rename
Effect::VerifyCertificatetoEffect::VerifyCommitCertificate - Rename
Error::InvalidCertificatetoError::InvalidCommitCertificate
- Added new variants to
TimeoutKindenum:PrevoteRebroadcastandPrecommitRebroadcast.
- Removed the
Extensionstruct that was previously available atarc_malachitebft_core_types::Extension. - Removed the
extensionfield from theCommitSignaturestruct. - Changed
CommitSignature::new()method to take 2 parameters instead of 3.
-
Added associated constants to
Heighttrait without default values:Height::ZEROHeight::INITIAL
-
Added new associated type to
Contexttrait without a default value:Context::Extension
-
Removed associated type
Context::SigningProvider -
Added new methods to
SigningProvidertrait without default implementations:sign_vote_extensionverify_signed_vote_extension
-
Removed method
signing_providerfromContexttrait -
Changed parameter count for these
Contexttrait methods:new_proposal: now takes 6 parameters instead of 5new_prevote: now takes 5 parameters instead of 4new_precommit: now takes 5 parameters instead of 4
-
Added new fields to externally-constructible structs:
State.last_signed_prevoteState.last_signed_precommitState.decided_sentParams.vote_sync_mode
-
Removed public fields from structs:
- Removed
extensionfield fromProposedValue - Removed
signed_precommitsfield fromState - Removed
decisionfield fromState
- Removed
-
Removed structs:
ValueToProposehas been removed
-
Removed enums:
ValuePayloadhas been completely removed
-
Added new variants to existing enums:
- Added to
Error:DecisionNotFound,DriverProposalNotFound,FullProposalNotFound - Added to
Effect:Rebroadcast,RestreamProposal,RequestVoteSet,WalAppend,ExtendVote,VerifyVoteExtension - Added to
Resume:VoteExtension,VoteExtensionValidity
- Added to
-
Removed variants from enums:
- Removed from
Error:DecidedValueNotFound - Removed from
Effect:RestreamValue,GetVoteSet,PersistMessage,PersistTimeout
- Removed from
-
Modified enum tuple variants by adding fields:
- Added field to
Input::VoteSetResponse - Added field to
Effect::Decide - Added field to
Effect::SendVoteSetResponse
- Added field to
- Removed methods:
State::store_signed_precommitState::store_decisionState::full_proposals_for_valueState::remove_full_proposals
-
Added new field to externally-constructible struct:
VoteSetResponse.polka_certificates
-
Removed struct:
DecidedValuehas been completely removed
-
Added new variant to existing enum:
- Added to
Effect:GetDecidedValue
- Added to
-
Removed variant from enum:
- Removed from
Effect:GetValue
- Removed from
- Changed parameter count:
VoteSetResponse::newnow takes 4 parameters instead of 3
-
Removed enums:
WalEntryhas been completely removed from thewalmodule
-
Added new variants to existing enums:
- Added to
Msg:Dump - Added to
Event:Rebroadcast,WalReplayEntry,WalReplayError - Added to
HostMsg:ExtendVote,VerifyVoteExtension,PeerJoined,PeerLeft
- Added to
-
Removed variants from enums:
- Removed from
Msg:GetStatus - Removed from
Event:WalReplayConsensus,WalReplayTimeout
- Removed from
-
Modified enum variants:
- Added field
listen_addrsto struct variantState::Running - Added field
extensionsto struct variantHostMsg::Decided - Changed variant
StreamContent::Finto a different kind - Added field to tuple variant
Event::SentVoteSetResponse - Removed multiple fields from tuple variant
Msg::ProposeValue
- Added field
- Changed parameter count:
Node::newnow takes 7 parameters instead of 9Consensus::spawnnow takes 11 parameters instead of 10
- Removed struct:
LocallyProposedValuehas been removed from thehostmodule
-
Added new fields to externally-constructible structs:
- Added
eventsfield toChannels - Added
reply_valuefield toAppMsg::StartedRoundvariant - Added
extensionsfield toAppMsg::Decidedvariant
- Added
-
Added new variants to existing enums:
- Added to
ConsensusMsg:ReceivedProposedValue - Added to
AppMsg:ExtendVote,VerifyVoteExtension,PeerJoined,PeerLeft
- Added to
runis now calledstart_engine