- package factory
-
- import (
- "context"
- "testing"
- "time"
-
- "github.com/stretchr/testify/require"
-
- sm "github.com/tendermint/tendermint/internal/state"
- "github.com/tendermint/tendermint/internal/test/factory"
- "github.com/tendermint/tendermint/types"
- )
-
- func MakeBlocks(ctx context.Context, t *testing.T, n int, state *sm.State, privVal types.PrivValidator) []*types.Block {
- t.Helper()
-
- blocks := make([]*types.Block, n)
-
- var (
- prevBlock *types.Block
- prevBlockMeta *types.BlockMeta
- )
-
- appHeight := byte(0x01)
- for i := 0; i < n; i++ {
- height := int64(i + 1)
-
- block, parts := makeBlockAndPartSet(ctx, t, *state, prevBlock, prevBlockMeta, privVal, height)
-
- blocks[i] = block
-
- prevBlock = block
- prevBlockMeta = types.NewBlockMeta(block, parts)
-
- // update state
- state.AppHash = []byte{appHeight}
- appHeight++
- state.LastBlockHeight = height
- }
-
- return blocks
- }
-
- func MakeBlock(state sm.State, height int64, c *types.Commit) (*types.Block, error) {
- block, _, err := state.MakeBlock(
- height,
- factory.MakeTenTxs(state.LastBlockHeight),
- c,
- nil,
- state.Validators.GetProposer().Address,
- )
- if err != nil {
- return nil, err
- }
-
- return block, nil
- }
-
- func makeBlockAndPartSet(
- ctx context.Context,
- t *testing.T,
- state sm.State,
- lastBlock *types.Block,
- lastBlockMeta *types.BlockMeta,
- privVal types.PrivValidator,
- height int64,
- ) (*types.Block, *types.PartSet) {
- t.Helper()
-
- lastCommit := types.NewCommit(height-1, 0, types.BlockID{}, nil)
- if height > 1 {
- vote, err := factory.MakeVote(
- ctx,
- privVal,
- lastBlock.Header.ChainID,
- 1, lastBlock.Header.Height, 0, 2,
- lastBlockMeta.BlockID,
- time.Now())
- require.NoError(t, err)
- lastCommit = types.NewCommit(vote.Height, vote.Round,
- lastBlockMeta.BlockID, []types.CommitSig{vote.CommitSig()})
- }
-
- block, partSet, err := state.MakeBlock(height, []types.Tx{}, lastCommit, nil, state.Validators.GetProposer().Address)
- require.NoError(t, err)
-
- return block, partSet
- }
|