forked from kaspanet/kaspad
-
Notifications
You must be signed in to change notification settings - Fork 0
/
parentsmanager.go
42 lines (34 loc) · 1.18 KB
/
parentsmanager.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package parentssanager
import (
"github.com/zoomy-network/zoomyd/domain/consensus/model"
"github.com/zoomy-network/zoomyd/domain/consensus/model/externalapi"
)
type parentsManager struct {
genesisHash *externalapi.DomainHash
maxBlockLevel int
}
// New instantiates a new ParentsManager
func New(genesisHash *externalapi.DomainHash, maxBlockLevel int) model.ParentsManager {
return &parentsManager{
genesisHash: genesisHash,
maxBlockLevel: maxBlockLevel,
}
}
func (pm *parentsManager) ParentsAtLevel(blockHeader externalapi.BlockHeader, level int) externalapi.BlockLevelParents {
var parentsAtLevel externalapi.BlockLevelParents
if len(blockHeader.Parents()) > level {
parentsAtLevel = blockHeader.Parents()[level]
}
if len(parentsAtLevel) == 0 && len(blockHeader.DirectParents()) > 0 {
return externalapi.BlockLevelParents{pm.genesisHash}
}
return parentsAtLevel
}
func (pm *parentsManager) Parents(blockHeader externalapi.BlockHeader) []externalapi.BlockLevelParents {
numParents := pm.maxBlockLevel + 1
parents := make([]externalapi.BlockLevelParents, numParents)
for i := 0; i < numParents; i++ {
parents[i] = pm.ParentsAtLevel(blockHeader, i)
}
return parents
}