2018-05-07 10:48:12 -07:00
|
|
|
package types
|
|
|
|
|
|
|
|
import ()
|
|
|
|
|
2018-05-07 12:49:11 -07:00
|
|
|
// Gas measured by the SDK
|
2018-05-07 11:49:34 -07:00
|
|
|
type Gas = int64
|
2018-05-07 10:48:12 -07:00
|
|
|
|
2018-05-07 12:49:11 -07:00
|
|
|
// GasMeter interface to track gas consumption
|
2018-05-07 10:48:12 -07:00
|
|
|
type GasMeter interface {
|
|
|
|
GasExceeded() bool
|
2018-05-07 11:49:34 -07:00
|
|
|
GasConsumed() Gas
|
2018-05-07 10:48:12 -07:00
|
|
|
ConsumeGas(amount Gas)
|
|
|
|
ConsumeGasOrFail(amount Gas) bool
|
|
|
|
}
|
|
|
|
|
|
|
|
type basicGasMeter struct {
|
|
|
|
limit Gas
|
|
|
|
consumed Gas
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewGasMeter(limit Gas) GasMeter {
|
|
|
|
return &basicGasMeter{
|
|
|
|
limit: limit,
|
|
|
|
consumed: 0,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (g *basicGasMeter) GasExceeded() bool {
|
|
|
|
return g.consumed > g.limit
|
|
|
|
}
|
|
|
|
|
2018-05-07 11:49:34 -07:00
|
|
|
func (g *basicGasMeter) GasConsumed() Gas {
|
|
|
|
return g.consumed
|
|
|
|
}
|
|
|
|
|
2018-05-07 10:48:12 -07:00
|
|
|
func (g *basicGasMeter) ConsumeGas(amount Gas) {
|
|
|
|
g.consumed += amount
|
|
|
|
}
|
|
|
|
|
|
|
|
func (g *basicGasMeter) ConsumeGasOrFail(amount Gas) bool {
|
|
|
|
g.ConsumeGas(amount)
|
|
|
|
return g.GasExceeded()
|
|
|
|
}
|