aboutsummaryrefslogtreecommitdiffstats
path: root/core/consensus.go
diff options
context:
space:
mode:
authorJimmy Hu <jimmy.hu@dexon.org>2018-10-18 14:48:05 +0800
committerGitHub <noreply@github.com>2018-10-18 14:48:05 +0800
commit8303e9d054957195717f41804a456e2720b0c4bb (patch)
tree8ad2b0ead5391ec6de2c0a39d75b679db87af6b0 /core/consensus.go
parenteae2d201e927c774f2f409f09fa132e4678f540c (diff)
downloaddexon-consensus-8303e9d054957195717f41804a456e2720b0c4bb.tar
dexon-consensus-8303e9d054957195717f41804a456e2720b0c4bb.tar.gz
dexon-consensus-8303e9d054957195717f41804a456e2720b0c4bb.tar.bz2
dexon-consensus-8303e9d054957195717f41804a456e2720b0c4bb.tar.lz
dexon-consensus-8303e9d054957195717f41804a456e2720b0c4bb.tar.xz
dexon-consensus-8303e9d054957195717f41804a456e2720b0c4bb.tar.zst
dexon-consensus-8303e9d054957195717f41804a456e2720b0c4bb.zip
core: sync compaction chain (#222)
Diffstat (limited to 'core/consensus.go')
-rw-r--r--core/consensus.go20
1 files changed, 19 insertions, 1 deletions
diff --git a/core/consensus.go b/core/consensus.go
index 3601720..d3f8b5d 100644
--- a/core/consensus.go
+++ b/core/consensus.go
@@ -740,10 +740,28 @@ func (con *Consensus) processBlock(block *types.Block) (err error) {
// processFinalizedBlock is the entry point for syncing blocks.
func (con *Consensus) processFinalizedBlock(block *types.Block) (err error) {
- // TODO(jimmy-dexon): drop block that is already in compaction chain.
if err = con.lattice.SanityCheck(block, false); err != nil {
return
}
+ con.ccModule.processFinalizedBlock(block)
+ for {
+ confirmed := con.ccModule.extractFinalizedBlocks()
+ if len(confirmed) == 0 {
+ break
+ }
+ if err = con.lattice.ctModule.processBlocks(confirmed); err != nil {
+ return
+ }
+ for _, b := range confirmed {
+ if err = con.db.Put(*b); err != nil {
+ if err != blockdb.ErrBlockExists {
+ return
+ }
+ err = nil
+ }
+ con.nbModule.BlockDelivered(b.Hash, b.Finalization)
+ }
+ }
return
}