Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Host queries are modified to be able to specify their price. The calling of a such a query proceeds in two stages - deserializing and pricing, and then execution. In between the two stages,
piecrust
is able to make the choice of whether to continue with execution or not, based on the gas remaining for the execution.To achieve this, the
HostQuery
trait is modified by adding two functions -deserialize_and_price
andexecute
- and by removing theFn(&mut [u8], u32) -> u32
bound. This structure allows the implementer to price queries fairly, as well as prevent double deserialization by leveragingBox<dyn Any>
to pass data between the two functions.HostQuery
remains implemented for allFn(&mut [u8], u32) -> u32
that are alsoSend
andSync
, so this is not a breaking change.See-also: #359