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 (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/kaspanet/kaspad/domain/consensus/utils/consensushashing"
|
||||||
|
|
||||||
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
|
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
|
||||||
"github.com/kaspanet/kaspad/domain/consensus/utils/utxo"
|
"github.com/kaspanet/kaspad/domain/consensus/utils/utxo"
|
||||||
"github.com/kaspanet/kaspad/domain/miningmanager/mempool/model"
|
"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{}
|
parentsInPool := model.ParentUTXOsInPool{}
|
||||||
|
|
||||||
outpoint := &externalapi.DomainOutpoint{
|
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)
|
outpoint.Index = uint32(i)
|
||||||
utxo, ok := mpus.poolUnspentOutputs[*outpoint]
|
utxo, ok := mpus.poolUnspentOutputs[*outpoint]
|
||||||
if ok {
|
if ok {
|
||||||
|
|||||||
@ -8,7 +8,7 @@ import (
|
|||||||
// MempoolTransaction represents a transaction inside the main TransactionPool
|
// MempoolTransaction represents a transaction inside the main TransactionPool
|
||||||
type MempoolTransaction struct {
|
type MempoolTransaction struct {
|
||||||
Transaction *externalapi.DomainTransaction
|
Transaction *externalapi.DomainTransaction
|
||||||
ParentsInPool IDToTransaction
|
ParentsInPool ParentUTXOsInPool
|
||||||
IsHighPriority bool
|
IsHighPriority bool
|
||||||
AddedAtDAAScore uint64
|
AddedAtDAAScore uint64
|
||||||
}
|
}
|
||||||
|
|||||||
@ -37,8 +37,37 @@ func (op *orphansPool) processOrphansAfterAcceptedTransaction(acceptedTransactio
|
|||||||
panic("orphansPool.processOrphansAfterAcceptedTransaction not implemented") // TODO (Mike)
|
panic("orphansPool.processOrphansAfterAcceptedTransaction not implemented") // TODO (Mike)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (op *orphansPool) unorphanTransaction(orphanTransactionID *externalapi.DomainTransactionID) (model.MempoolTransaction, error) {
|
func (op *orphansPool) unorphanTransaction(orphanTransactionID *externalapi.DomainTransactionID) (*model.MempoolTransaction, error) {
|
||||||
panic("orphansPool.unorphanTransaction not implemented") // TODO (Mike)
|
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 {
|
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
|
// Remove all transactions whose addedAtDAAScore is older then transactionExpireIntervalDAAScore
|
||||||
if virtualDAAScore-orphanTransaction.AddedAtDAAScore > op.mempool.config.orphanExpireIntervalDAAScore {
|
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 {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -29,7 +29,7 @@ func (tp *transactionsPool) addTransaction(transaction *externalapi.DomainTransa
|
|||||||
panic("transactionsPool.addTransaction not implemented") // TODO (Mike)
|
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)
|
panic("transactionsPool.addMempoolTransaction not implemented") // TODO (Mike)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user