github.com/0xPolygon/supernets2-node@v0.0.0-20230711153321-2fe574524eaa/state/forkid.go (about)

     1  package state
     2  
     3  import "github.com/0xPolygon/supernets2-node/log"
     4  
     5  // ForkIDInterval is a fork id interval
     6  type ForkIDInterval struct {
     7  	FromBatchNumber uint64
     8  	ToBatchNumber   uint64
     9  	ForkId          uint64
    10  	Version         string
    11  }
    12  
    13  // UpdateForkIDIntervals updates the forkID intervals
    14  func (s *State) UpdateForkIDIntervals(intervals []ForkIDInterval) {
    15  	log.Infof("Updating forkIDs. Setting %d forkIDs", len(intervals))
    16  	s.cfg.ForkIDIntervals = intervals
    17  }
    18  
    19  // GetForkIDByBatchNumber returns the fork id for a given batch number
    20  func GetForkIDByBatchNumber(intervals []ForkIDInterval, batchNumber uint64) uint64 {
    21  	for _, interval := range intervals {
    22  		if batchNumber >= interval.FromBatchNumber && batchNumber <= interval.ToBatchNumber {
    23  			return interval.ForkId
    24  		}
    25  	}
    26  
    27  	// If not found return the last fork id
    28  	return intervals[len(intervals)-1].ForkId
    29  }
    30  
    31  // GetForkIDByBatchNumber returns the fork id for the given batch number
    32  func (s *State) GetForkIDByBatchNumber(batchNumber uint64) uint64 {
    33  	return GetForkIDByBatchNumber(s.cfg.ForkIDIntervals, batchNumber)
    34  }