Trait gear_core::gas_metering::Rules

pub trait Rules {
    // Required methods
    fn instruction_cost(&self, instruction: &Instruction) -> Option<u32>;
    fn memory_grow_cost(&self) -> MemoryGrowCost;
    fn call_per_local_cost(&self) -> u32;
}
Expand description

An interface that describes instruction costs.

Required Methods§

fn instruction_cost(&self, instruction: &Instruction) -> Option<u32>

Returns the cost for the passed instruction.

Returning None makes the gas instrumention end with an error. This is meant as a way to have a partial rule set where any instruction that is not specifed is considered as forbidden.

fn memory_grow_cost(&self) -> MemoryGrowCost

Returns the costs for growing the memory using the memory.grow instruction.

Please note that these costs are in addition to the costs specified by instruction_cost for the memory.grow instruction. Those are meant as dynamic costs which take the amount of pages that the memory is grown by into consideration. This is not possible using instruction_cost because those costs depend on the stack and must be injected as code into the function calling memory.grow. Therefore returning anything but MemoryGrowCost::Free introduces some overhead to the memory.grow instruction.

fn call_per_local_cost(&self) -> u32

A surcharge cost to calling a function that is added per local variable of the function.

Implementors§