GasTracker
Gas tracker used to track gas usage by the EVM.
Properties
struct {
/// The gas size limit that the interpreter can run.
gas_limit: u64
/// The amount of gas that has already been used.
used_amount: u64
/// The amount of gas to refund to the caller.
refund_amount: i64
}Error
Set of errors that can be returned while updating the tracker.
error{ OutOfGas, GasOverflow }Init
Sets the tracker's initial state.
Signature
pub fn init(gas_limit: u64) GasTrackerAvailableGas
Returns the remaining gas that can be used.
Signature
pub fn availableGas(self: GasTracker) u64UpdateTracker
Updates the gas tracker based on the opcode cost.
Signature
pub inline fn updateTracker(self: *GasTracker, cost: u64) GasTracker.Error!voidError
Set of errors that can be returned while updating the tracker.
error{ OutOfGas, GasOverflow }CalculateCallCost
Calculates the gas cost for the CALL opcode.
Signature
pub inline fn calculateCallCost(spec: SpecId, values_transfered: bool, is_cold: bool, new_account: bool) u64CalculateCodeSizeCost
Calculates the gas cost for the EXTCODESIZE opcode.
Signature
pub inline fn calculateCodeSizeCost(spec: SpecId, is_cold: bool) u64CalculateCostPerMemoryWord
Calculates the gas cost per Memory word.
Returns null in case of overflow.
Signature
pub inline fn calculateCostPerMemoryWord(length: u64, multiple: u64) ?u64CalculateCreateCost
Calculates the cost of using the CREATE opcode.
PANICS if the gas cost overflows
Signature
pub inline fn calculateCreateCost(length: u64) u64CalculateCreate2Cost
Calculates the cost of using the CREATE2 opcode.
Returns null in case of overflow.
Signature
pub inline fn calculateCreate2Cost(length: u64) ?u64CalculateExponentCost
Calculates the gas used for the EXP opcode.
Signature
pub inline fn calculateExponentCost(exp: u256, spec: SpecId) error{Overflow}!u64CalculateExtCodeCopyCost
Calculates the gas used for the EXTCODECOPY opcode.
Signature
pub inline fn calculateExtCodeCopyCost(spec: SpecId, len: u64, is_cold: bool) ?u64CalculateKeccakCost
Calculates the cost of using the KECCAK256 opcode.
Returns null in case of overflow.
Signature
pub inline fn calculateKeccakCost(length: u64) ?u64CalculateLogCost
Calculates the gas cost for a LOG instruction.
Signature
pub inline fn calculateLogCost(size: u8, length: u64) ?u64CalculateMemoryCost
Calculates the memory expansion cost based on the provided word_count
Signature
pub inline fn calculateMemoryCost(count: u64) u64CalculateMemoryCopyLowCost
Calculates the cost of a memory copy.
Signature
pub inline fn calculateMemoryCopyLowCost(length: u64) ?u64CalculateFrontierSstoreCost
Calculates the cost of the SSTORE opcode after the FRONTIER spec.
Signature
pub inline fn calculateFrontierSstoreCost(current: u256, new: u256) u64CalculateIstanbulSstoreCost
Calculates the cost of the SSTORE opcode after the ISTANBUL spec.
Signature
pub inline fn calculateIstanbulSstoreCost(original: u256, current: u256, new: u256) u64CalculateSloadCost
Calculate the cost of an SLOAD opcode based on the spec and if the access is cold
or warm if the BERLIN spec is enabled.
Signature
pub inline fn calculateSloadCost(spec: SpecId, is_cold: bool) u64CalculateSstoreCost
Calculate the cost of an SSTORE opcode based on the spec, if the access is cold
and the value in storage. Returns null if the spec is ISTANBUL enabled and the provided
gas is lower than CALL_STIPEND.
Signature
pub inline fn calculateSstoreCost(spec: SpecId, original: u256, current: u256, new: u256, gas: u64, is_cold: bool) ?u64CalculateSstoreRefund
Calculate the refund of an SSTORE opcode.
Signature
pub inline fn calculateSstoreRefund(spec: SpecId, original: u256, current: u256, new: u256) i64CalculateSelfDestructCost
Calculate the cost of an SELFDESTRUCT opcode based on the spec and it's result.
Signature
pub inline fn calculateSelfDestructCost(spec: SpecId, result: SelfDestructResult) u64WarmOrColdCost
Returns the gas cost for reading from a warm or cold storage slot.
Signature
pub inline fn warmOrColdCost(cold: bool) u64