Skip to content

Commit df2d7fb

Browse files
committed
Merge branch 'main' into alex/sims_after_import
* main: refactor(mempool)!: match server/v2/cometbft and sdk mempool interface (#21744) feat: make validator key injectable by application developers (#21608)
2 parents ec334cd + 356df96 commit df2d7fb

File tree

21 files changed

+88
-45
lines changed

21 files changed

+88
-45
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ Every module contains its own CHANGELOG.md. Please refer to the module you are i
5050
### Improvements
5151

5252
* (genutil) [#21701](https://github.com/cosmos/cosmos-sdk/pull/21701) Improved error messages for genesis validation.
53+
* (sims)[#21613](https://github.com/cosmos/cosmos-sdk/pull/21613) Add sims2 framework and factory methods for simpler message factories in modules
5354

5455
### Bug Fixes
5556

@@ -58,7 +59,7 @@ Every module contains its own CHANGELOG.md. Please refer to the module you are i
5859

5960
### API Breaking Changes
6061

61-
* (sims)[#21613](https://github.com/cosmos/cosmos-sdk/pull/21613) Add sims2 framework and factory methods for simpler message factories in modules
62+
* (types/mempool) [#21744](https://github.com/cosmos/cosmos-sdk/pull/21744) Update types/mempool.Mempool interface to take decoded transactions. This avoid to decode the transaction twice.
6263

6364
### Deprecated
6465

baseapp/abci_utils.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -264,19 +264,25 @@ func (h *DefaultProposalHandler) PrepareProposalHandler() sdk.PrepareProposalHan
264264

265265
defer h.txSelector.Clear()
266266

267+
// decode transactions
268+
decodedTxs := make([]sdk.Tx, len(req.Txs))
269+
for i, txBz := range req.Txs {
270+
tx, err := h.txVerifier.TxDecode(txBz)
271+
if err != nil {
272+
return nil, err
273+
}
274+
275+
decodedTxs[i] = tx
276+
}
277+
267278
// If the mempool is nil or NoOp we simply return the transactions
268279
// requested from CometBFT, which, by default, should be in FIFO order.
269280
//
270281
// Note, we still need to ensure the transactions returned respect req.MaxTxBytes.
271282
_, isNoOp := h.mempool.(mempool.NoOpMempool)
272283
if h.mempool == nil || isNoOp {
273-
for _, txBz := range req.Txs {
274-
tx, err := h.txVerifier.TxDecode(txBz)
275-
if err != nil {
276-
return nil, err
277-
}
278-
279-
stop := h.txSelector.SelectTxForProposal(ctx, uint64(req.MaxTxBytes), maxBlockGas, tx, txBz)
284+
for i, tx := range decodedTxs {
285+
stop := h.txSelector.SelectTxForProposal(ctx, uint64(req.MaxTxBytes), maxBlockGas, tx, req.Txs[i])
280286
if stop {
281287
break
282288
}
@@ -291,7 +297,7 @@ func (h *DefaultProposalHandler) PrepareProposalHandler() sdk.PrepareProposalHan
291297
selectedTxsNums int
292298
invalidTxs []sdk.Tx // invalid txs to be removed out of the loop to avoid dead lock
293299
)
294-
h.mempool.SelectBy(ctx, req.Txs, func(memTx sdk.Tx) bool {
300+
h.mempool.SelectBy(ctx, decodedTxs, func(memTx sdk.Tx) bool {
295301
unorderedTx, ok := memTx.(sdk.TxWithUnordered)
296302
isUnordered := ok && unorderedTx.GetUnordered()
297303
txSignersSeqs := make(map[string]uint64)

baseapp/abci_utils_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -691,6 +691,7 @@ func (s *ABCIUtilsTestSuite) TestDefaultProposalHandler_PriorityNonceMempoolTxSe
691691
ph := baseapp.NewDefaultProposalHandler(mp, app)
692692

693693
for _, v := range tc.txInputs {
694+
app.EXPECT().TxDecode(v.bz).Return(v.tx, nil).AnyTimes()
694695
app.EXPECT().PrepareProposalVerifyTx(v.tx).Return(v.bz, nil).AnyTimes()
695696
s.NoError(mp.Insert(s.ctx.WithPriority(v.priority), v.tx))
696697
tc.req.Txs = append(tc.req.Txs, v.bz)

runtime/app.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66
"slices"
77

88
abci "github.com/cometbft/cometbft/api/cometbft/abci/v1"
9+
cmtcrypto "github.com/cometbft/cometbft/crypto"
10+
cmted25519 "github.com/cometbft/cometbft/crypto/ed25519"
911
"google.golang.org/grpc"
1012

1113
runtimev1alpha1 "cosmossdk.io/api/cosmos/app/runtime/v1alpha1"
@@ -30,6 +32,9 @@ import (
3032
authtx "github.com/cosmos/cosmos-sdk/x/auth/tx"
3133
)
3234

35+
// KeyGenF is a function that generates a private key for use by comet.
36+
type KeyGenF = func() (cmtcrypto.PrivKey, error)
37+
3338
// App is a wrapper around BaseApp and ModuleManager that can be used in hybrid
3439
// app.go/app config scenarios or directly as a servertypes.Application instance.
3540
// To get an instance of *App, *AppBuilder must be requested as a dependency
@@ -308,3 +313,10 @@ var _ servertypes.Application = &App{}
308313
type hasServicesV1 interface {
309314
RegisterServices(grpc.ServiceRegistrar) error
310315
}
316+
317+
// ValidatorKeyProvider returns a function that generates a private key for use by comet.
318+
func (a *App) ValidatorKeyProvider() KeyGenF {
319+
return func() (cmtcrypto.PrivKey, error) {
320+
return cmted25519.GenPrivKey(), nil
321+
}
322+
}

schema/diff/diff_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,6 @@ func TestCompareModuleSchemas(t *testing.T) {
333333

334334
func requireModuleSchema(t *testing.T, types ...schema.Type) schema.ModuleSchema {
335335
t.Helper()
336-
337336
s, err := schema.CompileModuleSchema(types...)
338337
if err != nil {
339338
t.Fatal(err)

server/start.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -374,9 +374,7 @@ func startCmtNode(
374374
return nil, cleanupFn, err
375375
}
376376

377-
pv, err := pvm.LoadOrGenFilePV(cfg.PrivValidatorKeyFile(), cfg.PrivValidatorStateFile(), func() (cmtcrypto.PrivKey, error) {
378-
return cmted25519.GenPrivKey(), nil
379-
}) // TODO: make this modular
377+
pv, err := pvm.LoadOrGenFilePV(cfg.PrivValidatorKeyFile(), cfg.PrivValidatorStateFile(), app.ValidatorKeyProvider())
380378
if err != nil {
381379
return nil, cleanupFn, err
382380
}

server/types/app.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"io"
66

77
cmtproto "github.com/cometbft/cometbft/api/cometbft/types/v1"
8+
cmtcrypto "github.com/cometbft/cometbft/crypto"
89
cmttypes "github.com/cometbft/cometbft/types"
910
"github.com/cosmos/gogoproto/grpc"
1011

@@ -57,6 +58,9 @@ type (
5758
// SnapshotManager return the snapshot manager
5859
SnapshotManager() *snapshots.Manager
5960

61+
// ValidatorKeyProvider returns a function that generates a validator key
62+
ValidatorKeyProvider() func() (cmtcrypto.PrivKey, error)
63+
6064
// Close is called in start cmd to gracefully cleanup resources.
6165
// Must be safe to be called multiple times.
6266
Close() error

server/v2/cometbft/abci.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -467,9 +467,10 @@ func (c *Consensus[T]) FinalizeBlock(
467467
}
468468

469469
// remove txs from the mempool
470-
err = c.mempool.Remove(decodedTxs)
471-
if err != nil {
472-
return nil, fmt.Errorf("unable to remove txs: %w", err)
470+
for _, tx := range decodedTxs {
471+
if err = c.mempool.Remove(tx); err != nil {
472+
return nil, fmt.Errorf("unable to remove tx: %w", err)
473+
}
473474
}
474475

475476
c.lastCommittedHeight.Store(req.Height)

server/v2/cometbft/handlers/defaults.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ func (h *DefaultProposalHandler[T]) PrepareHandler() PrepareHandler[T] {
7979
// check again.
8080
_, err := app.ValidateTx(ctx, memTx)
8181
if err != nil {
82-
err := h.mempool.Remove([]T{memTx})
82+
err := h.mempool.Remove(memTx)
8383
if err != nil && !errors.Is(err, mempool.ErrTxNotFound) {
8484
return nil, err
8585
}

server/v2/cometbft/internal/mock/mock_mempool.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,6 @@ type MockMempool[T transaction.Tx] struct{}
1515

1616
func (MockMempool[T]) Insert(context.Context, T) error { return nil }
1717
func (MockMempool[T]) Select(context.Context, []T) mempool.Iterator[T] { return nil }
18+
func (MockMempool[T]) SelectBy(context.Context, []T, func(T) bool) {}
1819
func (MockMempool[T]) CountTx() int { return 0 }
19-
func (MockMempool[T]) Remove([]T) error { return nil }
20+
func (MockMempool[T]) Remove(T) error { return nil }

0 commit comments

Comments
 (0)