dir : consensus/state.go
: block을 직접 인수로 받지 않고 인스턴스에 저장된 값을 가져다 사용함.
check h, r, s
if cs.Height != height
|| round < cs.Round
|| (cs.Round == round && cstypes.RoundStepPrecommit <= cs.Step) {
// ...log err
return
}
defer func 선언
defer func() {
cs.updateRoundStep(round, cstypes.RoundStepPrecommit)
cs.newStep()
}()
maj block (polka라고도 함)을 확인, 가져옴
blockID, ok := cs.Votes.Prevotes(round).TwoThirdsMajority()
polka가 없다면 nil에 precommit 후 리턴
if !ok {
// ...
cs.signAddVote(tmproto.PrecommitType, nil, types.PartSetHeader{})
}
pol round 수를 가져옴
// round, blockID를 리턴하는데, 여기선 polRound만 필요
polRound, _ := cs.Votes.POLInfo()