feat: gRPC mempool service (#275)

* make file nit

* base app set up

* make file update

* makefile nit

* adding service test to e2e

* lint

* type fix

* nit

* unit test + readme
This commit is contained in:
David Terpay
2023-12-08 13:33:58 -05:00
committed by GitHub
parent 56eeeb3ea2
commit 7d8a6956a7
14 changed files with 1280 additions and 39 deletions
+72
View File
@@ -2,7 +2,11 @@ package testutils
import (
"math/rand"
"testing"
"cosmossdk.io/log"
"cosmossdk.io/math"
storetypes "cosmossdk.io/store/types"
txsigning "cosmossdk.io/x/tx/signing"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/codec"
@@ -12,6 +16,7 @@ import (
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
"github.com/cosmos/cosmos-sdk/testutil"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/tx/signing"
authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing"
@@ -20,6 +25,13 @@ import (
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
"github.com/cosmos/gogoproto/proto"
signerextraction "github.com/skip-mev/block-sdk/adapters/signer_extraction_adapter"
"github.com/skip-mev/block-sdk/block"
"github.com/skip-mev/block-sdk/block/base"
"github.com/skip-mev/block-sdk/block/mocks"
defaultlane "github.com/skip-mev/block-sdk/lanes/base"
"github.com/skip-mev/block-sdk/lanes/free"
"github.com/skip-mev/block-sdk/lanes/mev"
auctiontypes "github.com/skip-mev/block-sdk/x/auction/types"
)
@@ -30,6 +42,66 @@ type EncodingConfig struct {
Amino *codec.LegacyAmino
}
// CreateBaseSDKContext creates a base sdk context with the default store key and transient key.
func CreateBaseSDKContext(t *testing.T) sdk.Context {
key := storetypes.NewKVStoreKey(auctiontypes.StoreKey)
testCtx := testutil.DefaultContextWithDB(
t,
key,
storetypes.NewTransientStoreKey("transient_test"),
)
return testCtx.Ctx
}
func CreateMempool() *block.LanedMempool {
encodingConfig := CreateTestEncodingConfig()
signerExtractor := signerextraction.NewDefaultAdapter()
mevConfig := base.LaneConfig{
SignerExtractor: signerExtractor,
Logger: log.NewNopLogger(),
TxEncoder: encodingConfig.TxConfig.TxEncoder(),
TxDecoder: encodingConfig.TxConfig.TxDecoder(),
AnteHandler: nil,
MaxBlockSpace: math.LegacyZeroDec(),
MaxTxs: 0, // unlimited
}
factory := mev.NewDefaultAuctionFactory(encodingConfig.TxConfig.TxDecoder(), signerExtractor)
mevLane := mev.NewMEVLane(mevConfig, factory, factory.MatchHandler())
freeConfig := base.LaneConfig{
SignerExtractor: signerExtractor,
Logger: log.NewNopLogger(),
TxEncoder: encodingConfig.TxConfig.TxEncoder(),
TxDecoder: encodingConfig.TxConfig.TxDecoder(),
AnteHandler: nil,
MaxBlockSpace: math.LegacyZeroDec(),
MaxTxs: 0, // unlimited
}
freeLane := free.NewFreeLane[string](freeConfig, base.DefaultTxPriority(), free.DefaultMatchHandler())
defaultConfig := base.LaneConfig{
SignerExtractor: signerExtractor,
Logger: log.NewNopLogger(),
TxEncoder: encodingConfig.TxConfig.TxEncoder(),
TxDecoder: encodingConfig.TxConfig.TxDecoder(),
AnteHandler: nil,
MaxBlockSpace: math.LegacyZeroDec(),
MaxTxs: 0, // unlimited
}
defaultLane := defaultlane.NewDefaultLane(defaultConfig, base.DefaultMatchHandler())
lanes := []block.Lane{mevLane, freeLane, defaultLane}
mempool, err := block.NewLanedMempool(log.NewNopLogger(), lanes, mocks.MockLaneFetcher{})
if err != nil {
panic(err)
}
return mempool
}
func CreateTestEncodingConfig() EncodingConfig {
interfaceRegistry, err := types.NewInterfaceRegistryWithOptions(types.InterfaceRegistryOptions{
ProtoFiles: proto.HybridResolver,