39 lines
1.3 KiB
Go
39 lines
1.3 KiB
Go
package consensus
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
// RoundState mantém o estado atual da altura e rodada de consenso.
|
|
type RoundState struct {
|
|
Height uint64 // Altura atual do consenso (número do bloco)
|
|
Round uint64 // Rodada atual (tentativas por altura)
|
|
LockedBlock string // Hash do bloco "travado" (caso tenha precommit anterior)
|
|
Proposal string // Hash da proposta atual recebida
|
|
Prevotes map[string]string // Mapa[ValidatorID] = BlockHash (pode ser vazio)
|
|
Precommits map[string]string // Mapa[ValidatorID] = BlockHash
|
|
LastRoundStart time.Time // Controle de início da rodada
|
|
}
|
|
|
|
// NewRoundState cria um estado novo para uma altura específica.
|
|
func NewRoundState(height uint64) *RoundState {
|
|
return &RoundState{
|
|
Height: height,
|
|
Round: 0,
|
|
LockedBlock: "",
|
|
Proposal: "",
|
|
Prevotes: make(map[string]string),
|
|
Precommits: make(map[string]string),
|
|
LastRoundStart: time.Now(),
|
|
}
|
|
}
|
|
|
|
// ResetRound limpa os votos e proposta da rodada atual (usado ao iniciar nova rodada).
|
|
func (rs *RoundState) ResetRound(round uint64) {
|
|
rs.Round = round
|
|
rs.Proposal = ""
|
|
rs.Prevotes = make(map[string]string)
|
|
rs.Precommits = make(map[string]string)
|
|
rs.LastRoundStart = time.Now()
|
|
}
|