Expire old transactions when both an amount of DAA and an amount of time had passed. (#1784)

Co-authored-by: Ori Newman <orinewman1@gmail.com>
This commit is contained in:
stasatdaglabs 2021-07-06 15:23:53 +03:00 committed by GitHub
parent e3a6d9e49a
commit 2f272cd517
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 4 deletions

View File

@ -38,6 +38,7 @@ type Config struct {
MaximumTransactionCount uint64 MaximumTransactionCount uint64
TransactionExpireIntervalDAAScore uint64 TransactionExpireIntervalDAAScore uint64
TransactionExpireScanIntervalDAAScore uint64 TransactionExpireScanIntervalDAAScore uint64
TransactionExpireScanIntervalSeconds uint64
OrphanExpireIntervalDAAScore uint64 OrphanExpireIntervalDAAScore uint64
OrphanExpireScanIntervalDAAScore uint64 OrphanExpireScanIntervalDAAScore uint64
MaximumOrphanTransactionSize uint64 MaximumOrphanTransactionSize uint64
@ -57,6 +58,7 @@ func DefaultConfig(dagParams *dagconfig.Params) *Config {
MaximumTransactionCount: defaultMaximumTransactionCount, MaximumTransactionCount: defaultMaximumTransactionCount,
TransactionExpireIntervalDAAScore: defaultTransactionExpireIntervalSeconds / targetBlocksPerSecond, TransactionExpireIntervalDAAScore: defaultTransactionExpireIntervalSeconds / targetBlocksPerSecond,
TransactionExpireScanIntervalDAAScore: defaultTransactionExpireScanIntervalSeconds / targetBlocksPerSecond, TransactionExpireScanIntervalDAAScore: defaultTransactionExpireScanIntervalSeconds / targetBlocksPerSecond,
TransactionExpireScanIntervalSeconds: defaultTransactionExpireScanIntervalSeconds,
OrphanExpireIntervalDAAScore: defaultOrphanExpireIntervalSeconds / targetBlocksPerSecond, OrphanExpireIntervalDAAScore: defaultOrphanExpireIntervalSeconds / targetBlocksPerSecond,
OrphanExpireScanIntervalDAAScore: defaultOrphanExpireScanIntervalSeconds / targetBlocksPerSecond, OrphanExpireScanIntervalDAAScore: defaultOrphanExpireScanIntervalSeconds / targetBlocksPerSecond,
MaximumOrphanTransactionSize: defaultMaximumOrphanTransactionSize, MaximumOrphanTransactionSize: defaultMaximumOrphanTransactionSize,

View File

@ -3,6 +3,7 @@ package mempool
import ( import (
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi" "github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
"github.com/kaspanet/kaspad/domain/miningmanager/mempool/model" "github.com/kaspanet/kaspad/domain/miningmanager/mempool/model"
"time"
) )
type transactionsPool struct { type transactionsPool struct {
@ -11,7 +12,8 @@ type transactionsPool struct {
highPriorityTransactions model.IDToTransactionMap highPriorityTransactions model.IDToTransactionMap
chainedTransactionsByPreviousOutpoint model.OutpointToTransactionMap chainedTransactionsByPreviousOutpoint model.OutpointToTransactionMap
transactionsOrderedByFeeRate model.TransactionsOrderedByFeeRate transactionsOrderedByFeeRate model.TransactionsOrderedByFeeRate
lastExpireScan uint64 lastExpireScanDAAScore uint64
lastExpireScanTime time.Time
} }
func newTransactionsPool(mp *mempool) *transactionsPool { func newTransactionsPool(mp *mempool) *transactionsPool {
@ -21,7 +23,8 @@ func newTransactionsPool(mp *mempool) *transactionsPool {
highPriorityTransactions: model.IDToTransactionMap{}, highPriorityTransactions: model.IDToTransactionMap{},
chainedTransactionsByPreviousOutpoint: model.OutpointToTransactionMap{}, chainedTransactionsByPreviousOutpoint: model.OutpointToTransactionMap{},
transactionsOrderedByFeeRate: model.TransactionsOrderedByFeeRate{}, transactionsOrderedByFeeRate: model.TransactionsOrderedByFeeRate{},
lastExpireScan: 0, lastExpireScanDAAScore: 0,
lastExpireScanTime: time.Now(),
} }
} }
@ -88,7 +91,8 @@ func (tp *transactionsPool) expireOldTransactions() error {
return err 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 return nil
} }
@ -110,7 +114,8 @@ func (tp *transactionsPool) expireOldTransactions() error {
} }
} }
tp.lastExpireScan = virtualDAAScore tp.lastExpireScanDAAScore = virtualDAAScore
tp.lastExpireScanTime = time.Now()
return nil return nil
} }