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§
Sourcefn instruction_cost(&self, instruction: &Instruction) -> Option<u32>
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.
Sourcefn memory_grow_cost(&self) -> MemoryGrowCost
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.
Sourcefn call_per_local_cost(&self) -> u32
fn call_per_local_cost(&self) -> u32
A surcharge cost to calling a function that is added per local variable of the function.