mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-11-28 08:11:08 +00:00
Implement removeOrphan
This commit is contained in:
parent
9a1d548e7f
commit
2402d48c3e
@ -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 {
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user