mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-05-20 13:56:45 +00:00
71 lines
1.9 KiB
Go
71 lines
1.9 KiB
Go
package mempool
|
|
|
|
import (
|
|
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
|
|
"github.com/kaspanet/kaspad/domain/consensus/utils/consensushashing"
|
|
"github.com/kaspanet/kaspad/domain/miningmanager/mempool/model"
|
|
)
|
|
|
|
func (mp *mempool) removeTransactions(transactions []*externalapi.DomainTransaction, removeRedeemers bool) error {
|
|
for _, transaction := range transactions {
|
|
err := mp.removeTransaction(consensushashing.TransactionID(transaction), removeRedeemers)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (mp *mempool) removeTransaction(transactionID *externalapi.DomainTransactionID, removeRedeemers bool) error {
|
|
if _, ok := mp.orphansPool.allOrphans[*transactionID]; ok {
|
|
return mp.orphansPool.removeOrphan(transactionID, true)
|
|
}
|
|
|
|
mempoolTransaction, ok := mp.transactionsPool.allTransactions[*transactionID]
|
|
if !ok {
|
|
return nil
|
|
}
|
|
|
|
transactionsToRemove := []*model.MempoolTransaction{mempoolTransaction}
|
|
redeemers := mp.transactionsPool.getRedeemers(mempoolTransaction)
|
|
if removeRedeemers {
|
|
transactionsToRemove = append(transactionsToRemove, redeemers...)
|
|
} else {
|
|
for _, redeemer := range redeemers {
|
|
redeemer.RemoveParentTransactionInPool(transactionID)
|
|
}
|
|
}
|
|
|
|
for _, transactionToRemove := range transactionsToRemove {
|
|
err := mp.removeTransactionFromSets(transactionToRemove, removeRedeemers)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
if removeRedeemers {
|
|
err := mp.orphansPool.removeRedeemersOf(mempoolTransaction)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (mp *mempool) removeTransactionFromSets(mempoolTransaction *model.MempoolTransaction, removeRedeemers bool) error {
|
|
mp.mempoolUTXOSet.removeTransaction(mempoolTransaction)
|
|
|
|
err := mp.transactionsPool.removeTransaction(mempoolTransaction)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = mp.orphansPool.updateOrphansAfterTransactionRemoved(mempoolTransaction, removeRedeemers)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|