Updates the requirements on [criterion](https://github.com/bheisler/criterion.rs) to permit the latest version. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/bheisler/criterion.rs/blob/master/CHANGELOG.md">criterion's changelog</a>.</em></p> <blockquote> <h2>[0.5.0] - 2023-05-23</h2> <h3>Changed</h3> <ul> <li>Replaced lazy_static dependency with once_cell</li> <li>Improved documentation of the <code>html_reports</code> feature</li> <li>Replaced atty dependency with is-terminal</li> <li>MSRV bumped to 1.64</li> <li>Upgraded clap dependency to v4</li> <li>Upgraded tempfile dependency to v3.5.0</li> </ul> <h3>Fixed</h3> <ul> <li>Quick mode (<code>--quick</code>) no longer outputs 1ms for measured times over 5 seconds</li> <li>Documentation updates</li> </ul> <h2>[0.4.0] - 2022-09-10</h2> <h3>Removed</h3> <ul> <li>The <code>Criterion::can_plot</code> function has been removed.</li> <li>The <code>Criterion::bench_function_over_inputs</code> function has been removed.</li> <li>The <code>Criterion::bench_functions</code> function has been removed.</li> <li>The <code>Criterion::bench</code> function has been removed.</li> </ul> <h3>Changed</h3> <ul> <li>HTML report hidden behind non-default feature flag: 'html_reports'</li> <li>Standalone support (ie without cargo-criterion) feature flag: 'cargo_bench_support'</li> <li>MSRV bumped to 1.57</li> <li><code>rayon</code> and <code>plotters</code> are optional (and default) dependencies.</li> <li>Status messages ('warming up', 'analyzing', etc) are printed to stderr, benchmark results are printed to stdout.</li> <li>Accept subsecond durations for <code>--warm-up-time</code>, <code>--measurement-time</code> and <code>--profile-time</code>.</li> <li>Replaced serde_cbor with ciborium because the former is no longer maintained.</li> <li>Upgrade clap to v3 and regex to v1.5.</li> </ul> <h3>Added</h3> <ul> <li>A <code>--discard-baseline</code> flag for discarding rather than saving benchmark results.</li> <li>Formal support for benchmarking code compiled to web-assembly.</li> <li>A <code>--quiet</code> flag for printing just a single line per benchmark.</li> <li>A <code>Throughput::BytesDecimal</code> option for measuring throughput in bytes but printing them using decimal units like kilobytes instead of binary units like kibibytes.</li> </ul> <h3>Fixed</h3> <ul> <li>When using <code>bench_with_input</code>, the input parameter will now be passed through <code>black_box</code> before passing it to the benchmark.</li> </ul> <h2>[0.3.6] - 2022-07-06</h2> <h3>Changed</h3> <ul> <li>MSRV bumped to 1.49</li> <li>Symbol for microseconds changed from ASCII 'us' to unicode 'µs'</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/bheisler/criterion.rs/commit/4a560cb8d8b4cefc4819a6489f0ce0540663968d"><code>4a560cb</code></a> release version 0.5 (<a href="https://redirect.github.com/bheisler/criterion.rs/issues/683">#683</a>)</li> <li><a href="https://github.com/bheisler/criterion.rs/commit/3e2849ebf86e27507f783a20647a0fc81c6bfcc7"><code>3e2849e</code></a> Post v0.4 CHANGELOG updates (<a href="https://redirect.github.com/bheisler/criterion.rs/issues/680">#680</a>)</li> <li><a href="https://github.com/bheisler/criterion.rs/commit/637010e50d3819839cd45d9f5b281c169573416a"><code>637010e</code></a> Bump clap to version 4 (<a href="https://redirect.github.com/bheisler/criterion.rs/issues/679">#679</a>)</li> <li><a href="https://github.com/bheisler/criterion.rs/commit/39d7e2f9546981d87ae195fe7c68f778afdb66a4"><code>39d7e2f</code></a> Update to tempfile 3.5 (<a href="https://redirect.github.com/bheisler/criterion.rs/issues/675">#675</a>)</li> <li><a href="https://github.com/bheisler/criterion.rs/commit/8ab2752ccfeece50347c81866a4185f29fd978a2"><code>8ab2752</code></a> Fix typo in known_limitations.md (<a href="https://redirect.github.com/bheisler/criterion.rs/issues/674">#674</a>)</li> <li><a href="https://github.com/bheisler/criterion.rs/commit/a2112308ef8e3d8fe5a8da41ccb0fba3d5d460c4"><code>a211230</code></a> chore: replace atty with is-terminal (<a href="https://redirect.github.com/bheisler/criterion.rs/issues/628">#628</a>)</li> <li><a href="https://github.com/bheisler/criterion.rs/commit/a844eb226bb814e6a4e8b35b3b91c74f22ad535b"><code>a844eb2</code></a> Bump MSRV to 1.60 for csv dependency (<a href="https://redirect.github.com/bheisler/criterion.rs/issues/665">#665</a>)</li> <li><a href="https://github.com/bheisler/criterion.rs/commit/2f5360737807cbe90d149db6199783236f0ef634"><code>2f53607</code></a> Use OR operator to specify multiple licenses (<a href="https://redirect.github.com/bheisler/criterion.rs/issues/643">#643</a>)</li> <li><a href="https://github.com/bheisler/criterion.rs/commit/86dcd7d323799043c100dbf358409e986a872a11"><code>86dcd7d</code></a> Fix bug where time over the maximum would be reported as 1ms in quick mode. (...</li> <li><a href="https://github.com/bheisler/criterion.rs/commit/2942aee124e433213f0e9b917bb730bcdc7df6f3"><code>2942aee</code></a> Remove unnecessary <code>pub</code> from example code (<a href="https://redirect.github.com/bheisler/criterion.rs/issues/657">#657</a>)</li> <li>Additional commits viewable in <a href="https://github.com/bheisler/criterion.rs/compare/0.4.0...0.5.0">compare view</a></li> </ul> </details> <br /> You can trigger a rebase of this PR by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> > **Note** > Automatic rebases have been disabled on this pull request as it has been open for over 30 days. Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Alexander Theißen <alex.theissen@me.com>
wasm-instrument
A Rust library containing a collection of wasm module instrumentations and transformations mainly useful for wasm based block chains and smart contracts.
Provided functionality
This is a non exhaustive list of provided functionality. Please check out the documentation for details.
Gas Metering
Add gas metering to your platform by injecting the necessary code directly into the wasm module. This allows having a uniform gas metering implementation across different execution engines (interpreters, JIT compilers).
Stack Height Limiter
Neither the wasm standard nor any sufficiently complex execution engine specifies how many items on the wasm stack are supported before the execution aborts or malfunctions. Even the same execution engine on different operating systems or host architectures could support a different number of stack items and be well within its rights.
This is the kind of indeterminism that can lead to consensus failures when used in a blockchain context.
To address this issue we can inject some code that meters the stack height at runtime and aborts the execution when it reaches a predefined limit. Choosing this limit suffciently small so that it is smaller than what any reasonably parameterized execution engine would support solves the issue: All execution engines would reach the injected limit before hitting any implementation specific limitation.
License
wasm-instrument is distributed under the terms of both the MIT license and the
Apache License (Version 2.0), at your choice.
See LICENSE-APACHE, and LICENSE-MIT for details.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in wasm-instrument by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.