1
- package factory
1
+ package rolldpos
2
2
3
3
import (
4
4
"sync"
@@ -14,30 +14,30 @@ import (
14
14
15
15
// proposalPool is a pool of draft blocks
16
16
type proposalPool struct {
17
- // blocks is a map of draft blocks
17
+ // nodes is a map of draft proposal blocks
18
18
// key is the hash of the block
19
- blocks map [hash.Hash256 ]* block.Block
20
- // forks is a map of draft blocks that are forks
19
+ nodes map [hash.Hash256 ]* block.Block
20
+ // leaves is a map of tip blocks of forks
21
21
// key is the hash of the tip block of the fork
22
22
// value is the timestamp of the block
23
- forks map [hash.Hash256 ]time.Time
23
+ leaves map [hash.Hash256 ]time.Time
24
24
// root is the hash of the tip block of the blockchain
25
25
root hash.Hash256
26
26
mu sync.Mutex
27
27
}
28
28
29
29
func newProposalPool () * proposalPool {
30
30
return & proposalPool {
31
- blocks : make (map [hash.Hash256 ]* block.Block ),
32
- forks : make (map [hash.Hash256 ]time.Time ),
31
+ nodes : make (map [hash.Hash256 ]* block.Block ),
32
+ leaves : make (map [hash.Hash256 ]time.Time ),
33
33
}
34
34
}
35
35
36
36
func (d * proposalPool ) Init (root hash.Hash256 ) {
37
37
d .mu .Lock ()
38
38
defer d .mu .Unlock ()
39
39
d .root = root
40
- log .L ().Info ("proposal pool initialized" , log .Hex ("root" , root [:]))
40
+ log .L ().Debug ("proposal pool initialized" , log .Hex ("root" , root [:]))
41
41
}
42
42
43
43
// AddBlock adds a block to the draft pool
@@ -46,19 +46,19 @@ func (d *proposalPool) AddBlock(blk *block.Block) error {
46
46
defer d .mu .Unlock ()
47
47
// nothing to do if the block already exists
48
48
hash := blk .HashBlock ()
49
- if _ , ok := d .blocks [hash ]; ok {
49
+ if _ , ok := d .nodes [hash ]; ok {
50
50
return nil
51
51
}
52
52
// it must be a new tip of any fork, or make a new fork
53
53
prevHash := blk .PrevHash ()
54
- if _ , ok := d .forks [prevHash ]; ok {
55
- delete (d .forks , prevHash )
54
+ if _ , ok := d .leaves [prevHash ]; ok {
55
+ delete (d .leaves , prevHash )
56
56
} else if prevHash != d .root {
57
57
return errors .Errorf ("block %x is not a tip of any fork" , prevHash [:])
58
58
}
59
- d .forks [hash ] = blk .Timestamp ()
60
- d .blocks [hash ] = blk
61
- log .L ().Info ("added block to draft pool" , log .Hex ("hash" , hash [:]), zap .Uint64 ("height" , blk .Height ()), zap .Time ("timestamp" , blk .Timestamp ()))
59
+ d .leaves [hash ] = blk .Timestamp ()
60
+ d .nodes [hash ] = blk
61
+ log .L ().Debug ("added block to draft pool" , log .Hex ("hash" , hash [:]), zap .Uint64 ("height" , blk .Height ()), zap .Time ("timestamp" , blk .Timestamp ()))
62
62
return nil
63
63
}
64
64
@@ -74,22 +74,22 @@ func (d *proposalPool) ReceiveBlock(blk *block.Block) error {
74
74
}
75
75
76
76
// remove blocks in other forks or older blocks in the same fork
77
- for f := range d .forks {
78
- start := d .blocks [f ]
77
+ for f := range d .leaves {
78
+ start := d .nodes [f ]
79
79
if f == fork {
80
80
start = blk
81
81
}
82
- for b := start ; b != nil ; b = d .blocks [b .PrevHash ()] {
82
+ for b := start ; b != nil ; b = d .nodes [b .PrevHash ()] {
83
83
ha := b .HashBlock ()
84
- log .L ().Info ("remove block from draft pool" , log .Hex ("hash" , ha [:]), zap .Uint64 ("height" , b .Height ()), zap .Time ("timestamp" , b .Timestamp ()))
85
- delete (d .blocks , b .HashBlock ())
84
+ log .L ().Debug ("remove block from draft pool" , log .Hex ("hash" , ha [:]), zap .Uint64 ("height" , b .Height ()), zap .Time ("timestamp" , b .Timestamp ()))
85
+ delete (d .nodes , b .HashBlock ())
86
86
}
87
87
}
88
88
// reset forks to only this one
89
- if forkTime , ok := d .forks [fork ]; ok && d .blocks [fork ] != nil {
90
- d .forks = map [hash.Hash256 ]time.Time {fork : forkTime }
89
+ if forkTime , ok := d .leaves [fork ]; ok && d .nodes [fork ] != nil {
90
+ d .leaves = map [hash.Hash256 ]time.Time {fork : forkTime }
91
91
} else {
92
- d .forks = map [hash.Hash256 ]time.Time {}
92
+ d .leaves = map [hash.Hash256 ]time.Time {}
93
93
}
94
94
d .root = blk .HashBlock ()
95
95
return nil
@@ -100,7 +100,7 @@ func (d *proposalPool) Block(height uint64) *block.Block {
100
100
d .mu .Lock ()
101
101
defer d .mu .Unlock ()
102
102
var blk * block.Block
103
- for _ , b := range d .blocks {
103
+ for _ , b := range d .nodes {
104
104
if b .Height () != height {
105
105
continue
106
106
} else if blk == nil {
@@ -116,13 +116,13 @@ func (d *proposalPool) Block(height uint64) *block.Block {
116
116
func (d * proposalPool ) BlockByHash (hash hash.Hash256 ) * block.Block {
117
117
d .mu .Lock ()
118
118
defer d .mu .Unlock ()
119
- return d .blocks [hash ]
119
+ return d .nodes [hash ]
120
120
}
121
121
122
122
func (d * proposalPool ) BlockByTime (prevHash hash.Hash256 , timestamp time.Time ) * block.Block {
123
123
d .mu .Lock ()
124
124
defer d .mu .Unlock ()
125
- for _ , b := range d .blocks {
125
+ for _ , b := range d .nodes {
126
126
if b .PrevHash () == prevHash && b .Timestamp ().Equal (timestamp ) {
127
127
return b
128
128
}
@@ -133,12 +133,12 @@ func (d *proposalPool) BlockByTime(prevHash hash.Hash256, timestamp time.Time) *
133
133
func (d * proposalPool ) forkAt (blk * block.Block ) (hash.Hash256 , error ) {
134
134
blkHash := blk .HashBlock ()
135
135
// If this block isn't in the pool, just return it
136
- if _ , ok := d .blocks [blkHash ]; ! ok {
136
+ if _ , ok := d .nodes [blkHash ]; ! ok {
137
137
return blkHash , nil
138
138
}
139
139
// Otherwise, find which fork chain contains it
140
- for forkTip := range d .forks {
141
- for b := d .blocks [forkTip ]; b != nil ; b = d .blocks [b .PrevHash ()] {
140
+ for forkTip := range d .leaves {
141
+ for b := d .nodes [forkTip ]; b != nil ; b = d .nodes [b .PrevHash ()] {
142
142
if blkHash == b .HashBlock () {
143
143
return forkTip , nil
144
144
}
0 commit comments