Co-authored-by: mmsqe <mavis@crypto.com> Co-authored-by: marbar3778 <marbar3778@yahoo.com>
This commit is contained in:
parent
6977c223b2
commit
9a59234c42
@ -42,6 +42,10 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
||||
|
||||
* (crypto) [#19691](https://github.com/cosmos/cosmos-sdk/pull/19745) Fix tx sign doesn't throw an error when incorrect Ledger is used.
|
||||
|
||||
### Features
|
||||
|
||||
* (types) [#19759](https://github.com/cosmos/cosmos-sdk/pull/19759) Align SignerExtractionAdapter in PriorityNonceMempool Remove.
|
||||
|
||||
## [v0.50.5](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.50.5) - 2024-03-12
|
||||
|
||||
### Features
|
||||
|
||||
@ -9,7 +9,6 @@ import (
|
||||
"github.com/huandu/skiplist"
|
||||
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth/signing"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -432,7 +431,7 @@ func (mp *PriorityNonceMempool[C]) CountTx() int {
|
||||
func (mp *PriorityNonceMempool[C]) Remove(tx sdk.Tx) error {
|
||||
mp.mtx.Lock()
|
||||
defer mp.mtx.Unlock()
|
||||
sigs, err := tx.(signing.SigVerifiableTx).GetSignaturesV2()
|
||||
sigs, err := mp.cfg.SignerExtractor.GetSigners(tx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -441,7 +440,7 @@ func (mp *PriorityNonceMempool[C]) Remove(tx sdk.Tx) error {
|
||||
}
|
||||
|
||||
sig := sigs[0]
|
||||
sender := sdk.AccAddress(sig.PubKey.Address()).String()
|
||||
sender := sig.Signer.String()
|
||||
nonce := sig.Sequence
|
||||
|
||||
scoreKey := txMeta[C]{nonce: nonce, sender: sender}
|
||||
|
||||
@ -60,6 +60,87 @@ func TestOutOfOrder(t *testing.T) {
|
||||
require.Error(t, validateOrder(rmtxs))
|
||||
}
|
||||
|
||||
type signerExtractionAdapter struct {
|
||||
UseOld bool
|
||||
}
|
||||
|
||||
func (a signerExtractionAdapter) GetSigners(tx sdk.Tx) ([]mempool.SignerData, error) {
|
||||
if !a.UseOld {
|
||||
return mempool.NewDefaultSignerExtractionAdapter().GetSigners(tx)
|
||||
}
|
||||
sigs, err := tx.(signing.SigVerifiableTx).GetSignaturesV2()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
signerData := make([]mempool.SignerData, len(sigs))
|
||||
for _, sig := range sigs {
|
||||
signerData = append(signerData, mempool.SignerData{
|
||||
Signer: sig.PubKey.Address().Bytes(),
|
||||
Sequence: sig.Sequence,
|
||||
})
|
||||
}
|
||||
return signerData, nil
|
||||
}
|
||||
|
||||
func (s *MempoolTestSuite) TestPriorityNonceTxOrderWithAdapter() {
|
||||
t := s.T()
|
||||
ctx := sdk.NewContext(nil, cmtproto.Header{}, false, log.NewNopLogger())
|
||||
accounts := simtypes.RandomAccounts(rand.New(rand.NewSource(0)), 5)
|
||||
sa := accounts[0].Address
|
||||
sb := accounts[1].Address
|
||||
|
||||
tests := []struct {
|
||||
txs []txSpec
|
||||
order []int
|
||||
fail bool
|
||||
}{
|
||||
{
|
||||
txs: []txSpec{
|
||||
{p: 21, n: 4, a: sa},
|
||||
{p: 8, n: 3, a: sa},
|
||||
{p: 6, n: 2, a: sa},
|
||||
{p: 15, n: 1, a: sb},
|
||||
{p: 20, n: 1, a: sa},
|
||||
},
|
||||
order: []int{4, 3, 2, 1, 0},
|
||||
},
|
||||
}
|
||||
for i, tt := range tests {
|
||||
t.Run(fmt.Sprintf("case %d", i), func(t *testing.T) {
|
||||
adapter := signerExtractionAdapter{}
|
||||
pool := mempool.NewPriorityMempool(mempool.PriorityNonceMempoolConfig[int64]{
|
||||
TxPriority: mempool.NewDefaultTxPriority(),
|
||||
SignerExtractor: adapter,
|
||||
})
|
||||
|
||||
// create test txs and insert into mempool
|
||||
for i, ts := range tt.txs {
|
||||
tx := testTx{id: i, priority: int64(ts.p), nonce: uint64(ts.n), address: ts.a}
|
||||
c := ctx.WithPriority(tx.priority)
|
||||
err := pool.Insert(c, tx)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
orderedTxs := fetchTxs(pool.Select(ctx, nil), 1000)
|
||||
|
||||
var txOrder []int
|
||||
for _, tx := range orderedTxs {
|
||||
txOrder = append(txOrder, tx.(testTx).id)
|
||||
}
|
||||
|
||||
require.Equal(t, tt.order, txOrder)
|
||||
require.NoError(t, validateOrder(orderedTxs))
|
||||
|
||||
adapter.UseOld = true
|
||||
for _, tx := range orderedTxs {
|
||||
require.NoError(t, pool.Remove(tx))
|
||||
}
|
||||
|
||||
require.NoError(t, mempool.IsEmpty[int64](pool))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (s *MempoolTestSuite) TestPriorityNonceTxOrder() {
|
||||
t := s.T()
|
||||
ctx := sdk.NewContext(nil, cmtproto.Header{}, false, log.NewNopLogger())
|
||||
|
||||
Loading…
Reference in New Issue
Block a user