OSDN Git Service

optimise protocol
authoroys <oys@oysdeMacBook-Pro.local>
Wed, 19 Jun 2019 13:42:55 +0000 (21:42 +0800)
committeroys <oys@oysdeMacBook-Pro.local>
Wed, 19 Jun 2019 13:42:55 +0000 (21:42 +0800)
protocol/block.go
protocol/protocol.go

index 31384fa..904320d 100644 (file)
@@ -109,16 +109,13 @@ func (c *Chain) connectBlock(block *types.Block) (err error) {
                return err
        }
 
-       node, err := c.store.GetBlockHeader(&bcBlock.ID)
-       if err != nil {
-               return err
-       }
-
-       if c.isIrreversible(node) && block.Height > irreversibleNode.Height {
-               irreversibleNode = node
+       // pointer copy?
+       blockHeader := &block.BlockHeader
+       if c.isIrreversible(blockHeader) && block.Height > irreversibleNode.Height {
+               irreversibleNode = blockHeader
        }
 
-       if err := c.setState(node, irreversibleNode, utxoView, []*state.VoteResult{voteResult}); err != nil {
+       if err := c.setState(blockHeader, irreversibleNode, utxoView, []*state.VoteResult{voteResult}); err != nil {
                return err
        }
 
@@ -318,27 +315,22 @@ func (c *Chain) processBlock(block *types.Block) (bool, error) {
        }
 
        bestBlock := c.saveSubBlock(block)
-       bestBlockHash := bestBlock.Hash()
-       bestNode, err := c.store.GetBlockHeader(&bestBlockHash)
-       if err != nil {
-               return false, err
-       }
-
-       parentBestNode, err := c.store.GetBlockHeader(&bestNode.PreviousBlockHash)
+       bestBlockHeader := &block.BlockHeader
+       parentBestBlockHeader, err := c.store.GetBlockHeader(&bestBlockHeader.PreviousBlockHash)
        if err != nil {
                return false, err
        }
 
        c.cond.L.Lock()
        defer c.cond.L.Unlock()
-       if parentBestNode == c.bestNode {
+       if parentBestBlockHeader.Hash() == c.bestNode.Hash() {
                log.WithFields(log.Fields{"module": logModule}).Debug("append block to the end of mainchain")
                return false, c.connectBlock(bestBlock)
        }
 
-       if bestNode.Height > c.bestNode.Height {
+       if bestBlockHeader.Height > c.bestNode.Height {
                log.WithFields(log.Fields{"module": logModule}).Debug("start to reorganize chain")
-               return false, c.reorganizeChain(bestNode)
+               return false, c.reorganizeChain(bestBlockHeader)
        }
        return false, nil
 }
index 2562110..90464f5 100644 (file)
@@ -51,19 +51,16 @@ func NewChain(store Store, txPool *TxPool, eventDispatcher *event.Dispatcher) (*
                storeStatus = store.GetStoreStatus()
        }
 
-       // TODO common pointer for bestNode
-       bestNode, err := c.store.GetBlockHeader(storeStatus.Hash)
+       var err error
+       c.bestNode, err = c.store.GetBlockHeader(storeStatus.Hash)
        if err != nil {
                return nil, err
        }
 
-       bestIrreversibleNode, err := c.store.GetBlockHeader(storeStatus.IrreversibleHash)
+       c.bestIrreversibleNode, err = c.store.GetBlockHeader(storeStatus.IrreversibleHash)
        if err != nil {
                return nil, err
        }
-
-       c.bestNode = bestNode
-       c.bestIrreversibleNode = bestIrreversibleNode
        c.consensusNodeManager = newConsensusNodeManager(store, c.bestNode)
        go c.blockProcesser()
        return c, nil