mirror of
https://github.com/tendermint/tendermint.git
synced 2026-02-06 03:50:46 +00:00
The work includes the reactor which ties together all the seperate routines involved in the design of the blockchain v2 refactor. This PR replaces #4067 which got far too large and messy after a failed attempt to rebase. ## Commits: * Blockchainv 2 reactor: + I cleaner copy of the work done in #4067 which fell too far behind and was a nightmare to rebase. + The work includes the reactor which ties together all the seperate routines involved in the design of the blockchain v2 refactor. * fixes after merge * reorder iIO interface methodset * change iO -> IO * panic before send nil block * rename switchToConsensus -> trySwitchToConsensus * rename tdState -> tmState * Update blockchain/v2/reactor.go Co-Authored-By: Bot from GolangCI <42910462+golangcibot@users.noreply.github.com> * remove peer when it sends a block unsolicited * check for not ready in markReceived * fix error * fix the pcFinished event * typo fix * add documentation for processor fields * simplify time.Since * try and make the linter happy * some doc updates * fix channel diagram * Update adr-043-blockchain-riri-org.md * panic on nil switch * liting fixes * account for nil block in bBlockResponseMessage * panic on duplicate block enqueued by processor * linting * goimport reactor_test.go Co-authored-by: Bot from GolangCI <42910462+golangcibot@users.noreply.github.com> Co-authored-by: Anca Zamfir <ancazamfir@users.noreply.github.com> Co-authored-by: Marko <marbar3778@yahoo.com> Co-authored-by: Anton Kaliaev <anton.kalyaev@gmail.com>
92 lines
2.3 KiB
Go
92 lines
2.3 KiB
Go
package v2
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/tendermint/tendermint/state"
|
|
"github.com/tendermint/tendermint/types"
|
|
)
|
|
|
|
type processorContext interface {
|
|
applyBlock(blockID types.BlockID, block *types.Block) error
|
|
verifyCommit(chainID string, blockID types.BlockID, height int64, commit *types.Commit) error
|
|
saveBlock(block *types.Block, blockParts *types.PartSet, seenCommit *types.Commit)
|
|
tmState() state.State
|
|
}
|
|
|
|
type pContext struct {
|
|
store blockStore
|
|
applier blockApplier
|
|
state state.State
|
|
}
|
|
|
|
func newProcessorContext(st blockStore, ex blockApplier, s state.State) *pContext {
|
|
return &pContext{
|
|
store: st,
|
|
applier: ex,
|
|
state: s,
|
|
}
|
|
}
|
|
|
|
func (pc *pContext) applyBlock(blockID types.BlockID, block *types.Block) error {
|
|
newState, err := pc.applier.ApplyBlock(pc.state, blockID, block)
|
|
pc.state = newState
|
|
return err
|
|
}
|
|
|
|
func (pc pContext) tmState() state.State {
|
|
return pc.state
|
|
}
|
|
|
|
func (pc pContext) verifyCommit(chainID string, blockID types.BlockID, height int64, commit *types.Commit) error {
|
|
return pc.state.Validators.VerifyCommit(chainID, blockID, height, commit)
|
|
}
|
|
|
|
func (pc *pContext) saveBlock(block *types.Block, blockParts *types.PartSet, seenCommit *types.Commit) {
|
|
pc.store.SaveBlock(block, blockParts, seenCommit)
|
|
}
|
|
|
|
type mockPContext struct {
|
|
applicationBL []int64
|
|
verificationBL []int64
|
|
state state.State
|
|
}
|
|
|
|
func newMockProcessorContext(
|
|
state state.State,
|
|
verificationBlackList []int64,
|
|
applicationBlackList []int64) *mockPContext {
|
|
return &mockPContext{
|
|
applicationBL: applicationBlackList,
|
|
verificationBL: verificationBlackList,
|
|
state: state,
|
|
}
|
|
}
|
|
|
|
func (mpc *mockPContext) applyBlock(blockID types.BlockID, block *types.Block) error {
|
|
for _, h := range mpc.applicationBL {
|
|
if h == block.Height {
|
|
return fmt.Errorf("generic application error")
|
|
}
|
|
}
|
|
mpc.state.LastBlockHeight = block.Height
|
|
return nil
|
|
}
|
|
|
|
func (mpc *mockPContext) verifyCommit(chainID string, blockID types.BlockID, height int64, commit *types.Commit) error {
|
|
for _, h := range mpc.verificationBL {
|
|
if h == height {
|
|
return fmt.Errorf("generic verification error")
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (mpc *mockPContext) saveBlock(block *types.Block, blockParts *types.PartSet, seenCommit *types.Commit) {
|
|
|
|
}
|
|
|
|
func (mpc *mockPContext) tmState() state.State {
|
|
return mpc.state
|
|
}
|