mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-03-30 15:08:33 +00:00
[NOD-1532] Make BuildBlockWithParents resolve the status of the new block's selectedParent
This commit is contained in:
parent
7d14f24b84
commit
aeded07815
@ -1,12 +1,13 @@
|
||||
package consensus
|
||||
|
||||
import (
|
||||
"github.com/kaspanet/kaspad/domain/consensus/processes/dagtraversalmanager"
|
||||
"io/ioutil"
|
||||
"math/rand"
|
||||
"os"
|
||||
"sync"
|
||||
|
||||
"github.com/kaspanet/kaspad/domain/consensus/processes/dagtraversalmanager"
|
||||
|
||||
"github.com/kaspanet/kaspad/infrastructure/db/database/ldb"
|
||||
|
||||
consensusdatabase "github.com/kaspanet/kaspad/domain/consensus/database"
|
||||
@ -282,6 +283,7 @@ func (f *factory) NewConsensus(dagParams *dagconfig.Params, db infrastructuredat
|
||||
headerTipsStore: headerTipsStore,
|
||||
multisetStore: multisetStore,
|
||||
reachabilityDataStore: reachabilityDataStore,
|
||||
utxoDiffStore: utxoDiffStore,
|
||||
}
|
||||
|
||||
genesisInfo, err := c.GetBlockInfo(genesisHash)
|
||||
@ -317,20 +319,20 @@ func (f *factory) NewTestConsensus(dagParams *dagconfig.Params, testName string)
|
||||
|
||||
consensusAsImplementation := consensusAsInterface.(*consensus)
|
||||
|
||||
testBlockBuilder := blockbuilder.NewTestBlockBuilder(consensusAsImplementation.blockBuilder)
|
||||
testConsensusStateManager := consensusstatemanager.NewTestConsensusStateManager(consensusAsImplementation.consensusStateManager)
|
||||
tc = &testConsensus{
|
||||
rd: rand.New(rand.NewSource(0)),
|
||||
|
||||
tstConsensus := &testConsensus{
|
||||
rd: rand.New(rand.NewSource(0)),
|
||||
consensus: consensusAsImplementation,
|
||||
testBlockBuilder: testBlockBuilder,
|
||||
testConsensusStateManager: testConsensusStateManager,
|
||||
testReachabilityManager: reachabilitymanager.NewTestReachabilityManager(consensusAsImplementation.
|
||||
reachabilityManager),
|
||||
}
|
||||
tstConsensus.testBlockBuilder = blockbuilder.NewTestBlockBuilder(consensusAsImplementation.blockBuilder, tstConsensus)
|
||||
teardown = func() {
|
||||
db.Close()
|
||||
os.RemoveAll(testDatabaseDir)
|
||||
}
|
||||
|
||||
return tc, teardown, nil
|
||||
return tstConsensus, teardown, nil
|
||||
}
|
||||
|
@ -3,20 +3,25 @@ package blockbuilder
|
||||
import (
|
||||
"github.com/kaspanet/kaspad/domain/consensus/model"
|
||||
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
|
||||
"github.com/kaspanet/kaspad/domain/consensus/model/testapi"
|
||||
"github.com/kaspanet/kaspad/domain/consensus/utils/constants"
|
||||
"github.com/kaspanet/kaspad/infrastructure/logger"
|
||||
)
|
||||
|
||||
type testBlockBuilder struct {
|
||||
*blockBuilder
|
||||
testConsensus testapi.TestConsensus
|
||||
}
|
||||
|
||||
var tempBlockHash = &externalapi.DomainHash{
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
|
||||
|
||||
// NewTestBlockBuilder creates an instance of a TestBlockBuilder
|
||||
func NewTestBlockBuilder(baseBlockBuilder model.BlockBuilder) model.TestBlockBuilder {
|
||||
return &testBlockBuilder{blockBuilder: baseBlockBuilder.(*blockBuilder)}
|
||||
func NewTestBlockBuilder(baseBlockBuilder model.BlockBuilder, testConsensus testapi.TestConsensus) model.TestBlockBuilder {
|
||||
return &testBlockBuilder{
|
||||
blockBuilder: baseBlockBuilder.(*blockBuilder),
|
||||
testConsensus: testConsensus,
|
||||
}
|
||||
}
|
||||
|
||||
func (bb *testBlockBuilder) BuildBlockWithParents(parentHashes []*externalapi.DomainHash, coinbaseData *externalapi.DomainCoinbaseData,
|
||||
@ -79,6 +84,20 @@ func (bb *testBlockBuilder) buildBlockWithParents(
|
||||
}
|
||||
defer bb.ghostdagDataStore.Discard()
|
||||
|
||||
ghostdagData, err := bb.ghostdagDataStore.Get(bb.databaseContext, tempBlockHash)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
_, err = bb.testConsensus.ConsensusStateManager().ResolveBlockStatus(ghostdagData.SelectedParent)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer bb.testConsensus.BlockStatusStore().Discard()
|
||||
defer bb.acceptanceDataStore.Discard()
|
||||
defer bb.multisetStore.Discard()
|
||||
defer bb.testConsensus.UTXODiffStore().Discard()
|
||||
|
||||
_, acceptanceData, multiset, err := bb.consensusStateManager.CalculatePastUTXOAndAcceptanceData(tempBlockHash)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -87,7 +106,6 @@ func (bb *testBlockBuilder) buildBlockWithParents(
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer bb.acceptanceDataStore.Discard()
|
||||
|
||||
coinbase, err := bb.newBlockCoinbaseTransaction(coinbaseData)
|
||||
if err != nil {
|
||||
|
@ -2,7 +2,6 @@ package consensus
|
||||
|
||||
import (
|
||||
"github.com/kaspanet/kaspad/domain/consensus/model"
|
||||
"github.com/kaspanet/kaspad/domain/consensus/processes/blockbuilder"
|
||||
)
|
||||
|
||||
func (tc *testConsensus) DatabaseContext() model.DBReader {
|
||||
@ -58,7 +57,7 @@ func (tc *testConsensus) UTXODiffStore() model.UTXODiffStore {
|
||||
}
|
||||
|
||||
func (tc *testConsensus) BlockBuilder() model.TestBlockBuilder {
|
||||
return blockbuilder.NewTestBlockBuilder(tc.blockBuilder)
|
||||
return tc.testBlockBuilder
|
||||
}
|
||||
|
||||
func (tc *testConsensus) BlockProcessor() model.BlockProcessor {
|
||||
|
Loading…
x
Reference in New Issue
Block a user