diff --git a/domain/miningmanager/mempool/validate_and_insert_transaction.go b/domain/miningmanager/mempool/validate_and_insert_transaction.go index 613e9f845..ff8c752d3 100644 --- a/domain/miningmanager/mempool/validate_and_insert_transaction.go +++ b/domain/miningmanager/mempool/validate_and_insert_transaction.go @@ -2,8 +2,6 @@ package mempool import ( "fmt" - "github.com/kaspanet/kaspad/domain/consensus/utils/constants" - "github.com/kaspanet/kaspad/infrastructure/logger" "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" @@ -30,20 +28,6 @@ func (mp *mempool) validateAndInsertTransaction(transaction *externalapi.DomainT return nil, err } - hasCoinbaseInput := false - for _, input := range transaction.Inputs { - if input.UTXOEntry.IsCoinbase() { - hasCoinbaseInput = true - break - } - } - - numExtraOuts := len(transaction.Outputs) - len(transaction.Inputs) - if !hasCoinbaseInput && numExtraOuts > 2 && transaction.Fee < uint64(numExtraOuts)*constants.SompiPerKaspa { - log.Warnf("Rejected spam tx %s from mempool (%d outputs)", consensushashing.TransactionID(transaction), len(transaction.Outputs)) - return nil, transactionRuleError(RejectSpamTx, fmt.Sprintf("Rejected spam tx %s from mempool", consensushashing.TransactionID(transaction))) - } - if len(missingOutpoints) > 0 { if !allowOrphan { str := fmt.Sprintf("Transaction %s is an orphan, where allowOrphan = false", diff --git a/domain/miningmanager/mempool/validate_transaction.go b/domain/miningmanager/mempool/validate_transaction.go index 42e77c9e2..86695f051 100644 --- a/domain/miningmanager/mempool/validate_transaction.go +++ b/domain/miningmanager/mempool/validate_transaction.go @@ -2,6 +2,7 @@ package mempool import ( "fmt" + "github.com/kaspanet/kaspad/domain/consensus/utils/constants" "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" "github.com/kaspanet/kaspad/domain/consensus/utils/consensushashing" @@ -44,6 +45,20 @@ func (mp *mempool) validateTransactionInIsolation(transaction *externalapi.Domai } func (mp *mempool) validateTransactionInContext(transaction *externalapi.DomainTransaction) error { + hasCoinbaseInput := false + for _, input := range transaction.Inputs { + if input.UTXOEntry.IsCoinbase() { + hasCoinbaseInput = true + break + } + } + + numExtraOuts := len(transaction.Outputs) - len(transaction.Inputs) + if !hasCoinbaseInput && numExtraOuts > 2 && transaction.Fee < uint64(numExtraOuts)*constants.SompiPerKaspa { + log.Warnf("Rejected spam tx %s from mempool (%d outputs)", consensushashing.TransactionID(transaction), len(transaction.Outputs)) + return transactionRuleError(RejectSpamTx, fmt.Sprintf("Rejected spam tx %s from mempool", consensushashing.TransactionID(transaction))) + } + if !mp.config.AcceptNonStandard { err := mp.checkTransactionStandardInContext(transaction) if err != nil {