mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-05-23 15:26:42 +00:00

* [NOD-1451] Implement block validator * [NOD-1451] Implement block validator * [NOD-1451] Fix merge errors * [NOD-1451] Implement block validator * [NOD-1451] Implement checkTransactionInIsolation * [NOD-1451] Copy txscript to validator * [NOD-1451] Change txscript to new design * [NOD-1451] Add checkTransactionInContext * [NOD-1451] Add checkBlockSize * [NOD-1451] Add error handling * [NOD-1451] Implement checkTransactionInContext * [NOD-1451] Add checkTransactionMass placeholder * [NOD-1451] Finish validators * [NOD-1451] Add comments and stringers * [NOD-1451] Return model.TransactionValidator interface * [NOD-1451] Premake rule errors for each "code" * [NOD-1451] Populate transaction mass * [NOD-1451] Renmae functions * [NOD-1451] Always use skipPow=false * [NOD-1451] Renames * [NOD-1451] Remove redundant types from WriteElement * [NOD-1451] Fix error message * [NOD-1451] Add checkTransactionPayload * [NOD-1451] Add ValidateProofOfWorkAndDifficulty to block validator interface * [NOD-1451] Move stringers to model * [NOD-1451] Fix error message
60 lines
2.2 KiB
Go
60 lines
2.2 KiB
Go
package consensus
|
|
|
|
import (
|
|
"github.com/kaspanet/kaspad/domain/consensus/model"
|
|
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
|
|
)
|
|
|
|
// Consensus maintains the current core state of the node
|
|
type Consensus interface {
|
|
BuildBlock(coinbaseData *externalapi.DomainCoinbaseData, transactions []*externalapi.DomainTransaction) (*externalapi.DomainBlock, error)
|
|
ValidateAndInsertBlock(block *externalapi.DomainBlock) error
|
|
ValidateTransactionAndPopulateWithConsensusData(transaction *externalapi.DomainTransaction) error
|
|
}
|
|
|
|
type consensus struct {
|
|
blockProcessor model.BlockProcessor
|
|
consensusStateManager model.ConsensusStateManager
|
|
transactionValidator model.TransactionValidator
|
|
}
|
|
|
|
// BuildBlock builds a block over the current state, with the transactions
|
|
// selected by the given transactionSelector
|
|
func (s *consensus) BuildBlock(coinbaseData *externalapi.DomainCoinbaseData,
|
|
transactions []*externalapi.DomainTransaction) (*externalapi.DomainBlock, error) {
|
|
|
|
return s.blockProcessor.BuildBlock(coinbaseData, transactions)
|
|
}
|
|
|
|
// ValidateAndInsertBlock validates the given block and, if valid, applies it
|
|
// to the current state
|
|
func (s *consensus) ValidateAndInsertBlock(block *externalapi.DomainBlock) error {
|
|
return s.blockProcessor.ValidateAndInsertBlock(block)
|
|
}
|
|
|
|
// ValidateTransactionAndPopulateWithConsensusData validates the given transaction
|
|
// and populates it with any missing consensus data
|
|
func (s *consensus) ValidateTransactionAndPopulateWithConsensusData(transaction *externalapi.DomainTransaction) error {
|
|
err := s.transactionValidator.ValidateTransactionInIsolation(transaction)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = s.consensusStateManager.PopulateTransactionWithUTXOEntries(transaction)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return s.transactionValidator.ValidateTransactionInContextAndPopulateMassAndFee(transaction,
|
|
validateTransactionInContextAndPopulateMassAndFeeVirtualBlockHash(),
|
|
validateTransactionInContextAndPopulateMassAndFeeSelectedParentMedianTime())
|
|
}
|
|
|
|
func validateTransactionInContextAndPopulateMassAndFeeSelectedParentMedianTime() int64 {
|
|
panic("unimplemented")
|
|
}
|
|
|
|
func validateTransactionInContextAndPopulateMassAndFeeVirtualBlockHash() *externalapi.DomainHash {
|
|
panic("unimplemented")
|
|
}
|