mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-09-13 21:10:12 +00:00
105 lines
3.3 KiB
Go
105 lines
3.3 KiB
Go
package mempool
|
|
|
|
import (
|
|
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
|
|
"github.com/kaspanet/kaspad/domain/dagconfig"
|
|
"github.com/kaspanet/kaspad/domain/miningmanager/mempool/model"
|
|
)
|
|
|
|
type mempool struct {
|
|
config *config
|
|
consensus externalapi.Consensus
|
|
|
|
mempoolUTXOSet *mempoolUTXOSet
|
|
transactionsPool *transactionsPool
|
|
orphansPool *orphansPool
|
|
}
|
|
|
|
func newMempool(consensus externalapi.Consensus, dagParams *dagconfig.Params) *mempool {
|
|
mp := &mempool{
|
|
config: defaultConfig(dagParams),
|
|
consensus: consensus,
|
|
}
|
|
|
|
mp.mempoolUTXOSet = newMempoolUTXOSet(mp)
|
|
mp.transactionsPool = newTransactionsPool(mp)
|
|
mp.orphansPool = newOrphansPool(mp)
|
|
|
|
return mp
|
|
}
|
|
|
|
func (mp *mempool) ValidateAndInsertTransaction(transaction *externalapi.DomainTransaction, isHighPriority bool, allowOrphans bool) (
|
|
acceptedTransactions []*externalapi.DomainTransaction, err error) {
|
|
|
|
panic("mempool.ValidateAndInsertTransaction not implemented") // TODO (Mike)
|
|
}
|
|
|
|
func (mp *mempool) HandleNewBlockTransactions(transactions []*externalapi.DomainTransaction) (
|
|
acceptedOrphans []*externalapi.DomainTransaction, err error) {
|
|
|
|
panic("mempool.HandleNewBlockTransactions not implemented") // TODO (Mike)
|
|
}
|
|
|
|
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}
|
|
if removeRedeemers {
|
|
redeemers := mp.transactionsPool.getRedeemers(mempoolTransaction)
|
|
transactionsToRemove = append(transactionsToRemove, redeemers...)
|
|
}
|
|
|
|
for _, transactionToRemove := range transactionsToRemove {
|
|
err := mp.removeTransaction(transactionToRemove, removeRedeemers)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (mp *mempool) removeTransaction(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
|
|
}
|
|
|
|
func (mp *mempool) BlockCandidateTransactions() []*externalapi.DomainTransaction {
|
|
return mp.transactionsPool.allReadyTransactions()
|
|
}
|
|
|
|
func (mp *mempool) RevalidateHighPriorityTransactions() (validTransactions []*externalapi.DomainTransaction, err error) {
|
|
panic("mempool.RevalidateHighPriorityTransactions not implemented") // TODO (Mike)
|
|
}
|
|
|
|
func (mp *mempool) validateTransactionInIsolation(transaction *externalapi.DomainTransaction) error {
|
|
panic("mempool.validateTransactionInIsolation not implemented") // TODO (Mike)
|
|
}
|
|
|
|
func (mp *mempool) validateTransactionInContext(transaction *externalapi.DomainTransaction) error {
|
|
panic("mempool.validateTransactionInContext not implemented") // TODO (Mike)
|
|
}
|
|
|
|
func (mp *mempool) fillInputsAndGetMissingParents(transaction *externalapi.DomainTransaction) (
|
|
parents []*model.MempoolTransaction, missingParents []externalapi.DomainTransactionID, err error) {
|
|
|
|
panic("mempool.fillInputsAndGetMissingParents not implemented") // TODO (Mike)
|
|
}
|