Skip to content

Commit f857573

Browse files
authored
Merge pull request #897 from lochjin/dev2.0
fix:block sync issues caused by meer dag cropping
2 parents d35ce80 + 9559cfb commit f857573

File tree

7 files changed

+38
-17
lines changed

7 files changed

+38
-17
lines changed

core/blockchain/behaviorflags.go

+21-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
package blockchain
22

3+
import "fmt"
4+
35
// BehaviorFlags is a bitmask defining tweaks to the normal behavior when
46
// performing chain processing and consensus rules checks.
57
type BehaviorFlags uint32
68

79
const (
10+
// BFNone is a convenience value to specifically indicate no flags.
11+
BFNone BehaviorFlags = 0
12+
813
// BFFastAdd may be set to indicate that several checks can be avoided
914
// for the block since it is already known to fit into the chain due to
1015
// already proving it correct links into the chain up to a known
@@ -23,11 +28,24 @@ const (
2328

2429
// Add block from broadcast interface
2530
BFBroadcast
26-
27-
// BFNone is a convenience value to specifically indicate no flags.
28-
BFNone BehaviorFlags = 0
2931
)
3032

33+
var bfStrings = map[BehaviorFlags]string{
34+
BFNone: "BFNone",
35+
BFFastAdd: "BFFastAdd",
36+
BFNoPoWCheck: "BFNoPoWCheck",
37+
BFP2PAdd: "BFP2PAdd",
38+
BFRPCAdd: "BFRPCAdd",
39+
BFBroadcast: "BFBroadcast",
40+
}
41+
42+
func (bf BehaviorFlags) String() string {
43+
if s, ok := bfStrings[bf]; ok {
44+
return s
45+
}
46+
return fmt.Sprintf("Unknown BehaviorFlags (%d)", uint32(bf))
47+
}
48+
3149
func (bf BehaviorFlags) Has(value BehaviorFlags) bool {
3250
return (bf & value) == value
3351
}

core/blockchain/blockchain.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ func (b *BlockChain) createChainState() error {
347347
if err != nil {
348348
return err
349349
}
350-
return b.bd.Commit()
350+
return b.bd.Commit(false)
351351
}
352352

353353
func (b *BlockChain) Start() error {
@@ -1002,7 +1002,7 @@ func (b *BlockChain) Rebuild() error {
10021002
if err != nil {
10031003
log.Error(err.Error())
10041004
}
1005-
err = b.bd.Commit()
1005+
err = b.bd.Commit(false)
10061006
if err != nil {
10071007
return err
10081008
}

core/blockchain/process.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,9 @@ func (b *BlockChain) processBlock(block *types.SerializedBlock, flags BehaviorFl
109109
return ib, false, err
110110
}
111111
if source != nil {
112-
log.Debug("Accepted block", "hash", block.Hash().String(), "age", time.Since(block.Block().Header.Timestamp), "source", source.ShortString())
112+
log.Debug("Accepted block", "hash", block.Hash().String(), "age", time.Since(block.Block().Header.Timestamp), "BFlags", flags.String(), "source", source.ShortString())
113113
} else {
114-
log.Debug("Accepted block", "hash", block.Hash().String(), "age", time.Since(block.Block().Header.Timestamp))
114+
log.Debug("Accepted block", "hash", block.Hash().String(), "age", time.Since(block.Block().Header.Timestamp), "BFlags", flags.String())
115115
}
116116

117117
return ib, false, nil
@@ -282,7 +282,7 @@ func (b *BlockChain) maybeAcceptBlock(block *types.SerializedBlock, flags Behavi
282282
if err != nil {
283283
panic(err.Error())
284284
}
285-
err = b.updateBestState(ib, block, newOrders)
285+
err = b.updateBestState(block, flags.Has(BFBroadcast) || flags.Has(BFRPCAdd))
286286
if err != nil {
287287
panic(err.Error())
288288
}
@@ -692,8 +692,8 @@ func (bc *BlockChain) disconnectTransactions(block *types.SerializedBlock, stxos
692692
return nil
693693
}
694694

695-
func (b *BlockChain) updateBestState(ib meerdag.IBlock, block *types.SerializedBlock, attachNodes *list.List) error {
696-
err := b.bd.Commit()
695+
func (b *BlockChain) updateBestState(block *types.SerializedBlock, prune bool) error {
696+
err := b.bd.Commit(prune)
697697
if err != nil {
698698
return err
699699
}

core/blockchain/snap.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ func (b *BlockChain) ProcessBlockBySnap(sds []*SnapData) (meerdag.IBlock, error)
231231

232232
txNum += int64(len(sd.block.Transactions()))
233233
}
234-
err := b.updateBestState(nil, sds[len(sds)-1].block, nil)
234+
err := b.updateBestState(sds[len(sds)-1].block, false)
235235
if err != nil {
236236
return returnFun(err)
237237
}

meerdag/ghostdag.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ func (gd *GhostDAG) UpdateOrders() error {
240240
curOrder++
241241

242242
}
243-
return gd.bd.commit()
243+
return gd.bd.commit(true)
244244
}
245245

246246
// ---------------

meerdag/meerdag.go

+7-4
Original file line numberDiff line numberDiff line change
@@ -532,7 +532,7 @@ func (bd *MeerDAG) AddDirectBlock(b IBlockData, ib IBlock, main bool, bids map[u
532532
//
533533
bd.instance.(*Phantom).AddDirectBlock(ib, main)
534534
bd.commitOrder[pblock.GetOrder()] = pblock.GetID()
535-
err := bd.commit()
535+
err := bd.commit(false)
536536
if err != nil {
537537
return nil, err
538538
}
@@ -1304,14 +1304,14 @@ func (bd *MeerDAG) AddToCommit(block IBlock) {
13041304
}
13051305

13061306
// Commit the consensus content to the database for persistence
1307-
func (bd *MeerDAG) Commit() error {
1307+
func (bd *MeerDAG) Commit(prune bool) error {
13081308
bd.stateLock.Lock()
13091309
defer bd.stateLock.Unlock()
1310-
return bd.commit()
1310+
return bd.commit(prune)
13111311
}
13121312

13131313
// Commit the consensus content to the database for persistence
1314-
func (bd *MeerDAG) commit() error {
1314+
func (bd *MeerDAG) commit(prune bool) error {
13151315
needPB := false
13161316
if bd.lastSnapshot.IsValid() {
13171317
needPB = true
@@ -1403,6 +1403,9 @@ func (bd *MeerDAG) commit() error {
14031403
if err != nil {
14041404
return err
14051405
}
1406+
if !prune {
1407+
return nil
1408+
}
14061409
bd.optimizeTips(false)
14071410
return nil
14081411
}

meerdag/test/meerdag_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ func addBlock(tag string, parents []*hash.Hash) (*TestBlock, meerdag.IBlock, err
265265

266266
func commitBlock(tag string, block *TestBlock, ib meerdag.IBlock) error {
267267
tbMap[tag] = ib
268-
err := bd.Commit()
268+
err := bd.Commit(true)
269269
if err != nil {
270270
return err
271271
}

0 commit comments

Comments
 (0)