-
Notifications
You must be signed in to change notification settings - Fork 135
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
chore(cometBFTService): simplified CometBFTService #2026
Changes from 14 commits
445b8b7
7e66eed
affdafa
cfe9f30
7189e64
69af02c
1edcce6
f54e688
e14ac8c
a2d8d4e
d0834cc
f4b97a5
f7e82fd
f943e95
b679d11
cfec782
7621133
4f9dd82
57e8eab
6e5b289
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -42,7 +42,11 @@ import ( | |||||||||||||||||||||
"github.com/sourcegraph/conc/iter" | ||||||||||||||||||||||
) | ||||||||||||||||||||||
|
||||||||||||||||||||||
//nolint:gocognit // todo fix. | ||||||||||||||||||||||
var ( | ||||||||||||||||||||||
errInvalidHeight = errors.New("invalid height") | ||||||||||||||||||||||
errNilFinalizeBlockState = errors.New("finalizeBlockState is nil") | ||||||||||||||||||||||
) | ||||||||||||||||||||||
|
||||||||||||||||||||||
func (s *Service[LoggerT]) InitChain( | ||||||||||||||||||||||
_ context.Context, | ||||||||||||||||||||||
req *cmtabci.InitChainRequest, | ||||||||||||||||||||||
|
@@ -57,7 +61,6 @@ func (s *Service[LoggerT]) InitChain( | |||||||||||||||||||||
|
||||||||||||||||||||||
// On a new chain, we consider the init chain block height as 0, even though | ||||||||||||||||||||||
// req.InitialHeight is 1 by default. | ||||||||||||||||||||||
initHeader := cmtproto.Header{ChainID: req.ChainId, Time: req.Time} | ||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||||||||||||||||||||||
s.logger.Info( | ||||||||||||||||||||||
"InitChain", | ||||||||||||||||||||||
"initialHeight", | ||||||||||||||||||||||
|
@@ -67,98 +70,95 @@ func (s *Service[LoggerT]) InitChain( | |||||||||||||||||||||
) | ||||||||||||||||||||||
|
||||||||||||||||||||||
// Set the initial height, which will be used to determine if we are | ||||||||||||||||||||||
// proposing | ||||||||||||||||||||||
// or processing the first block or not. | ||||||||||||||||||||||
// proposing or processing the first block or not. | ||||||||||||||||||||||
nidhi-singh02 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||
s.initialHeight = req.InitialHeight | ||||||||||||||||||||||
if s.initialHeight == 0 { // If initial height is 0, set it to 1 | ||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. non informative comment, dropped |
||||||||||||||||||||||
if s.initialHeight == 0 { | ||||||||||||||||||||||
s.initialHeight = 1 | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
// if req.InitialHeight is > 1, then we set the initial version on all | ||||||||||||||||||||||
// stores | ||||||||||||||||||||||
if req.InitialHeight > 1 { | ||||||||||||||||||||||
initHeader.Height = req.InitialHeight | ||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this is not really needed since Height will be overwritten in defer and initHeader is only read in defer. |
||||||||||||||||||||||
if err := s.sm.CommitMultiStore(). | ||||||||||||||||||||||
SetInitialVersion(req.InitialHeight); err != nil { | ||||||||||||||||||||||
return nil, err | ||||||||||||||||||||||
} | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
s.setState(execModeFinalize) | ||||||||||||||||||||||
s.finalizeBlockState = s.resetState() | ||||||||||||||||||||||
|
||||||||||||||||||||||
defer func() { | ||||||||||||||||||||||
// InitChain represents the state of the application BEFORE the first | ||||||||||||||||||||||
// block, i.e. the genesis block. This means that when processing the | ||||||||||||||||||||||
// app's InitChain handler, the block height is zero by default. | ||||||||||||||||||||||
// However, after Commit is called | ||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: |
||||||||||||||||||||||
// the height needs to reflect the true block height. | ||||||||||||||||||||||
initHeader.Height = req.InitialHeight | ||||||||||||||||||||||
// However, after genesis is handled the height needs to reflect | ||||||||||||||||||||||
// the true block height. | ||||||||||||||||||||||
initHeader := cmtproto.Header{ | ||||||||||||||||||||||
nidhi-singh02 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||
ChainID: req.ChainId, | ||||||||||||||||||||||
Time: req.Time, | ||||||||||||||||||||||
Height: req.InitialHeight, | ||||||||||||||||||||||
} | ||||||||||||||||||||||
s.finalizeBlockState.SetContext( | ||||||||||||||||||||||
s.finalizeBlockState.Context().WithBlockHeader(initHeader), | ||||||||||||||||||||||
) | ||||||||||||||||||||||
}() | ||||||||||||||||||||||
|
||||||||||||||||||||||
if s.finalizeBlockState == nil { | ||||||||||||||||||||||
return nil, errors.New("finalizeBlockState is nil") | ||||||||||||||||||||||
} | ||||||||||||||||||||||
Comment on lines
-102
to
-104
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. redundant check since s.setState(execModeFinalize) is called right before. We don't do these checks after setState is called for proposals. |
||||||||||||||||||||||
|
||||||||||||||||||||||
res, err := s.initChainer(s.finalizeBlockState.Context(), req) | ||||||||||||||||||||||
resValidators, err := s.initChainer( | ||||||||||||||||||||||
s.finalizeBlockState.Context(), | ||||||||||||||||||||||
req.AppStateBytes, | ||||||||||||||||||||||
) | ||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||
return nil, err | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
if res == nil { | ||||||||||||||||||||||
// check validators | ||||||||||||||||||||||
if len(resValidators) == 0 { | ||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this is an hollow check, since we generate res in initChainer (it's not the result of s.Middleware.InitGenesis). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. another point is that we may have a stricter check here and enforce that we always have at least a validator? |
||||||||||||||||||||||
return nil, errors.New( | ||||||||||||||||||||||
"application init chain handler returned a nil response", | ||||||||||||||||||||||
"application init chain handler returned no validators", | ||||||||||||||||||||||
) | ||||||||||||||||||||||
} | ||||||||||||||||||||||
if len(req.Validators) != len(resValidators) { | ||||||||||||||||||||||
return nil, fmt.Errorf( | ||||||||||||||||||||||
"len(RequestInitChain.Validators) != len(GenesisValidators) (%d != %d)", | ||||||||||||||||||||||
len(req.Validators), | ||||||||||||||||||||||
len(resValidators), | ||||||||||||||||||||||
) | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
if len(req.Validators) > 0 { | ||||||||||||||||||||||
if len(req.Validators) != len(res.Validators) { | ||||||||||||||||||||||
return nil, fmt.Errorf( | ||||||||||||||||||||||
"len(RequestInitChain.Validators) != len(GenesisValidators) (%d != %d)", | ||||||||||||||||||||||
len(req.Validators), | ||||||||||||||||||||||
len(res.Validators), | ||||||||||||||||||||||
) | ||||||||||||||||||||||
sort.Sort(cmtabci.ValidatorUpdates(req.Validators)) | ||||||||||||||||||||||
|
||||||||||||||||||||||
for i := range resValidators { | ||||||||||||||||||||||
if req.Validators[i].Power != resValidators[i].Power { | ||||||||||||||||||||||
return nil, errors.New("mismatched power") | ||||||||||||||||||||||
} | ||||||||||||||||||||||
if !bytes.Equal( | ||||||||||||||||||||||
req.Validators[i].PubKeyBytes, resValidators[i]. | ||||||||||||||||||||||
PubKeyBytes) { | ||||||||||||||||||||||
return nil, errors.New("mismatched pubkey bytes") | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
sort.Sort(cmtabci.ValidatorUpdates(req.Validators)) | ||||||||||||||||||||||
|
||||||||||||||||||||||
for i := range res.Validators { | ||||||||||||||||||||||
if req.Validators[i].Power != res.Validators[i].Power { | ||||||||||||||||||||||
return nil, errors.New("mismatched power") | ||||||||||||||||||||||
} | ||||||||||||||||||||||
if !bytes.Equal( | ||||||||||||||||||||||
req.Validators[i].PubKeyBytes, res.Validators[i]. | ||||||||||||||||||||||
PubKeyBytes) { | ||||||||||||||||||||||
return nil, errors.New("mismatched pubkey bytes") | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
if req. | ||||||||||||||||||||||
Validators[i].PubKeyType != res. | ||||||||||||||||||||||
Validators[i].PubKeyType { | ||||||||||||||||||||||
return nil, errors.New("mismatched pubkey types") | ||||||||||||||||||||||
} | ||||||||||||||||||||||
if req.Validators[i].PubKeyType != | ||||||||||||||||||||||
resValidators[i].PubKeyType { | ||||||||||||||||||||||
return nil, errors.New("mismatched pubkey types") | ||||||||||||||||||||||
abi87 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||
} | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
// NOTE: We don't commit, but FinalizeBlock for block InitialHeight starts | ||||||||||||||||||||||
// from | ||||||||||||||||||||||
// this FinalizeBlockState. | ||||||||||||||||||||||
// from this FinalizeBlockState. | ||||||||||||||||||||||
return &cmtabci.InitChainResponse{ | ||||||||||||||||||||||
ConsensusParams: res.ConsensusParams, | ||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||||||||||||||||||||||
Validators: res.Validators, | ||||||||||||||||||||||
ConsensusParams: req.ConsensusParams, | ||||||||||||||||||||||
Validators: resValidators, | ||||||||||||||||||||||
AppHash: s.sm.CommitMultiStore().LastCommitID().Hash, | ||||||||||||||||||||||
}, nil | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
// InitChainer initializes the chain. | ||||||||||||||||||||||
func (s *Service[LoggerT]) initChainer( | ||||||||||||||||||||||
ctx sdk.Context, | ||||||||||||||||||||||
req *cmtabci.InitChainRequest, | ||||||||||||||||||||||
) (*cmtabci.InitChainResponse, error) { | ||||||||||||||||||||||
appStateBytes []byte, | ||||||||||||||||||||||
) ([]cmtabci.ValidatorUpdate, error) { | ||||||||||||||||||||||
var genesisState map[string]json.RawMessage | ||||||||||||||||||||||
if err := json.Unmarshal(req.AppStateBytes, &genesisState); err != nil { | ||||||||||||||||||||||
if err := json.Unmarshal(appStateBytes, &genesisState); err != nil { | ||||||||||||||||||||||
return nil, err | ||||||||||||||||||||||
} | ||||||||||||||||||||||
valUpdates, err := s.Middleware.InitGenesis( | ||||||||||||||||||||||
|
@@ -169,17 +169,10 @@ func (s *Service[LoggerT]) initChainer( | |||||||||||||||||||||
return nil, err | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
convertedValUpdates, err := iter.MapErr( | ||||||||||||||||||||||
return iter.MapErr( | ||||||||||||||||||||||
valUpdates, | ||||||||||||||||||||||
convertValidatorUpdate[cmtabci.ValidatorUpdate], | ||||||||||||||||||||||
) | ||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||
return nil, err | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
return &cmtabci.InitChainResponse{ | ||||||||||||||||||||||
Validators: convertedValUpdates, | ||||||||||||||||||||||
}, nil | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
func (s *Service[LoggerT]) Info( | ||||||||||||||||||||||
|
@@ -214,13 +207,16 @@ func (s *Service[LoggerT]) PrepareProposal( | |||||||||||||||||||||
_ context.Context, | ||||||||||||||||||||||
req *cmtabci.PrepareProposalRequest, | ||||||||||||||||||||||
) (*cmtabci.PrepareProposalResponse, error) { | ||||||||||||||||||||||
s.setState(execModePrepareProposal) | ||||||||||||||||||||||
|
||||||||||||||||||||||
// CometBFT must never call PrepareProposal with a height of 0. | ||||||||||||||||||||||
if req.Height < 1 { | ||||||||||||||||||||||
return nil, errors.New("PrepareProposal called with invalid height") | ||||||||||||||||||||||
return nil, fmt.Errorf( | ||||||||||||||||||||||
"prepareProposal, height %v: %w", | ||||||||||||||||||||||
req.Height, | ||||||||||||||||||||||
errInvalidHeight, | ||||||||||||||||||||||
) | ||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Correct Error Formatting in When using Suggested Change: -return nil, fmt.Errorf(
- "prepareProposal, height %v: %w",
- req.Height,
- errInvalidHeight,
-)
+return nil, fmt.Errorf(
+ "prepareProposal at height %v: %w",
+ req.Height,
+ errInvalidHeight,
+) 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
s.prepareProposalState = s.resetState() | ||||||||||||||||||||||
s.prepareProposalState.SetContext( | ||||||||||||||||||||||
s.getContextForProposal( | ||||||||||||||||||||||
s.prepareProposalState.Context(), | ||||||||||||||||||||||
|
@@ -262,20 +258,21 @@ func (s *Service[LoggerT]) ProcessProposal( | |||||||||||||||||||||
) (*cmtabci.ProcessProposalResponse, error) { | ||||||||||||||||||||||
// CometBFT must never call ProcessProposal with a height of 0. | ||||||||||||||||||||||
if req.Height < 1 { | ||||||||||||||||||||||
return nil, errors.New("ProcessProposal called with invalid height") | ||||||||||||||||||||||
return nil, fmt.Errorf( | ||||||||||||||||||||||
"processProposal, height %v: %w", | ||||||||||||||||||||||
req.Height, | ||||||||||||||||||||||
errInvalidHeight, | ||||||||||||||||||||||
) | ||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Correct Error Formatting in As in Suggested Change: -return nil, fmt.Errorf(
- "processProposal, height %v: %w",
- req.Height,
- errInvalidHeight,
-)
+return nil, fmt.Errorf(
+ "processProposal at height %v: %w",
+ req.Height,
+ errInvalidHeight,
+) 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
s.setState(execModeProcessProposal) | ||||||||||||||||||||||
|
||||||||||||||||||||||
// Since the application can get access to FinalizeBlock state and write to | ||||||||||||||||||||||
// it, we must be sure to reset it in case ProcessProposal timeouts and is | ||||||||||||||||||||||
// called | ||||||||||||||||||||||
// again in a subsequent round. However, we only want to do this after we've | ||||||||||||||||||||||
// processed the first block, as we want to avoid overwriting the | ||||||||||||||||||||||
// finalizeState | ||||||||||||||||||||||
// after state changes during InitChain. | ||||||||||||||||||||||
// called again in a subsequent round. However, we only want to do this | ||||||||||||||||||||||
// after we've processed the first block, as we want to avoid overwriting | ||||||||||||||||||||||
// the finalizeState after state changes during InitChain. | ||||||||||||||||||||||
s.processProposalState = s.resetState() | ||||||||||||||||||||||
if req.Height > s.initialHeight { | ||||||||||||||||||||||
s.setState(execModeFinalize) | ||||||||||||||||||||||
s.finalizeBlockState = s.resetState() | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
s.processProposalState.SetContext( | ||||||||||||||||||||||
|
@@ -317,12 +314,7 @@ func (s *Service[LoggerT]) internalFinalizeBlock( | |||||||||||||||||||||
return nil, err | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
if s.finalizeBlockState == nil { | ||||||||||||||||||||||
s.setState(execModeFinalize) | ||||||||||||||||||||||
} | ||||||||||||||||||||||
if s.finalizeBlockState == nil { | ||||||||||||||||||||||
return nil, errors.New("finalizeBlockState is nil") | ||||||||||||||||||||||
} | ||||||||||||||||||||||
Comment on lines
-321
to
-323
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. redundant check since |
||||||||||||||||||||||
s.finalizeBlockState = s.resetState() | ||||||||||||||||||||||
|
||||||||||||||||||||||
// First check for an abort signal after beginBlock, as it's the first place | ||||||||||||||||||||||
// we spend any significant amount of time. | ||||||||||||||||||||||
|
@@ -394,7 +386,11 @@ func (s *Service[_]) validateFinalizeBlockHeight( | |||||||||||||||||||||
req *cmtabci.FinalizeBlockRequest, | ||||||||||||||||||||||
) error { | ||||||||||||||||||||||
if req.Height < 1 { | ||||||||||||||||||||||
return fmt.Errorf("invalid height: %d", req.Height) | ||||||||||||||||||||||
return fmt.Errorf( | ||||||||||||||||||||||
"finalizeBlock, height %v: %w", | ||||||||||||||||||||||
req.Height, | ||||||||||||||||||||||
errInvalidHeight, | ||||||||||||||||||||||
) | ||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Correct Error Formatting in Ensure proper error wrapping by adjusting the use of Suggested Change: -return fmt.Errorf(
- "finalizeBlock, height %v: %w",
- req.Height,
- errInvalidHeight,
-)
+return fmt.Errorf(
+ "finalizeBlock at height %v: %w",
+ req.Height,
+ errInvalidHeight,
+) 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
lastBlockHeight := s.LastBlockHeight() | ||||||||||||||||||||||
|
@@ -449,7 +445,7 @@ func (s *Service[LoggerT]) Commit( | |||||||||||||||||||||
context.Context, *cmtabci.CommitRequest, | ||||||||||||||||||||||
) (*cmtabci.CommitResponse, error) { | ||||||||||||||||||||||
if s.finalizeBlockState == nil { | ||||||||||||||||||||||
return nil, errors.New("finalizeBlockState is nil") | ||||||||||||||||||||||
return nil, fmt.Errorf("commit: %w", errNilFinalizeBlockState) | ||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Improve Error Message in Provide a more descriptive error message when Suggested Change: -return nil, fmt.Errorf("commit: %w", errNilFinalizeBlockState)
+return nil, fmt.Errorf("commit failed: %w", errNilFinalizeBlockState) 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||
} | ||||||||||||||||||||||
header := s.finalizeBlockState.Context().BlockHeader() | ||||||||||||||||||||||
retainHeight := s.GetBlockRetentionHeight(header.Height) | ||||||||||||||||||||||
|
@@ -484,7 +480,7 @@ func (s *Service[LoggerT]) workingHash() []byte { | |||||||||||||||||||||
// MultiStore (s.sm.CommitMultiStore()) so when Commit() is called it | ||||||||||||||||||||||
// persists those values. | ||||||||||||||||||||||
if s.finalizeBlockState == nil { | ||||||||||||||||||||||
panic("workingHash() called before FinalizeBlock()") | ||||||||||||||||||||||
panic(fmt.Errorf("workingHash: %w", errNilFinalizeBlockState)) | ||||||||||||||||||||||
abi87 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||
} | ||||||||||||||||||||||
s.finalizeBlockState.ms.Write() | ||||||||||||||||||||||
|
||||||||||||||||||||||
|
@@ -507,14 +503,11 @@ func (s *Service[LoggerT]) getContextForProposal( | |||||||||||||||||||||
ctx sdk.Context, | ||||||||||||||||||||||
height int64, | ||||||||||||||||||||||
) sdk.Context { | ||||||||||||||||||||||
if height == s.initialHeight { | ||||||||||||||||||||||
if s.finalizeBlockState == nil { | ||||||||||||||||||||||
return ctx | ||||||||||||||||||||||
} | ||||||||||||||||||||||
ctx, _ = s.finalizeBlockState.Context().CacheContext() | ||||||||||||||||||||||
if height != s.initialHeight || s.finalizeBlockState == nil { | ||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: reduced indentation. This is really a personal preference, I am happy to revert it if we like the current version better |
||||||||||||||||||||||
return ctx | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
ctx, _ = s.finalizeBlockState.Context().CacheContext() | ||||||||||||||||||||||
abi87 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||
return ctx | ||||||||||||||||||||||
} | ||||||||||||||||||||||
|
||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
@@ -23,7 +23,6 @@ package cometbft | |||||||||
import ( | ||||||||||
"context" | ||||||||||
"errors" | ||||||||||
"fmt" | ||||||||||
|
||||||||||
storetypes "cosmossdk.io/store/types" | ||||||||||
servercmtlog "github.com/berachain/beacon-kit/mod/consensus/pkg/cometbft/service/log" | ||||||||||
|
@@ -44,16 +43,6 @@ import ( | |||||||||
"github.com/cosmos/cosmos-sdk/version" | ||||||||||
) | ||||||||||
|
||||||||||
type ( | ||||||||||
execMode uint8 | ||||||||||
) | ||||||||||
|
||||||||||
const ( | ||||||||||
execModePrepareProposal execMode = iota | ||||||||||
execModeProcessProposal | ||||||||||
execModeFinalize | ||||||||||
) | ||||||||||
|
||||||||||
const InitialAppVersion uint64 = 0 | ||||||||||
|
||||||||||
type Service[ | ||||||||||
|
@@ -72,8 +61,11 @@ type Service[ | |||||||||
finalizeBlockState *state | ||||||||||
interBlockCache storetypes.MultiStorePersistentCache | ||||||||||
paramStore *params.ConsensusParamsStore | ||||||||||
initialHeight int64 | ||||||||||
minRetainBlocks uint64 | ||||||||||
|
||||||||||
// initialHeight is used to determine if we are | ||||||||||
// proposing or processing the first block or not. | ||||||||||
initialHeight int64 | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I like an explanation of attributes where we declare them. Happy to revert if we don't agree on this (or it breaks codebase conventions) |
||||||||||
minRetainBlocks uint64 | ||||||||||
|
||||||||||
// application's version string | ||||||||||
version string | ||||||||||
|
@@ -212,26 +204,16 @@ func (s *Service[_]) setInterBlockCache( | |||||||||
s.interBlockCache = cache | ||||||||||
} | ||||||||||
|
||||||||||
func (s *Service[LoggerT]) setState(mode execMode) { | ||||||||||
// resetState provides a fresh state which can be used to reset | ||||||||||
// prepareProposal/processProposal/finalizeBlock State. | ||||||||||
// A state is explicitly returned to avoid false positives from | ||||||||||
// nilaway tool. | ||||||||||
Comment on lines
+219
to
+220
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧹 Nitpick (assertive) Clarify the comment regarding static analysis tool. The comment references the "nilaway tool," which might be unclear or incorrectly named. For better clarity, consider specifying the correct tool name or generalizing the statement. Suggested revision: -// A state is explicitly returned to avoid false positives from
-// nilaway tool.
+// Explicitly returning the state helps avoid false positives from
+// static analysis tools that check for nil references. 📝 Committable suggestion
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I like being specific (a different tool may give different results) but @itsdevbear and @ocnc may have a different opinion There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||||||||||
func (s *Service[LoggerT]) resetState() *state { | ||||||||||
ms := s.sm.CommitMultiStore().CacheMultiStore() | ||||||||||
baseState := &state{ | ||||||||||
return &state{ | ||||||||||
ms: ms, | ||||||||||
ctx: sdk.NewContext(ms, false, servercmtlog.WrapSDKLogger(s.logger)), | ||||||||||
} | ||||||||||
Comment on lines
+217
to
226
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧹 Nitpick (assertive) LGTM! Consider clarifying the comment about static analysis. The The comment explaining the purpose of explicitly returning the state is helpful. However, it could be more specific about which static analysis tool it's referring to. Consider updating the comment to be more specific: // resetState provides a fresh state which can be used to reset
// prepareProposal/processProposal/finalizeBlock State.
// A state is explicitly returned to avoid false positives from
// static analysis tools that check for nil references (e.g., nilaway). |
||||||||||
|
||||||||||
switch mode { | ||||||||||
case execModePrepareProposal: | ||||||||||
s.prepareProposalState = baseState | ||||||||||
|
||||||||||
case execModeProcessProposal: | ||||||||||
s.processProposalState = baseState | ||||||||||
|
||||||||||
case execModeFinalize: | ||||||||||
s.finalizeBlockState = baseState | ||||||||||
|
||||||||||
default: | ||||||||||
panic(fmt.Sprintf("invalid runTxMode for setState: %d", mode)) | ||||||||||
} | ||||||||||
} | ||||||||||
|
||||||||||
// convertValidatorUpdate abstracts the conversion of a | ||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
side-effect of
InitChain
changes