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() }