Implement removeOrphan

This commit is contained in:
Mike Zak 2021-06-08 14:35:49 +03:00
parent 9a1d548e7f
commit 2402d48c3e
4 changed files with 41 additions and 8 deletions

View File

@ -3,6 +3,8 @@ package mempool
import (
"fmt"
"github.com/kaspanet/kaspad/domain/consensus/utils/consensushashing"
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
"github.com/kaspanet/kaspad/domain/consensus/utils/utxo"
"github.com/kaspanet/kaspad/domain/miningmanager/mempool/model"
@ -22,13 +24,13 @@ func newMempoolUTXOSet(mp *mempool) *mempoolUTXOSet {
}
}
func (mpus *mempoolUTXOSet) getParentsInPool(transaction *model.MempoolTransaction) model.ParentUTXOsInPool {
func (mpus *mempoolUTXOSet) getParentsInPool(transaction *externalapi.DomainTransaction) model.ParentUTXOsInPool {
parentsInPool := model.ParentUTXOsInPool{}
outpoint := &externalapi.DomainOutpoint{
TransactionID: *transaction.TransactionID(),
TransactionID: *consensushashing.TransactionID(transaction),
}
for i := range transaction.Transaction.Inputs {
for i := range transaction.Inputs {
outpoint.Index = uint32(i)
utxo, ok := mpus.poolUnspentOutputs[*outpoint]
if ok {

View File

@ -8,7 +8,7 @@ import (
// MempoolTransaction represents a transaction inside the main TransactionPool
type MempoolTransaction struct {
Transaction *externalapi.DomainTransaction
ParentsInPool IDToTransaction
ParentsInPool ParentUTXOsInPool
IsHighPriority bool
AddedAtDAAScore uint64
}

View File

@ -37,8 +37,37 @@ func (op *orphansPool) processOrphansAfterAcceptedTransaction(acceptedTransactio
panic("orphansPool.processOrphansAfterAcceptedTransaction not implemented") // TODO (Mike)
}
func (op *orphansPool) unorphanTransaction(orphanTransactionID *externalapi.DomainTransactionID) (model.MempoolTransaction, error) {
panic("orphansPool.unorphanTransaction not implemented") // TODO (Mike)
func (op *orphansPool) unorphanTransaction(orphanTransactionID *externalapi.DomainTransactionID) (*model.MempoolTransaction, error) {
orphanTransaction, ok := op.allOrphans[*orphanTransactionID]
if !ok {
return nil, errors.Errorf("Transaction %s is not an orphan", orphanTransactionID)
}
err := op.removeOrphan(orphanTransactionID, false)
if err != nil {
return nil, err
}
err = op.mempool.validateTransactionInContext(orphanTransaction.Transaction)
if err != nil {
return nil, err
}
virtualDAAScore, err := op.mempool.virtualDAAScore()
if err != nil {
return nil, err
}
mempoolTransaction := &model.MempoolTransaction{
Transaction: orphanTransaction.Transaction,
ParentsInPool: op.mempool.mempoolUTXOSet.getParentsInPool(orphanTransaction.Transaction),
IsHighPriority: false,
AddedAtDAAScore: virtualDAAScore,
}
err = op.mempool.transactionsPool.addMempoolTransaction(mempoolTransaction)
if err != nil {
return nil, err
}
return mempoolTransaction, nil
}
func (op *orphansPool) removeOrphan(orphanTransactionID *externalapi.DomainTransactionID, removeRedeemers bool) error {
@ -96,7 +125,9 @@ func (op *orphansPool) expireOrphanTransactions() error {
// Remove all transactions whose addedAtDAAScore is older then transactionExpireIntervalDAAScore
if virtualDAAScore-orphanTransaction.AddedAtDAAScore > op.mempool.config.orphanExpireIntervalDAAScore {
err = op.removeOrphan(orphanTransaction.TransactionID())
// Don't remove redeemers in the case of a random eviction since
// it is quite possible it might be needed again shortly.
err = op.removeOrphan(orphanTransaction.TransactionID(), false)
if err != nil {
return err
}

View File

@ -29,7 +29,7 @@ func (tp *transactionsPool) addTransaction(transaction *externalapi.DomainTransa
panic("transactionsPool.addTransaction not implemented") // TODO (Mike)
}
func (tp *transactionsPool) addMempoolTransaction(transaction model.MempoolTransaction) error {
func (tp *transactionsPool) addMempoolTransaction(transaction *model.MempoolTransaction) error {
panic("transactionsPool.addMempoolTransaction not implemented") // TODO (Mike)
}