mirror of
https://github.com/QuilibriumNetwork/ceremonyclient.git
synced 2026-02-21 10:27:26 +08:00
* wip: conversion of hotstuff from flow into Q-oriented model * bulk of tests * remaining non-integration tests * add integration test, adjust log interface, small tweaks * further adjustments, restore full pacemaker shape * add component lifecycle management+supervisor * further refinements * resolve timeout hanging * mostly finalized state for consensus * bulk of engine swap out * lifecycle-ify most types * wiring nearly complete, missing needed hooks for proposals * plugged in, vetting message validation paths * global consensus, plugged in and verified * app shard now wired in too * do not decode empty keys.yml (#456) * remove obsolete engine.maxFrames config parameter (#454) * default to Info log level unless debug is enabled (#453) * respect config's "logging" section params, remove obsolete single-file logging (#452) * Trivial code cleanup aiming to reduce Go compiler warnings (#451) * simplify range traversal * simplify channel read for single select case * delete rand.Seed() deprecated in Go 1.20 and no-op as of Go 1.24 * simplify range traversal * simplify channel read for single select case * remove redundant type from array * simplify range traversal * simplify channel read for single select case * RC slate * finalize 2.1.0.5 * Update comments in StrictMonotonicCounter Fix comment formatting and clarify description. --------- Co-authored-by: Black Swan <3999712+blacks1ne@users.noreply.github.com>
110 lines
2.5 KiB
Go
110 lines
2.5 KiB
Go
package integration
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"source.quilibrium.com/quilibrium/monorepo/consensus"
|
|
"source.quilibrium.com/quilibrium/monorepo/consensus/helper"
|
|
"source.quilibrium.com/quilibrium/monorepo/consensus/models"
|
|
"source.quilibrium.com/quilibrium/monorepo/consensus/pacemaker/timeout"
|
|
)
|
|
|
|
var errStopCondition = errors.New("stop condition reached")
|
|
|
|
type Option func(*Config)
|
|
|
|
type Config struct {
|
|
Logger consensus.TraceLogger
|
|
Root *models.State[*helper.TestState]
|
|
Participants []models.WeightedIdentity
|
|
LocalID models.Identity
|
|
Timeouts timeout.Config
|
|
IncomingVotes VoteFilter
|
|
OutgoingVotes VoteFilter
|
|
IncomingTimeoutStates TimeoutStateFilter
|
|
OutgoingTimeoutStates TimeoutStateFilter
|
|
IncomingProposals ProposalFilter
|
|
OutgoingProposals ProposalFilter
|
|
|
|
StopCondition Condition
|
|
}
|
|
|
|
func WithRoot(root *models.State[*helper.TestState]) Option {
|
|
return func(cfg *Config) {
|
|
cfg.Root = root
|
|
}
|
|
}
|
|
|
|
func WithParticipants(participants []models.WeightedIdentity) Option {
|
|
return func(cfg *Config) {
|
|
cfg.Participants = participants
|
|
}
|
|
}
|
|
|
|
func WithLocalID(localID models.Identity) Option {
|
|
return func(cfg *Config) {
|
|
cfg.LocalID = localID
|
|
cfg.Logger = cfg.Logger.With(consensus.IdentityParam("self", localID))
|
|
}
|
|
}
|
|
|
|
func WithTimeouts(timeouts timeout.Config) Option {
|
|
return func(cfg *Config) {
|
|
cfg.Timeouts = timeouts
|
|
}
|
|
}
|
|
|
|
func WithBufferLogger() Option {
|
|
return func(cfg *Config) {
|
|
cfg.Logger = helper.BufferLogger()
|
|
}
|
|
}
|
|
|
|
func WithLoggerParams(params ...consensus.LogParam) Option {
|
|
return func(cfg *Config) {
|
|
cfg.Logger = cfg.Logger.With(params...)
|
|
}
|
|
}
|
|
|
|
func WithIncomingVotes(Filter VoteFilter) Option {
|
|
return func(cfg *Config) {
|
|
cfg.IncomingVotes = Filter
|
|
}
|
|
}
|
|
|
|
func WithOutgoingVotes(Filter VoteFilter) Option {
|
|
return func(cfg *Config) {
|
|
cfg.OutgoingVotes = Filter
|
|
}
|
|
}
|
|
|
|
func WithIncomingProposals(Filter ProposalFilter) Option {
|
|
return func(cfg *Config) {
|
|
cfg.IncomingProposals = Filter
|
|
}
|
|
}
|
|
|
|
func WithOutgoingProposals(Filter ProposalFilter) Option {
|
|
return func(cfg *Config) {
|
|
cfg.OutgoingProposals = Filter
|
|
}
|
|
}
|
|
|
|
func WithIncomingTimeoutStates(Filter TimeoutStateFilter) Option {
|
|
return func(cfg *Config) {
|
|
cfg.IncomingTimeoutStates = Filter
|
|
}
|
|
}
|
|
|
|
func WithOutgoingTimeoutStates(Filter TimeoutStateFilter) Option {
|
|
return func(cfg *Config) {
|
|
cfg.OutgoingTimeoutStates = Filter
|
|
}
|
|
}
|
|
|
|
func WithStopCondition(stop Condition) Option {
|
|
return func(cfg *Config) {
|
|
cfg.StopCondition = stop
|
|
}
|
|
}
|