Co-authored-by: Aleksandr Bezobchuk <alexanderbez@users.noreply.github.com>
This commit is contained in:
parent
feab9b6380
commit
c06d8d7bef
84
simapp/abci.go
Normal file
84
simapp/abci.go
Normal file
@ -0,0 +1,84 @@
|
||||
package simapp
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/rand"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
||||
abci "github.com/cometbft/cometbft/abci/types"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/baseapp"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
type (
|
||||
// VoteExtensionHandler defines a dummy vote extension handler for SimApp.
|
||||
//
|
||||
// NOTE: This implementation is solely used for testing purposes. DO NOT use
|
||||
// in a production application!
|
||||
VoteExtensionHandler struct{}
|
||||
|
||||
// VoteExtension defines the structure used to create a dummy vote extension.
|
||||
VoteExtension struct {
|
||||
Hash []byte
|
||||
Height int64
|
||||
Data []byte
|
||||
}
|
||||
)
|
||||
|
||||
func NewVoteExtensionHandler() *VoteExtensionHandler {
|
||||
return &VoteExtensionHandler{}
|
||||
}
|
||||
|
||||
func (h *VoteExtensionHandler) SetHandlers(bApp *baseapp.BaseApp) {
|
||||
bApp.SetExtendVoteHandler(h.ExtendVote())
|
||||
bApp.SetVerifyVoteExtensionHandler(h.VerifyVoteExtension())
|
||||
}
|
||||
|
||||
func (h *VoteExtensionHandler) ExtendVote() sdk.ExtendVoteHandler {
|
||||
return func(_ sdk.Context, req *abci.RequestExtendVote) (*abci.ResponseExtendVote, error) {
|
||||
buf := make([]byte, 1024)
|
||||
|
||||
_, err := rand.Read(buf)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to generate random vote extension data: %w", err)
|
||||
}
|
||||
|
||||
ve := VoteExtension{
|
||||
Hash: req.Hash,
|
||||
Height: req.Height,
|
||||
Data: buf,
|
||||
}
|
||||
|
||||
bz, err := json.Marshal(ve)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to encode vote extension: %w", err)
|
||||
}
|
||||
|
||||
return &abci.ResponseExtendVote{VoteExtension: bz}, nil
|
||||
}
|
||||
}
|
||||
|
||||
func (h *VoteExtensionHandler) VerifyVoteExtension() sdk.VerifyVoteExtensionHandler {
|
||||
return func(ctx sdk.Context, req *abci.RequestVerifyVoteExtension) (*abci.ResponseVerifyVoteExtension, error) {
|
||||
var ve VoteExtension
|
||||
|
||||
if err := json.Unmarshal(req.VoteExtension, &ve); err != nil {
|
||||
return &abci.ResponseVerifyVoteExtension{Status: abci.ResponseVerifyVoteExtension_REJECT}, nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case req.Height != ve.Height:
|
||||
return &abci.ResponseVerifyVoteExtension{Status: abci.ResponseVerifyVoteExtension_REJECT}, nil
|
||||
|
||||
case !bytes.Equal(req.Hash, ve.Hash):
|
||||
return &abci.ResponseVerifyVoteExtension{Status: abci.ResponseVerifyVoteExtension_REJECT}, nil
|
||||
|
||||
case len(ve.Data) != 1024:
|
||||
return &abci.ResponseVerifyVoteExtension{Status: abci.ResponseVerifyVoteExtension_REJECT}, nil
|
||||
}
|
||||
|
||||
return &abci.ResponseVerifyVoteExtension{Status: abci.ResponseVerifyVoteExtension_ACCEPT}, nil
|
||||
}
|
||||
}
|
||||
@ -9,25 +9,15 @@ import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"cosmossdk.io/log"
|
||||
"cosmossdk.io/x/tx/signing"
|
||||
|
||||
autocliv1 "cosmossdk.io/api/cosmos/autocli/v1"
|
||||
reflectionv1 "cosmossdk.io/api/cosmos/reflection/v1"
|
||||
"cosmossdk.io/client/v2/autocli"
|
||||
"cosmossdk.io/core/appmodule"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec/address"
|
||||
|
||||
authcodec "github.com/cosmos/cosmos-sdk/x/auth/codec"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth/tx"
|
||||
|
||||
abci "github.com/cometbft/cometbft/abci/types"
|
||||
dbm "github.com/cosmos/cosmos-db"
|
||||
"github.com/cosmos/gogoproto/proto"
|
||||
"github.com/spf13/cast"
|
||||
|
||||
"cosmossdk.io/log"
|
||||
storetypes "cosmossdk.io/store/types"
|
||||
"cosmossdk.io/x/circuit"
|
||||
circuitkeeper "cosmossdk.io/x/circuit/keeper"
|
||||
circuittypes "cosmossdk.io/x/circuit/types"
|
||||
"cosmossdk.io/x/evidence"
|
||||
evidencekeeper "cosmossdk.io/x/evidence/keeper"
|
||||
evidencetypes "cosmossdk.io/x/evidence/types"
|
||||
@ -37,20 +27,19 @@ import (
|
||||
"cosmossdk.io/x/nft"
|
||||
nftkeeper "cosmossdk.io/x/nft/keeper"
|
||||
nftmodule "cosmossdk.io/x/nft/module"
|
||||
"cosmossdk.io/x/tx/signing"
|
||||
"cosmossdk.io/x/upgrade"
|
||||
upgradekeeper "cosmossdk.io/x/upgrade/keeper"
|
||||
upgradetypes "cosmossdk.io/x/upgrade/types"
|
||||
|
||||
"cosmossdk.io/x/circuit"
|
||||
circuitkeeper "cosmossdk.io/x/circuit/keeper"
|
||||
circuittypes "cosmossdk.io/x/circuit/types"
|
||||
|
||||
abci "github.com/cometbft/cometbft/abci/types"
|
||||
dbm "github.com/cosmos/cosmos-db"
|
||||
"github.com/cosmos/cosmos-sdk/baseapp"
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||
"github.com/cosmos/cosmos-sdk/client/grpc/cmtservice"
|
||||
nodeservice "github.com/cosmos/cosmos-sdk/client/grpc/node"
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
"github.com/cosmos/cosmos-sdk/codec/address"
|
||||
"github.com/cosmos/cosmos-sdk/codec/types"
|
||||
"github.com/cosmos/cosmos-sdk/runtime"
|
||||
runtimeservices "github.com/cosmos/cosmos-sdk/runtime/services"
|
||||
@ -66,9 +55,11 @@ import (
|
||||
"github.com/cosmos/cosmos-sdk/version"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth/ante"
|
||||
authcodec "github.com/cosmos/cosmos-sdk/x/auth/codec"
|
||||
authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth/posthandler"
|
||||
authsims "github.com/cosmos/cosmos-sdk/x/auth/simulation"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth/tx"
|
||||
authtx "github.com/cosmos/cosmos-sdk/x/auth/tx"
|
||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth/vesting"
|
||||
@ -112,6 +103,8 @@ import (
|
||||
"github.com/cosmos/cosmos-sdk/x/staking"
|
||||
stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
|
||||
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
||||
"github.com/cosmos/gogoproto/proto"
|
||||
"github.com/spf13/cast"
|
||||
)
|
||||
|
||||
const appName = "SimApp"
|
||||
@ -273,6 +266,13 @@ func NewSimApp(
|
||||
// }
|
||||
// baseAppOptions = append(baseAppOptions, prepareOpt)
|
||||
|
||||
// create and set dummy vote extension handler
|
||||
voteExtOp := func(bApp *baseapp.BaseApp) {
|
||||
voteExtHandler := NewVoteExtensionHandler()
|
||||
voteExtHandler.SetHandlers(bApp)
|
||||
}
|
||||
baseAppOptions = append(baseAppOptions, voteExtOp)
|
||||
|
||||
bApp := baseapp.NewBaseApp(appName, logger, db, txConfig.TxDecoder(), baseAppOptions...)
|
||||
bApp.SetCommitMultiStoreTracer(traceStore)
|
||||
bApp.SetVersion(version.Version)
|
||||
|
||||
@ -198,6 +198,13 @@ func NewSimApp(
|
||||
// }
|
||||
// baseAppOptions = append(baseAppOptions, prepareOpt)
|
||||
|
||||
// create and set dummy vote extension handler
|
||||
voteExtOp := func(bApp *baseapp.BaseApp) {
|
||||
voteExtHandler := NewVoteExtensionHandler()
|
||||
voteExtHandler.SetHandlers(bApp)
|
||||
}
|
||||
baseAppOptions = append(baseAppOptions, voteExtOp)
|
||||
|
||||
app.App = appBuilder.Build(db, traceStore, baseAppOptions...)
|
||||
|
||||
// register streaming services
|
||||
|
||||
Loading…
Reference in New Issue
Block a user