test: Add mempool comparison tests (#357)
This commit is contained in:
parent
a135d8f89d
commit
39f91b60a2
89
block/base/mempool_test.go
Normal file
89
block/base/mempool_test.go
Normal file
@ -0,0 +1,89 @@
|
||||
package base
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"testing"
|
||||
|
||||
sdkmath "cosmossdk.io/math"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
signerextraction "github.com/skip-mev/block-sdk/adapters/signer_extraction_adapter"
|
||||
"github.com/skip-mev/block-sdk/testutils"
|
||||
)
|
||||
|
||||
func TestMempoolComparison(t *testing.T) {
|
||||
acct := testutils.RandomAccounts(rand.New(rand.NewSource(1)), 2)
|
||||
txc := testutils.CreateTestEncodingConfig().TxConfig
|
||||
ctx := testutils.CreateBaseSDKContext(t)
|
||||
mp := NewMempool(
|
||||
DefaultTxPriority(),
|
||||
txc.TxEncoder(),
|
||||
signerextraction.NewDefaultAdapter(),
|
||||
1000,
|
||||
)
|
||||
t.Run("test same account, same nonce", func(t *testing.T) {
|
||||
tx1, err := testutils.CreateTx(txc, acct[0], 0, 0, nil, sdk.NewCoin("stake", sdkmath.NewInt(1)))
|
||||
require.NoError(t, err)
|
||||
tx2, err := testutils.CreateTx(txc, acct[0], 0, 0, nil, sdk.NewCoin("stake", sdkmath.NewInt(2)))
|
||||
require.NoError(t, err)
|
||||
output, err := mp.Compare(ctx, tx1, tx2)
|
||||
require.Error(t, err, fmt.Errorf("the two transactions have the same seqence number"))
|
||||
require.Equal(t, 0, output)
|
||||
})
|
||||
t.Run("test same account, tx1 gt amount, tx1 gt nonce", func(t *testing.T) {
|
||||
tx1, err := testutils.CreateTx(txc, acct[0], 1, 0, nil, sdk.NewCoin("stake", sdkmath.NewInt(2)))
|
||||
require.NoError(t, err)
|
||||
tx2, err := testutils.CreateTx(txc, acct[0], 0, 0, nil, sdk.NewCoin("stake", sdkmath.NewInt(1)))
|
||||
require.NoError(t, err)
|
||||
output, err := mp.Compare(ctx, tx1, tx2)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, -1, output)
|
||||
})
|
||||
t.Run("test same account, tx1 lt amount, tx1 gt nonce", func(t *testing.T) {
|
||||
tx1, err := testutils.CreateTx(txc, acct[0], 1, 0, nil, sdk.NewCoin("stake", sdkmath.NewInt(1)))
|
||||
require.NoError(t, err)
|
||||
tx2, err := testutils.CreateTx(txc, acct[0], 0, 0, nil, sdk.NewCoin("stake", sdkmath.NewInt(2)))
|
||||
require.NoError(t, err)
|
||||
output, err := mp.Compare(ctx, tx1, tx2)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, -1, output)
|
||||
})
|
||||
t.Run("test same account, tx1 lt amount, tx1 lt nonce", func(t *testing.T) {
|
||||
tx1, err := testutils.CreateTx(txc, acct[0], 0, 0, nil, sdk.NewCoin("stake", sdkmath.NewInt(1)))
|
||||
require.NoError(t, err)
|
||||
tx2, err := testutils.CreateTx(txc, acct[0], 1, 0, nil, sdk.NewCoin("stake", sdkmath.NewInt(2)))
|
||||
require.NoError(t, err)
|
||||
output, err := mp.Compare(ctx, tx1, tx2)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 1, output)
|
||||
})
|
||||
t.Run("test diff account, tx1 lt amount, tx1 gt nonce", func(t *testing.T) {
|
||||
tx1, err := testutils.CreateTx(txc, acct[0], 1, 0, nil, sdk.NewCoin("stake", sdkmath.NewInt(1)))
|
||||
require.NoError(t, err)
|
||||
tx2, err := testutils.CreateTx(txc, acct[1], 0, 0, nil, sdk.NewCoin("stake", sdkmath.NewInt(2)))
|
||||
require.NoError(t, err)
|
||||
output, err := mp.Compare(ctx, tx1, tx2)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, -1, output)
|
||||
})
|
||||
t.Run("test diff account, tx1 lt amount, tx1 gt nonce, diff denoms", func(t *testing.T) {
|
||||
tx1, err := testutils.CreateTx(txc, acct[0], 1, 0, nil, sdk.NewCoin("nonstake", sdkmath.NewInt(1)))
|
||||
require.NoError(t, err)
|
||||
tx2, err := testutils.CreateTx(txc, acct[1], 0, 0, nil, sdk.NewCoin("stake", sdkmath.NewInt(2)))
|
||||
require.NoError(t, err)
|
||||
output, err := mp.Compare(ctx, tx1, tx2)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 0, output)
|
||||
})
|
||||
t.Run("test diff account, tx1 gt amount, tx1 gt nonce, diff denoms", func(t *testing.T) {
|
||||
tx1, err := testutils.CreateTx(txc, acct[0], 1, 0, nil, sdk.NewCoin("nonstake", sdkmath.NewInt(2)))
|
||||
require.NoError(t, err)
|
||||
tx2, err := testutils.CreateTx(txc, acct[1], 0, 0, nil, sdk.NewCoin("stake", sdkmath.NewInt(1)))
|
||||
require.NoError(t, err)
|
||||
output, err := mp.Compare(ctx, tx1, tx2)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 0, output)
|
||||
})
|
||||
}
|
||||
@ -17,6 +17,7 @@ import (
|
||||
"github.com/skip-mev/block-sdk/lanes/free"
|
||||
"github.com/skip-mev/block-sdk/lanes/mev"
|
||||
"github.com/skip-mev/block-sdk/testutils"
|
||||
"github.com/skip-mev/block-sdk/testutils/mempool"
|
||||
)
|
||||
|
||||
func TestGetTxDistribution(t *testing.T) {
|
||||
@ -31,7 +32,7 @@ func TestGetTxDistribution(t *testing.T) {
|
||||
}{
|
||||
{
|
||||
name: "returns correct distribution with no transactions",
|
||||
mempool: testutils.CreateMempool,
|
||||
mempool: mempool.CreateMempool,
|
||||
expectedDistribution: map[string]uint64{
|
||||
mev.LaneName: 0,
|
||||
free.LaneName: 0,
|
||||
@ -63,7 +64,7 @@ func TestGetTxDistribution(t *testing.T) {
|
||||
)
|
||||
require.NoError(t, err)
|
||||
|
||||
mempool := testutils.CreateMempool()
|
||||
mempool := mempool.CreateMempool()
|
||||
err = mempool.Insert(ctx, tx1)
|
||||
require.NoError(t, err)
|
||||
err = mempool.Insert(ctx, tx2)
|
||||
@ -90,7 +91,7 @@ func TestGetTxDistribution(t *testing.T) {
|
||||
)
|
||||
require.NoError(t, err)
|
||||
|
||||
mempool := testutils.CreateMempool()
|
||||
mempool := mempool.CreateMempool()
|
||||
err = mempool.Insert(ctx, tx1)
|
||||
require.NoError(t, err)
|
||||
|
||||
@ -115,7 +116,7 @@ func TestGetTxDistribution(t *testing.T) {
|
||||
)
|
||||
require.NoError(t, err)
|
||||
|
||||
mempool := testutils.CreateMempool()
|
||||
mempool := mempool.CreateMempool()
|
||||
err = mempool.Insert(ctx, tx1)
|
||||
require.NoError(t, err)
|
||||
|
||||
@ -161,7 +162,7 @@ func TestGetTxDistribution(t *testing.T) {
|
||||
)
|
||||
require.NoError(t, err)
|
||||
|
||||
mempool := testutils.CreateMempool()
|
||||
mempool := mempool.CreateMempool()
|
||||
err = mempool.Insert(ctx, mevTx)
|
||||
require.NoError(t, err)
|
||||
err = mempool.Insert(ctx, freeTx)
|
||||
|
||||
62
testutils/mempool/mempool.go
Normal file
62
testutils/mempool/mempool.go
Normal file
@ -0,0 +1,62 @@
|
||||
package mempool
|
||||
|
||||
import (
|
||||
"cosmossdk.io/log"
|
||||
"cosmossdk.io/math"
|
||||
"github.com/skip-mev/block-sdk/block/mocks"
|
||||
|
||||
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"
|
||||
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"
|
||||
"github.com/skip-mev/block-sdk/testutils"
|
||||
)
|
||||
|
||||
func CreateMempool() *block.LanedMempool {
|
||||
encodingConfig := testutils.CreateTestEncodingConfig()
|
||||
signerExtractor := signerextraction.NewDefaultAdapter()
|
||||
|
||||
mevConfig := base.LaneConfig{
|
||||
SignerExtractor: signerExtractor,
|
||||
Logger: log.NewNopLogger(),
|
||||
TxEncoder: encodingConfig.TxConfig.TxEncoder(),
|
||||
TxDecoder: encodingConfig.TxConfig.TxDecoder(),
|
||||
AnteHandler: nil,
|
||||
MaxBlockSpace: math.LegacyMustNewDecFromStr("0.3"),
|
||||
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.LegacyMustNewDecFromStr("0.3"),
|
||||
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
|
||||
}
|
||||
@ -4,8 +4,6 @@ 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"
|
||||
@ -25,13 +23,6 @@ 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"
|
||||
)
|
||||
|
||||
@ -55,53 +46,6 @@ func CreateBaseSDKContext(t *testing.T) sdk.Context {
|
||||
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.LegacyMustNewDecFromStr("0.3"),
|
||||
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.LegacyMustNewDecFromStr("0.3"),
|
||||
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,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user