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"
)
}
type blockKeeper struct {
- chain chain.Chain
+ chain Chain
peers *peerSet
syncPeer *peer
headerList *list.List
}
-func newBlockKeeper(chain chain.Chain, peers *peerSet) *blockKeeper {
+func newBlockKeeper(chain Chain, peers *peerSet) *blockKeeper {
bk := &blockKeeper{
chain: chain,
peers: peers,
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")
}
return nil, errPeerDropped
}
- waitTicker := time.NewTimer(syncTimeout)
+ timeout := time.NewTimer(syncTimeout)
+ defer timeout.Stop()
+
for {
select {
case msg := <-bk.blockProcessCh:
continue
}
return msg.block, nil
- case <-waitTicker.C:
+ case <-timeout.C:
return nil, errors.Wrap(errRequestTimeout, "requireBlock")
}
}
return nil, errPeerDropped
}
- waitTicker := time.NewTimer(syncTimeout)
+ timeout := time.NewTimer(syncTimeout)
+ defer timeout.Stop()
+
for {
select {
case msg := <-bk.blocksProcessCh:
continue
}
return msg.blocks, nil
- case <-waitTicker.C:
+ case <-timeout.C:
return nil, errors.Wrap(errRequestTimeout, "requireBlocks")
}
}
return nil, errPeerDropped
}
- waitTicker := time.NewTimer(syncTimeout)
+ timeout := time.NewTimer(syncTimeout)
+ defer timeout.Stop()
+
for {
select {
case msg := <-bk.headersProcessCh:
continue
}
return msg.headers, nil
- case <-waitTicker.C:
+ case <-timeout.C:
return nil, errors.Wrap(errRequestTimeout, "requireHeaders")
}
}
return
}
syncTicker := time.NewTicker(syncCycle)
+ defer syncTicker.Stop()
+
for {
<-syncTicker.C
if update := bk.startSync(); !update {