github.com/unicornultrafoundation/go-u2u@v1.0.0-rc1.0.20240205080301-e74a83d3fadc/native/gas_power_left.go (about)

     1  package native
     2  
     3  import "fmt"
     4  
     5  const (
     6  	ShortTermGas    = 0
     7  	LongTermGas     = 1
     8  	GasPowerConfigs = 2
     9  )
    10  
    11  // GasPowerLeft is long-term gas power left and short-term gas power left
    12  type GasPowerLeft struct {
    13  	Gas [GasPowerConfigs]uint64
    14  }
    15  
    16  // Add add to all gas power lefts
    17  func (g GasPowerLeft) Add(diff uint64) {
    18  	for i := range g.Gas {
    19  		g.Gas[i] += diff
    20  	}
    21  }
    22  
    23  // Min returns minimum within long-term gas power left and short-term gas power left
    24  func (g GasPowerLeft) Min() uint64 {
    25  	min := g.Gas[0]
    26  	for _, gas := range g.Gas {
    27  		if min > gas {
    28  			min = gas
    29  		}
    30  	}
    31  	return min
    32  }
    33  
    34  // Max returns maximum within long-term gas power left and short-term gas power left
    35  func (g GasPowerLeft) Max() uint64 {
    36  	max := g.Gas[0]
    37  	for _, gas := range g.Gas {
    38  		if max < gas {
    39  			max = gas
    40  		}
    41  	}
    42  	return max
    43  }
    44  
    45  // Sub subtracts from all gas power lefts
    46  func (g GasPowerLeft) Sub(diff uint64) GasPowerLeft {
    47  	cp := g
    48  	for i := range cp.Gas {
    49  		cp.Gas[i] -= diff
    50  	}
    51  	return cp
    52  }
    53  
    54  // String returns string representation.
    55  func (g GasPowerLeft) String() string {
    56  	return fmt.Sprintf("{short=%d, long=%d}", g.Gas[ShortTermGas], g.Gas[LongTermGas])
    57  }