Open coolreader18 opened 1 year ago
Oh, looks like wasmtime-fuzzing has a shim for set_fuel
the same as I described:
https://github.com/bytecodealliance/wasmtime/blob/main/crates/fuzzing/src/oracles.rs#L790-L802
Hi I am curious why #5220 can help us set customized fuel for each opcode?
Looks like #7240 only adds reset_fuel
, I don't think it should've auto-closed this issue?
In particular,
fn fuel_cost(&mut self, f: impl Fn(WasmOpcode) -> u64 + Send + Sync + 'static) -> &mut Self;
this would be still desirable.
Apologies for this getting closed. I was picking up #5220 which also would have closed this issue. Maybe @coolreader18 could update this issue to have it be more about a custom cost function for fuel APIs?
Also if you have opinions on store fuel related APIs would love to hear there here https://github.com/bytecodealliance/wasmtime/issues/7255
Feature
A set of new APIs that provide more control over fuel consumption:
Benefit
Allows more direct control over fuel consumption and filling, letting users set custom fuel costs for each operand if they deem some to be more costly/intensive in their environment, as well letting them set precisely how much fuel they might allow a single function call or set of function calls.
OutOfFuelError
being made public allows users to check when a Trap was caused by fuel running out.Implementation
I have an implementation for the custom fuel cost configuration, and the methods on
Store
should be fairly trivial.Alternatives
fuel_remaining
andset_fuel
can be approximated byconsume_fuel(0)
andif new_fuel > fuel_remaining() { add_fuel(delta) } else { consume_fuel(delta) }
respectively.fuel_cost
cannot be emulated, so the alternative is to just accept wasmtime's default cost function. As an alternative in designing the API, thefuel_cost
closure could take a&wasmparser::Operator<'_>
as it did in the original version of this issue. However, that would require exposingwasmparser
in wasmtime's public api, which is undesirable.