cosmos-sdk/server/v2/stf/gas/defaults.go

49 lines
1.4 KiB
Go

package gas
import (
coregas "cosmossdk.io/core/gas"
"cosmossdk.io/core/store"
)
// DefaultWrapWithGasMeter defines the default wrap with gas meter function in stf. In case
// the meter sets as limit stf.NoGasLimit, then a fast path is taken and the store.WriterMap
// is returned.
func DefaultWrapWithGasMeter(meter coregas.Meter, state store.WriterMap) store.WriterMap {
if meter.Limit() == coregas.NoGasLimit {
return state
}
return NewMeteredWriterMap(DefaultConfig, meter, state)
}
// DefaultGasMeter returns the default gas meter. In case it is coregas.NoGasLimit a NoOpMeter is returned.
func DefaultGasMeter(gasLimit uint64) coregas.Meter {
if gasLimit == coregas.NoGasLimit {
return NoOpMeter{}
}
return NewMeter(gasLimit)
}
// DefaultConfig returns the default gas config.
// Unless overridden, the default gas costs are:
var DefaultConfig = coregas.GasConfig{
HasCost: 1000,
DeleteCost: 1000,
ReadCostFlat: 1000,
ReadCostPerByte: 3,
WriteCostFlat: 2000,
WriteCostPerByte: 30,
IterNextCostFlat: 30,
}
type NoOpMeter struct{}
func (n NoOpMeter) Consumed() coregas.Gas { return 0 }
func (n NoOpMeter) Limit() coregas.Gas { return coregas.NoGasLimit }
func (n NoOpMeter) Consume(_ coregas.Gas, _ string) error { return nil }
func (n NoOpMeter) Refund(_ coregas.Gas, _ string) error { return nil }
func (n NoOpMeter) Remaining() coregas.Gas { return coregas.NoGasLimit }