diff --git a/domain/miningmanager/mempool/config.go b/domain/miningmanager/mempool/config.go index 6cc3ab7ed..fa4121dfb 100644 --- a/domain/miningmanager/mempool/config.go +++ b/domain/miningmanager/mempool/config.go @@ -38,6 +38,7 @@ type Config struct { MaximumTransactionCount uint64 TransactionExpireIntervalDAAScore uint64 TransactionExpireScanIntervalDAAScore uint64 + TransactionExpireScanIntervalSeconds uint64 OrphanExpireIntervalDAAScore uint64 OrphanExpireScanIntervalDAAScore uint64 MaximumOrphanTransactionSize uint64 @@ -57,6 +58,7 @@ func DefaultConfig(dagParams *dagconfig.Params) *Config { MaximumTransactionCount: defaultMaximumTransactionCount, TransactionExpireIntervalDAAScore: defaultTransactionExpireIntervalSeconds / targetBlocksPerSecond, TransactionExpireScanIntervalDAAScore: defaultTransactionExpireScanIntervalSeconds / targetBlocksPerSecond, + TransactionExpireScanIntervalSeconds: defaultTransactionExpireScanIntervalSeconds, OrphanExpireIntervalDAAScore: defaultOrphanExpireIntervalSeconds / targetBlocksPerSecond, OrphanExpireScanIntervalDAAScore: defaultOrphanExpireScanIntervalSeconds / targetBlocksPerSecond, MaximumOrphanTransactionSize: defaultMaximumOrphanTransactionSize, diff --git a/domain/miningmanager/mempool/transactions_pool.go b/domain/miningmanager/mempool/transactions_pool.go index f1bb521eb..8fccc223f 100644 --- a/domain/miningmanager/mempool/transactions_pool.go +++ b/domain/miningmanager/mempool/transactions_pool.go @@ -3,6 +3,7 @@ package mempool import ( "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" "github.com/kaspanet/kaspad/domain/miningmanager/mempool/model" + "time" ) type transactionsPool struct { @@ -11,7 +12,8 @@ type transactionsPool struct { highPriorityTransactions model.IDToTransactionMap chainedTransactionsByPreviousOutpoint model.OutpointToTransactionMap transactionsOrderedByFeeRate model.TransactionsOrderedByFeeRate - lastExpireScan uint64 + lastExpireScanDAAScore uint64 + lastExpireScanTime time.Time } func newTransactionsPool(mp *mempool) *transactionsPool { @@ -21,7 +23,8 @@ func newTransactionsPool(mp *mempool) *transactionsPool { highPriorityTransactions: model.IDToTransactionMap{}, chainedTransactionsByPreviousOutpoint: model.OutpointToTransactionMap{}, transactionsOrderedByFeeRate: model.TransactionsOrderedByFeeRate{}, - lastExpireScan: 0, + lastExpireScanDAAScore: 0, + lastExpireScanTime: time.Now(), } } @@ -88,7 +91,8 @@ func (tp *transactionsPool) expireOldTransactions() error { return err } - if virtualDAAScore-tp.lastExpireScan < tp.mempool.config.TransactionExpireScanIntervalDAAScore { + if virtualDAAScore-tp.lastExpireScanDAAScore < tp.mempool.config.TransactionExpireScanIntervalDAAScore || + time.Since(tp.lastExpireScanTime).Seconds() < float64(tp.mempool.config.TransactionExpireScanIntervalSeconds) { return nil } @@ -110,7 +114,8 @@ func (tp *transactionsPool) expireOldTransactions() error { } } - tp.lastExpireScan = virtualDAAScore + tp.lastExpireScanDAAScore = virtualDAAScore + tp.lastExpireScanTime = time.Now() return nil }