mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-10-14 00:59: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
|
package consensus
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/kaspanet/kaspad/domain/consensus/processes/dagtraversalmanager"
|
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"os"
|
"os"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
"github.com/kaspanet/kaspad/domain/consensus/processes/dagtraversalmanager"
|
||||||
|
|
||||||
"github.com/kaspanet/kaspad/infrastructure/db/database/ldb"
|
"github.com/kaspanet/kaspad/infrastructure/db/database/ldb"
|
||||||
|
|
||||||
consensusdatabase "github.com/kaspanet/kaspad/domain/consensus/database"
|
consensusdatabase "github.com/kaspanet/kaspad/domain/consensus/database"
|
||||||
@ -282,6 +283,7 @@ func (f *factory) NewConsensus(dagParams *dagconfig.Params, db infrastructuredat
|
|||||||
headerTipsStore: headerTipsStore,
|
headerTipsStore: headerTipsStore,
|
||||||
multisetStore: multisetStore,
|
multisetStore: multisetStore,
|
||||||
reachabilityDataStore: reachabilityDataStore,
|
reachabilityDataStore: reachabilityDataStore,
|
||||||
|
utxoDiffStore: utxoDiffStore,
|
||||||
}
|
}
|
||||||
|
|
||||||
genesisInfo, err := c.GetBlockInfo(genesisHash)
|
genesisInfo, err := c.GetBlockInfo(genesisHash)
|
||||||
@ -317,20 +319,20 @@ func (f *factory) NewTestConsensus(dagParams *dagconfig.Params, testName string)
|
|||||||
|
|
||||||
consensusAsImplementation := consensusAsInterface.(*consensus)
|
consensusAsImplementation := consensusAsInterface.(*consensus)
|
||||||
|
|
||||||
testBlockBuilder := blockbuilder.NewTestBlockBuilder(consensusAsImplementation.blockBuilder)
|
|
||||||
testConsensusStateManager := consensusstatemanager.NewTestConsensusStateManager(consensusAsImplementation.consensusStateManager)
|
testConsensusStateManager := consensusstatemanager.NewTestConsensusStateManager(consensusAsImplementation.consensusStateManager)
|
||||||
tc = &testConsensus{
|
|
||||||
|
tstConsensus := &testConsensus{
|
||||||
rd: rand.New(rand.NewSource(0)),
|
rd: rand.New(rand.NewSource(0)),
|
||||||
consensus: consensusAsImplementation,
|
consensus: consensusAsImplementation,
|
||||||
testBlockBuilder: testBlockBuilder,
|
|
||||||
testConsensusStateManager: testConsensusStateManager,
|
testConsensusStateManager: testConsensusStateManager,
|
||||||
testReachabilityManager: reachabilitymanager.NewTestReachabilityManager(consensusAsImplementation.
|
testReachabilityManager: reachabilitymanager.NewTestReachabilityManager(consensusAsImplementation.
|
||||||
reachabilityManager),
|
reachabilityManager),
|
||||||
}
|
}
|
||||||
|
tstConsensus.testBlockBuilder = blockbuilder.NewTestBlockBuilder(consensusAsImplementation.blockBuilder, tstConsensus)
|
||||||
teardown = func() {
|
teardown = func() {
|
||||||
db.Close()
|
db.Close()
|
||||||
os.RemoveAll(testDatabaseDir)
|
os.RemoveAll(testDatabaseDir)
|
||||||
}
|
}
|
||||||
|
|
||||||
return tc, teardown, nil
|
return tstConsensus, teardown, nil
|
||||||
}
|
}
|
||||||
|
@ -3,20 +3,25 @@ package blockbuilder
|
|||||||
import (
|
import (
|
||||||
"github.com/kaspanet/kaspad/domain/consensus/model"
|
"github.com/kaspanet/kaspad/domain/consensus/model"
|
||||||
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
|
"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/domain/consensus/utils/constants"
|
||||||
"github.com/kaspanet/kaspad/infrastructure/logger"
|
"github.com/kaspanet/kaspad/infrastructure/logger"
|
||||||
)
|
)
|
||||||
|
|
||||||
type testBlockBuilder struct {
|
type testBlockBuilder struct {
|
||||||
*blockBuilder
|
*blockBuilder
|
||||||
|
testConsensus testapi.TestConsensus
|
||||||
}
|
}
|
||||||
|
|
||||||
var tempBlockHash = &externalapi.DomainHash{
|
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}
|
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
|
// NewTestBlockBuilder creates an instance of a TestBlockBuilder
|
||||||
func NewTestBlockBuilder(baseBlockBuilder model.BlockBuilder) model.TestBlockBuilder {
|
func NewTestBlockBuilder(baseBlockBuilder model.BlockBuilder, testConsensus testapi.TestConsensus) model.TestBlockBuilder {
|
||||||
return &testBlockBuilder{blockBuilder: baseBlockBuilder.(*blockBuilder)}
|
return &testBlockBuilder{
|
||||||
|
blockBuilder: baseBlockBuilder.(*blockBuilder),
|
||||||
|
testConsensus: testConsensus,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bb *testBlockBuilder) BuildBlockWithParents(parentHashes []*externalapi.DomainHash, coinbaseData *externalapi.DomainCoinbaseData,
|
func (bb *testBlockBuilder) BuildBlockWithParents(parentHashes []*externalapi.DomainHash, coinbaseData *externalapi.DomainCoinbaseData,
|
||||||
@ -79,6 +84,20 @@ func (bb *testBlockBuilder) buildBlockWithParents(
|
|||||||
}
|
}
|
||||||
defer bb.ghostdagDataStore.Discard()
|
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)
|
_, acceptanceData, multiset, err := bb.consensusStateManager.CalculatePastUTXOAndAcceptanceData(tempBlockHash)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -87,7 +106,6 @@ func (bb *testBlockBuilder) buildBlockWithParents(
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer bb.acceptanceDataStore.Discard()
|
|
||||||
|
|
||||||
coinbase, err := bb.newBlockCoinbaseTransaction(coinbaseData)
|
coinbase, err := bb.newBlockCoinbaseTransaction(coinbaseData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -2,7 +2,6 @@ package consensus
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/kaspanet/kaspad/domain/consensus/model"
|
"github.com/kaspanet/kaspad/domain/consensus/model"
|
||||||
"github.com/kaspanet/kaspad/domain/consensus/processes/blockbuilder"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func (tc *testConsensus) DatabaseContext() model.DBReader {
|
func (tc *testConsensus) DatabaseContext() model.DBReader {
|
||||||
@ -58,7 +57,7 @@ func (tc *testConsensus) UTXODiffStore() model.UTXODiffStore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (tc *testConsensus) BlockBuilder() model.TestBlockBuilder {
|
func (tc *testConsensus) BlockBuilder() model.TestBlockBuilder {
|
||||||
return blockbuilder.NewTestBlockBuilder(tc.blockBuilder)
|
return tc.testBlockBuilder
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tc *testConsensus) BlockProcessor() model.BlockProcessor {
|
func (tc *testConsensus) BlockProcessor() model.BlockProcessor {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user