github.com/reapchain/go-reapchain@v0.2.15-0.20210609012950-9735c110c705/consensus/podc/core/final_committed.go (about)

     1  // Copyright 2017 AMIS Technologies
     2  // This file is part of the go-ethereum library.
     3  //
     4  // The go-ethereum library is free software: you can redistribute it and/or modify
     5  // it under the terms of the GNU Lesser General Public License as published by
     6  // the Free Software Foundation, either version 3 of the License, or
     7  // (at your option) any later version.
     8  //
     9  // The go-ethereum library is distributed in the hope that it will be useful,
    10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    12  // GNU Lesser General Public License for more details.
    13  //
    14  // You should have received a copy of the GNU Lesser General Public License
    15  // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
    16  
    17  package core
    18  
    19  import (
    20  	"math/big"
    21  	"time"
    22  	"github.com/ethereum/go-ethereum/common"
    23  	"github.com/ethereum/go-ethereum/consensus/podc"
    24  )
    25  
    26  func (c *core) handleFinalCommitted(proposal podc.Proposal, proposer common.Address) error {
    27  	logger := c.logger.New("state", c.state, "number", proposal.Number(), "hash", proposal.Hash())
    28  	logger.Trace("Received a final committed proposal")
    29  
    30  	// Catch up the sequence number
    31  	if proposal.Number().Cmp(c.current.Sequence()) >= 0 {
    32  		// Remember to store the proposer since we've accpetted the proposal
    33  		diff := new(big.Int).Sub(proposal.Number(), c.current.Sequence())
    34  		c.sequenceMeter.Mark(new(big.Int).Add(diff, common.Big1).Int64())
    35  
    36  		if !c.consensusTimestamp.IsZero() {
    37  			c.consensusTimer.UpdateSince(c.consensusTimestamp)
    38  			c.consensusTimestamp = time.Time{}
    39  		}
    40  
    41  		c.lastProposer = proposer
    42  		c.lastProposal = proposal
    43  		c.startNewRound(&podc.View{
    44  			Sequence: new(big.Int).Add(proposal.Number(), common.Big1),  // +1 sequence no
    45  			Round:    new(big.Int).Set(common.Big0),                     // round  set 0
    46  		}, false)
    47  	}
    48  
    49  	return nil
    50  }