OSDN Git Service

Hulk did something
[bytom/vapor.git] / netsync / block_keeper.go
index a36c8a4..479403d 100644 (file)
@@ -6,9 +6,9 @@ import (
 
        log "github.com/sirupsen/logrus"
 
-       "github.com/vapor/chain"
        "github.com/vapor/consensus"
        "github.com/vapor/errors"
+       "github.com/vapor/mining/tensority"
        "github.com/vapor/protocol/bc"
        "github.com/vapor/protocol/bc/types"
 )
@@ -47,7 +47,7 @@ type headersMsg struct {
 }
 
 type blockKeeper struct {
-       chain chain.Chain
+       chain Chain
        peers *peerSet
 
        syncPeer         *peer
@@ -58,7 +58,7 @@ type blockKeeper struct {
        headerList *list.List
 }
 
-func newBlockKeeper(chain chain.Chain, peers *peerSet) *blockKeeper {
+func newBlockKeeper(chain Chain, peers *peerSet) *blockKeeper {
        bk := &blockKeeper{
                chain:            chain,
                peers:            peers,
@@ -158,7 +158,14 @@ func (bk *blockKeeper) fastBlockSync(checkPoint *consensus.Checkpoint) error {
                                return errPeerMisbehave
                        }
 
-                       _, err := bk.chain.ProcessBlock(block)
+                       seed, err := bk.chain.CalcNextSeed(&block.PreviousBlockHash)
+                       if err != nil {
+                               return errors.Wrap(err, "fail on fastBlockSync calculate seed")
+                       }
+
+                       tensority.AIHash.AddCache(&blockHash, seed, &bc.Hash{})
+                       _, err = bk.chain.ProcessBlock(block)
+                       tensority.AIHash.RemoveCache(&blockHash, seed)
                        if err != nil {
                                return errors.Wrap(err, "fail on fastBlockSync process block")
                        }
@@ -282,7 +289,9 @@ func (bk *blockKeeper) requireBlock(height uint64) (*types.Block, error) {
                return nil, errPeerDropped
        }
 
-       waitTicker := time.NewTimer(syncTimeout)
+       timeout := time.NewTimer(syncTimeout)
+       defer timeout.Stop()
+
        for {
                select {
                case msg := <-bk.blockProcessCh:
@@ -293,7 +302,7 @@ func (bk *blockKeeper) requireBlock(height uint64) (*types.Block, error) {
                                continue
                        }
                        return msg.block, nil
-               case <-waitTicker.C:
+               case <-timeout.C:
                        return nil, errors.Wrap(errRequestTimeout, "requireBlock")
                }
        }
@@ -304,7 +313,9 @@ func (bk *blockKeeper) requireBlocks(locator []*bc.Hash, stopHash *bc.Hash) ([]*
                return nil, errPeerDropped
        }
 
-       waitTicker := time.NewTimer(syncTimeout)
+       timeout := time.NewTimer(syncTimeout)
+       defer timeout.Stop()
+
        for {
                select {
                case msg := <-bk.blocksProcessCh:
@@ -312,7 +323,7 @@ func (bk *blockKeeper) requireBlocks(locator []*bc.Hash, stopHash *bc.Hash) ([]*
                                continue
                        }
                        return msg.blocks, nil
-               case <-waitTicker.C:
+               case <-timeout.C:
                        return nil, errors.Wrap(errRequestTimeout, "requireBlocks")
                }
        }
@@ -323,7 +334,9 @@ func (bk *blockKeeper) requireHeaders(locator []*bc.Hash, stopHash *bc.Hash) ([]
                return nil, errPeerDropped
        }
 
-       waitTicker := time.NewTimer(syncTimeout)
+       timeout := time.NewTimer(syncTimeout)
+       defer timeout.Stop()
+
        for {
                select {
                case msg := <-bk.headersProcessCh:
@@ -331,7 +344,7 @@ func (bk *blockKeeper) requireHeaders(locator []*bc.Hash, stopHash *bc.Hash) ([]
                                continue
                        }
                        return msg.headers, nil
-               case <-waitTicker.C:
+               case <-timeout.C:
                        return nil, errors.Wrap(errRequestTimeout, "requireHeaders")
                }
        }
@@ -386,6 +399,8 @@ func (bk *blockKeeper) syncWorker() {
                return
        }
        syncTicker := time.NewTicker(syncCycle)
+       defer syncTicker.Stop()
+
        for {
                <-syncTicker.C
                if update := bk.startSync(); !update {